学习单片机之后的第一个作品——基于DS12C887芯片的电子时钟

来源:互联网 发布:丿没事放放牛 知乎 编辑:程序博客网 时间:2024/04/26 06:45

       这个领域确实非常有趣,比原来单纯的编程要好多了,即动脑又动手,而且很容易入门。跟着网上down的视频教程学完了理论之后开始动手制作电子时钟,电路就是最基础的小电路:一块洞洞板,一个芯片座,2排杜邦线就OK了,至于排针用不用都行,可以直接把杜邦线焊在芯片座上。

     电路搞定之后就是连线,根据DS12C887芯片说明书里面的引脚介绍来考虑把这些引脚连到单片机的相关引脚上。MOT是模式选择引脚,有摩托罗拉和英特尔两种总线模式,这里我选英特尔模式,所以MOT角不接线或者接地,IO引脚AD0-AD7就连在单片机的P0口。剩下的CS,AS,RW,DS四个控制引脚连在单片机还没有被占用的引脚上就可以了,这里我连的是P3.7,P3.6,P3.3和P3.1。IRQ中断引脚连在单片机的外部中断0引脚上,SQW方波输出引脚在这次设计中没有用到所以不链接,Vcc引脚就接Vcc,reset复位引脚也接一个Vcc,至此线路连接部分就搞定了。

      一切就绪之后就是编程,这里面要注意一点就是这个芯片第一次使用的时候需要一系列初始化设置,最重要的就是晶振起振,按照说明书所说的控制寄存器A中的DV2,DV1,DV0这三个位是010的时候用来起振,其它位可以置0,所以在控制寄存器A的地址0x0A处传一个数据0x20就是开启振荡,表就开始走了;然后设置寄存器B,看了看说明,里面需要设置的就是闹钟,显示模式(二进制码还是BCD码)还有一个12小时还是24小时制,最后一个夏令时位置0就是不开启夏令时。这里我用二进制码,24小时制,所以最后在0x0B地址送了一串数据0x26。

      芯片初始化结束之后就是时间初始化,它需要一个初始的时间,在这个基础之上开始走时,于是按照说明书在年月日星期时分秒的地址处分别送入相应的数据,时间初始化就结束了。然后就是上电看看它走不走,这里面遇到一个问题,最开始用BCD码时时间读数出下了错误,跳着走,比如40之后就是49之类的,我数了一下,也是60个数但是现实错误,换成二进制码模式就好了。其它的没有遇到问题。只是在设置闹钟的时候需要读一下寄存器C来把寄存器C中的IRQF位清0,还有就是1602液晶的相关操作了。

      最后附上作品的照片。

 1 

 2 

 3 

4