蓝桥杯备赛学习笔记(第八届省赛)

以下学习内容来自小蜜蜂老师!!

1.选择锁存器函数

通过打通锁存器的方式来实现IO口控制对应功能,不写下面函数蓝桥杯15单片机是不能像51单片机一样正常运行功能的!!

void SelectHC573(unsigned channnel)
{
  switch(channel)
  {
    case 4:
      P2 = (P2 & 0x1f)|0x80; //选择LED
    break; 
    case 5:
      P2 = (P2 & 0x1f)|0xa0; //选择蜂鸣器和继电器
    break; 
    case 6:
      P2 = (P2 & 0x1f)|0xc0; //选择数码管位选
    break; 
    case 7:
      P2 = (P2 & 0x1f)|0xe0; //选择数码管段选
    break; 
    case 0:
      P2 = (P2 & 0x1f)|0x00; //不选择锁存器
    break; 
  }
}

2.系统初始化

void init_system()
{
  SelectHc573(5);
  P0 = 0x00;
  SelectHc573(4);
  P0 = 0xff;
  SelectHc573(0);
}

上面有注释哦!

3.显示数码管的值

巧妙地运用了位运算,在历年的真题中数码管显示都是重中之重的,请大家仔细学习!!

void Display_bitSMG(unsigned char pos,unsigned char dat)
{
  Select_HC573(7);
  P0 = 0xff;
  SelectHc573(6);
  P0 = 0x01<<pos;
  SelectHc573(7);
  P0 = dat;
  Select_HC573(0);
}

4.DS18B20的读取温度

DS18B20是我们进阶要学习的一个外设,下面是温度转换和读取的流程,第二张是对于正温度和负温度做的处理,我给出的示例代码是只读取温度的整数部分,小数部分直接舍去,比赛很少有读取小数的情况,所以第二张图大家了解就可以。

unsigned int temp = 0;
void Read_DS18B20temp()
{
  unsigned char LSB,MSB;
  init_ds18b20();
  Write_DS18B20(0xcc);
  Write_DS18B20(0x44);
  Delay_ds18b20(500);
  init_ds18b20();
  Write_DS18B20(0xcc);
  Write_DS18B20(0xbe);
  LSB = Read_DS18B20();
  MSB = Read_DS18B20();
  temp = MSB;
  temp = (temp<<8)|LSB;
  temp = temp>>4;
}

5.ds1302的初始化

 在开始和末尾要对0x8e地址写入0x00和0x80,第一次是关闭写保护,这样我们可以写入数据,最后关闭写保护,防止数据被篡改,中间循环是把初始化的时间写入对应的地址内.

以下是日历时钟寄存器的内部示意图以及相应字节的功能

常用的存储器地址和配置参数如下:

void Init_ds1302()
{
  unsigned char i;
  Write_Ds1302_Byte(0x8e,0x00);
  for(i = 0;i<=3;i++)
  {
    Write_Ds1302_Byte(Write_addr[i],TIME[i]);
  }
   Write_Ds1302_Byte(0x8e,0x80);
}

最后是实时更新时间的代码,把从地址读出的数据放回到存储数组中,就可以实时更新,在比赛中ds1302,ds18b20的驱动函数都会给出,大家不用担心还要自己写驱动的问题!

void Read_ds1302time()
{
	char i;
	for(i = 0;i<3;i++)
	{
		TIME[i] =  Read_Ds1302_Byte(Read_addr[i]);
	}
}

第一次发博客,吸纳大家的建议,如果反响好的话,接下来会更新我自己写出的第八届省赛的代码!谢谢大家!

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值