提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
跟着B站江科大的单片机视频学了一段时间了,今天决定写一下学到的内容,方便与朋友们交流学习一下,有单片机学习群的朋友请留言告诉我,谢谢。
提示:以下是本篇文章正文内容,下面案例可供参考
一、如何使用DS1302时钟芯片
1302芯片中自带存储时间的寄存器,并且会自动计时。
二、使用步骤
1.引入库
主代码如下:
/*
此程序的大体思路是:
1.先将1302芯片进行初始化,此处信息都要从手册中获取
2.要想要芯片工作要先给一个初始的时间,也就是上电后显示的时间,这需要我们把想要设置的时间写入到芯片中,
也就是学会编写写入指令和数据的函数,此处将不同寄存器地址都给列了出来,再通过读取函数中的给指令字节或上0x01来达到
给指令最低位置1的效果,这个做法比较巧妙,最好掌握
3.完成了写入函数,那么就要通过读取函数来将寄存器中的数据获取出来了,从而才能通过1602液晶显示出来,并且读取函数是个不断循环的函数
原因在于1302芯片中的时间寄存器会自动加1,来不断刷新时间,也就要求程序要不断循环读取芯片中寄存器的数据,来刷新1602显示
4.在写入与读取函数都写完之后,为了程序进一步精简化,再设置一个设置时间的函数,负责将年月日时分秒这些数据写入到寄存器中,并且设置时间这个
函数只需要设置一次初始值即可,数据由数组中获取
5.为了方便也给读取时间数据设置了新的函数,分别获取寄存器的数据,因为1302自动计时增加的特点,寄存器中的数据会不断地更新,那么这个新添加
的读取函数就是一下子读年月日时分秒这些数据,这里要注意的是数据写入与存储都是以BCD格式进行的,要进行换算;将获取的值重新赋给数组,再供
LCD显示
6.最后根据需要将星期用英文缩写进行
*/
#include <REGX52.H>
#include "LCD1602.h"
#include "DS1302.h"
void main()
{
LCD_Init();
DS1302_Init();
LCD_ShowString(1,1,"20 - - ");//这是显示字符串,也就是时钟上分隔符的函数
LCD_ShowString(2,1," : : ");
DS1302_SetTime();
while(1)
{
DS1302_ReadTime();
LCD_ShowNum(1,3,DS1302_Time[0],2);
LCD_ShowNum(1,6,DS1302_Time[1],2);
LCD_ShowNum(1,9,DS1302_Time[2],2);
LCD_ShowNum(2,1,DS1302_Time[3],2);
LCD_ShowNum(2,4,DS1302_Time[4],2);
LCD_ShowNum(2,7,DS1302_Time[5],2);
// LCD_ShowNum(2,10,DS1302_Time[6],1);
switch(DS1302_Time[6])//为了显示星期几的英文缩写,尝试了一下写入到1302头文件中,有点难。
{
case 1 :LCD_ShowString(2,10,"Mon");break;
case 2 :LCD_ShowString(2,10,"Tus");break;
case 3 :LCD_ShowString(2,10,"Wed");break;
case 4 :LCD_ShowString(2,10,"Thu");break;
case 5 :LCD_ShowString(2,10,"Fri");break;
case 6 :LCD_ShowString(2,10,"Sat");break;
case 7 :LCD_ShowString(2,10,"Sun");break;
}
}
}
2.头文件
1602LCD代码如下:
#include <REGX52.H>
//引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7