1602显示万年历Word文档下载推荐.docx
- 文档编号:17284012
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:13
- 大小:17.08KB
1602显示万年历Word文档下载推荐.docx
《1602显示万年历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《1602显示万年历Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
//秒分时日月周年最低位读写位
codeunsignedcharread_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//读的地址
/******************************************************************/
/*函数声明*/
/******************************************************************/
voidWrite_Ds1302_byte(unsignedchartemp);
voidWrite_Ds1302(unsignedcharaddress,unsignedchardat);
unsignedcharRead_Ds1302(unsignedcharaddress);
voidRead_RTC(void);
//readRTC
voidSet_RTC(void);
//setRTC
voidInitTIMER0(void);
//initaltimer0
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(unsignedchart)
{
while(--t);
}
mS延时函数,含有输入参数unsignedchart,无返回值
0~255这里使用晶振12M,精确延时请使用汇编
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
}
判忙函数
bitLCD_Check_Busy(void)
{
DataPort=0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return(bit)(DataPort&
0x80);
写入命令函数
voidLCD_Write_Com(unsignedcharcom)
while(LCD_Check_Busy());
//忙则等待
RW_CLR;
DataPort=com;
写入数据函数
voidLCD_Write_Data(unsignedcharData)
RS_SET;
DataPort=Data;
清屏函数
voidLCD_Clear(void)
LCD_Write_Com(0x01);
DelayMs(5);
写入字符串函数
voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)
if(y==0)
{
LCD_Write_Com(0x80+x);
}
else
LCD_Write_Com(0xC0+x);
}
while(*s)
LCD_Write_Data(*s);
s++;
写入字符函数
voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData)
LCD_Write_Com(0x80+x);
LCD_Write_Data(Data);
}*/
/*------------------------------------------------------
写入数字函数字符的地址加0x30显示数字
---------------------------------------------------------*/
voidLCD_Write_num(unsignedcharx,unsignedchary,unsignedcharnum)
LCD_Write_Data(0x30+num);
初始化函数
voidLCD_Init(void)
LCD_Write_Com(0x38);
/*显示模式设置*/
LCD_Write_Com(0x08);
/*显示关闭*/
/*显示清屏*/
LCD_Write_Com(0x06);
/*显示光标移动设置*/
LCD_Write_Com(0x0C);
/*显示开及光标设置*/
/*写一个字节*/
voidWrite_Ds1302_Byte(unsignedchartemp)
unsignedchari;
for(i=0;
i<
8;
i++)//循环8次写入数据
SCK=0;
SDA=temp&
0x01;
//每次传输低字节
temp>
>
=1;
//右移一位
SCK=1;
}
/*写入DS1302*/
voidWrite_Ds1302(unsignedcharaddress,unsignedchardat)
RST=0;
RST=1;
_nop_();
//启动
Write_Ds1302_Byte(address);
//发送地址
Write_Ds1302_Byte(dat);
//发送数据
//恢复
/*读出DS1302数据*/
unsignedcharRead_Ds1302(unsignedcharaddress)
unsignedchari,temp=0x00;
for(i=0;
i++)//循环8次读取数据
{
if(SDA)
temp|=0x80;
//每次传输低字节
temp>
SCK=1;
}
//以下为DS1302复位的稳定时间
RST=0;
SCK=0;
SDA=0;
SDA=1;
return(temp);
//返回
/*读时钟数据*/
voidRead_RTC(void)//读取日历
unsignedchari,*p;
p=read_rtc_address;
//地址传递
for(i=0;
7;
i++)//分7次读取秒分时日月周年
l_tmpdate[i]=Read_Ds1302(*p);
p++;
/*设定时钟数据*/
voidSet_RTC(void)//设定日历
unsignedchari,*p,tmp;
i++)
{//BCD处理
tmp=l_tmpdate[i]/10;
l_tmpdate[i]=l_tmpdate[i]%10;
l_tmpdate[i]=l_tmpdate[i]+tmp*16;
Write_Ds1302(0x8E,0X00);
p=write_rtc_address;
//传地址
for(i=0;
i++)//7次写入秒分时日月周年
{
Write_Ds1302(*p,l_tmpdate[i]);
p++;
Write_Ds1302(0x8E,0x80);
/*定时器中断函数*/
voidtim(void)interrupt1using1
//中断,用于数码管扫描
staticunsignedcharnum;
TH0=0xf5;
TL0=0xe0;
num++;
if(10==num)//隔段时间读取1302的数据。
时间间隔可以调整
ReadRTC_Flag=1;
//使用标志位判断
num=0;
/*------------------------------------------
显示部分
------------------------------------------*/
voiddisplaylcd(void)
LCD_Init();
LCD_Clear();
LCD_Write_num(0,1,l_tmpdisplay[0]);
LCD_Write_num(1,1,l_tmpdisplay[1]);
//秒
LCD_Write_String(2,1,"
:
"
);
LCD_Write_num(3,1,l_tmpdisplay[3]);
LCD_Write_num(4,1,l_tmpdisplay[4]);
//分
LCD_Write_String(5,1,"
LCD_Write_num(6,1,l_tmpdisplay[6]);
LCD_Write_num(7,1,l_tmpdisplay[7]);
//时
LCD_Write_String(9,0,"
w"
LCD_Write_String(10,0,"
e"
LCD_Write_String(11,0,"
LCD_Write_String(12,0,"
k"
LCD_Write_String(13,0,"
LCD_Write_num(14,0,l_tmpdisplay[8]);
LCD_Write_num(15,0,l_tmpdisplay[9]);
//周
LCD_Write_String(2,0,"
-"
LCD_Write_num(3,0,l_tmpdisplay[11]);
//日
LCD_Write_num(4,0,l_tmpdisplay[12]);
LCD_Write_String(5,0,"
LCD_Write_num(6,0,l_tmpdisplay[16]);
//月
LCD_Write_num(7,0,l_tmpdisplay[17]);
LCD_Write_num(0,0,l_tmpdisplay[14]);
LCD_Write_num(1,0,l_tmpdisplay[15]);
//年
l_tmpdisplay[0]=l_tmpdate[2]/16;
l_tmpdisplay[1]=l_tmpdate[2]&
0x0f;
l_tmpdisplay[3]=l_tmpdate[1]/16;
l_tmpdisplay[4]=l_tmpdate[1]&
l_tmpdisplay[6]=l_tmpdate[0]/16;
l_tmpdisplay[7]=l_tmpdate[0]&
l_tmpdisplay[8]=l_tmpdate[5]/16;
l_tmpdisplay[9]=l_tmpdate[5]&
l_tmpdisplay[11]=l_tmpdate[4]/16;
l_tmpdisplay[12]=l_tmpdate[4]&
l_tmpdisplay[14]=l_tmpdate[6]/16;
l_tmpdisplay[15]=l_tmpdate[6]&
l_tmpdisplay[16]=l_tmpdate[3]/16;
l_tmpdisplay[17]=l_tmpdate[3]&
/*定时器0初始化*/
voidInitTIMER0(void)
TMOD|=0x01;
//定时器设置16位
TH0=0xef;
//初始化值
TL0=0xf0;
ET0=1;
TR0=1;
EA=1;
/*主函数*/
voidmain(void)
{chari;
InitTIMER0();
//初始化定时器0
//Set_RTC();
//写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽
displaylcd();
while
(1)
if(ReadRTC_Flag==1)
ReadRTC_Flag=0;
Read_RTC();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1602 显示 万年历