ReRain
认证:普通会员
所在专题目录 查看专题
【蓝桥杯单片机】七、长按键(完整代码加注释)
【蓝桥杯单片机】八、第八届省赛之电子钟
【蓝桥杯单片机】九、第九届省赛之彩灯控制器
【蓝桥杯单片机】十、第九届蓝桥杯国赛之“多功能测量仪表”
【蓝桥杯单片机】十一、第十届蓝桥杯省赛失败总结加试题分析
【蓝桥杯单片机】十二、底层练习
作者动态 更多
【蓝桥杯单片机】十二、底层练习
2021-04-20 17:46
【蓝桥杯单片机】十一、第十届蓝桥杯省赛失败总结加试题分析
2021-04-11 20:50
【蓝桥杯单片机】十、第九届蓝桥杯国赛之“多功能测量仪表”
2021-04-01 16:36
【蓝桥杯单片机】九、第九届省赛之彩灯控制器
2021-03-30 18:19
【蓝桥杯单片机】八、第八届省赛之电子钟
2021-03-29 18:41

【蓝桥杯单片机】十二、底层练习

代码参考:<我的GitHub>底层练习


1. 数码管:{0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};

2. E2PROM:24C02的寻址器件地址(0x50<<1)(表示后续操作为写:0是写,1是读);

3. E2Read:读数据:*buf++ = I2CReadACK(); 注意!!!最后一个字节读是:*buf = I2CReadNAK(); 

4. E2PROM每一个字节最多8位(u8类型!!!!);

5. E2Write(页写入):注意加入了1个大循环,判断页(while(len>0)),还有判断是否到达页边界的操作:if((addr & 0x70) == 0) ;

6.不管是读还是写,判断完器件之后就要写入地址(I2CWrite(addr)),然后再执行读写操作;

7. PCF8591:寻址器件(0x48<<1),控制字节(0x40),注意一下和E2PROM的不同之处,显示温度或者电压时最好把不用的数码管关掉,要得到变化的电压值,需要不断刷新电压值(每200ms获取一次电压值)

I2C协议(注意!!!读写数据时从高位到低位(mask = 0x80)

8. DS18B20:时序要求严格(读写数据要记得关闭中断!!!!),记住几个操作指令:0xCC(跳过ROM检测)0x44(启动温度转换)0xBE(读暂存寄存器);还有就是 !!!使用的是1-Wire协议(读写数据时从低位到高位(mask = 0x01))

9. I2C读和18B20读有相似之处,那就是必须在单片机释放总线的情况下,才能读取数据;

10. 18B20读写数据的时候,必须先产生一个2us的低电平脉冲

11.

12.

13. DS1302 :DS1302ByteWrite()函数写入数据之前要先把IO引脚拉高!!! DS1302SingleRead()和DS1302BurstRead()最后要把IO口拉低!!!!! 

14. DS1302与SPI时序类似,读写数据时从低位向高位读写!!!(mask=0x01)

15. 只有向DS1302内部寄存器上读写数据时才需要使能CE(所以Byte读写都不需要使能!!!!!

16. 得到实时时间(先把DS1302内部的数据读出来,然后再给结构体赋值),设置时间(先把结构体的值存到数组里,再把数组的数据写入DS1302)这两个函数都与寄存器有关,记住!!:寄存器0-6对应(秒,分,时,日,月,周,年) 

17. 初始化1302的代码:

void InitDS1302()
{
	struct sTime InitTime[] = {0x00, 0x00, 0x00, 0x10, 0x20, 0x30, 0x02};
	DS1302_CE = 0;//初始化状态,时序图可见
	DS1302_CK = 0;//初始化状态,时序图可见
	DS1302SingleWrite(7, 0x00);//撤销写保护,第7个寄存器的功能相关
	SetRealTime(&InitTime);
}

18. 结构体定义放.h文件比较好,不用加extern!!!

  • NOTICE!!! Byte读写一位数据完毕后都要先拉高再拉低时钟,完成1个位的操作!!!!

    emmm,这是第一遍。。。。 !!!!!按键部分有一个被忽视的问题:


第三遍底层遇到的问题。。。。。 还是DS18B20和DS1302不太熟。。。。 温度显示(不显示小数)错误找两点:

  • MSB清除符号位没有写(MSB &= 0x0F)
  • temp清除小数部分没有写(temp >>= 4)
  • 记住三个操作指令!!!!!
    • 跳过ROM(0xCC)
    • 开始温度转化(0x44)
    • 读取转换温度(0xBE)

DS1302的错误:

  • 突发读写要判断!!!!
    • 突发读(0xBF)
    • 突发写(0xBE)
  • 两条指令要记牢!!!
    • 寻址写(reg << 1 | 0x80)
    • 寻址读(reg << 1 | 0x81)
声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 63
收藏 63
关注 302
成为作者 赚取收益
全部留言
0/200
  • dy-6KE3vEwV 2021-05-12 11:54
    大开眼界,真是好文
    回复
  • dy-yzQJmX94 2021-05-12 11:20
    讲的真好!
    回复
  • dy-CciwBzZf 2021-05-09 20:56
    讲的真好!
    回复
  • dy-eW6Cll6r 2021-05-06 22:48
    什么时候更新
    回复
  • dy-QNbdNKm4 2021-05-06 22:21
    期待继续
    回复
  • dy-ywhXRpvA 2021-05-06 22:13
    讲的真好!
    回复
  • dy-l8t8ZuL7 2021-05-06 19:59
    不亚于看了一篇高质量论文
    回复
  • dy-At9CXPwh 2021-05-06 19:42
    讲的真好!
    回复
  • dy-sqVMjqhR 2021-05-06 19:19
    什么时候更新
    回复
  • dy-68SsSZU4 2021-05-05 19:40
    比论文强一万倍
    回复
  • dy-p9J9DlzP 2021-05-05 18:36
    学习了
    回复
  • dy-L6UqdGlc 2021-05-05 17:26
    对我很有帮助
    回复
  • dy-SgCRSAWd 2021-04-29 21:22
    不亚于看了一篇高质量论文
    回复
  • dy-lZg1ikQS 2021-04-29 21:02
    围观学习
    回复
  • dy-jffwHRqn 2021-04-29 11:27
    请教一下
    回复
  • dy-6jaMNnKj 2021-04-29 11:03
    大开眼界,真是好文
    回复
  • dy-CxL3KI25 2021-04-28 23:13
    期待继续
    回复
  • dy-uP6R9bIG 2021-04-28 22:20
    比论文强一万倍
    回复
  • dy-faUxdNVf 2021-04-28 22:15
    讲的真好!
    回复
  • dy-M4jhJ3vx 2021-04-28 18:22
    大开眼界,真是好文
    回复