51单片机+带字库液晶12864+DS1302数字时钟C源程序无按键修改功能Word文档格式.docx
- 文档编号:21251170
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:6
- 大小:16.10KB
51单片机+带字库液晶12864+DS1302数字时钟C源程序无按键修改功能Word文档格式.docx
《51单片机+带字库液晶12864+DS1302数字时钟C源程序无按键修改功能Word文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机+带字库液晶12864+DS1302数字时钟C源程序无按键修改功能Word文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
sbitRST=P3^5;
//DS1302复位
bitReadRTC_Flag;
//读DS1302全局变量
/*12864端口定义*/
#defineLCD_dataP0
//带字库液晶12864数据口
sbitLCD_RS=P2^4;
//寄存器选择输入
sbitLCD_RW=P2^5;
//液晶读/写控制
sbitLCD_EN=P2^6;
//液晶使能控制
sbit
PSB=P2^1;
//并口控制
RES=P2^3;
ucharcodedis1[]={"
电子设计天地"
};
//液晶显示的汉字
ucharcodedis2[]={"
有志者,事竟成!
"
ucharcodedis4[]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
unsignedchartemp;
#definedelayNOP();
{_nop_();
_nop_();
voidlcd_pos(ucharX,ucharY);
//确定显示位置
unsignedcharl_tmpdate[7]={0,7,16,19,10,1,9};
//秒分时日月周年09-10-1916:
07:
00
codeunsignedcharwrite_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
//
秒分时日月周年最低位读写位
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);
//readRTCvoidSet_RTC(void);
//setRTC
voidInitTIMER0(void);
//initaltimer0
/*******************************************************************/
/**/
/*延时函数*/
voiddelay(unsignedintm)//延时程序
{
unsignedinti,j;
for(i=0;
i<
m;
i++)
for(j=0;
j<
10;
j++);
}
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
/*******************************************************************/bitlcd_busy()
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&
0x80);
LCD_EN=0;
return(result);
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
voidlcd_wcmd(ucharcmd)
while(lcd_busy());
LCD_RW=0;
_nop_();
P0=cmd;
delay
(1);
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
/*******************************************************************/voidlcd_wdat(uchardat)
LCD_RS=1;
P0=dat;
/*LCD初始化设定*/
/*******************************************************************/voidlcd_init()
P0=0xFF;
P2=0xFF;
delay(40);
PSB=1;
//并口方式。
delay
(1);
RES=0;
RES=1;
delay(10);
lcd_wcmd(0x30);
delay(100);
delay(37);
lcd_wcmd(0x08);
lcd_wcmd(0x10);
lcd_wcmd(0x0C);
//显示开,关光标delay(100);
lcd_wcmd(0x01);
//清除LCD的显示内容delay(100);
lcd_wcmd(0x06);
voidmain()
uchari;
InitTIMER0();
Set_RTC();
lcd_init();
//初始化LCD
while
(1)
if(ReadRTC_Flag)
ReadRTC_Flag=0;
Read_RTC();
lcd_pos(0,0);
//设置显示位置为第一行的第1个字符
i=0;
while(dis1[i]!
='
\0'
)
{//显示字符
lcd_wdat(dis1[i]);
i++;
lcd_pos(1,0);
//设置显示位置为第二行的第1个字符
while(dis2[i]!
lcd_wdat(dis2[i]);
//显示字符
i++;
lcd_pos(2,0);
lcd_wdat(dis4[l_tmpdate[6]/16]);
//DS1302是BCD码,进行处理得到十位与
个位数。
lcd_pos(2,1);
lcd_wdat(dis4[l_tmpdate[6]%16]);
lcd_pos(2,2);
lcd_wdat('
-'
);
lcd_pos(2,3);
lcd_wdat(dis4[l_tmpdate[4]/16]);
lcd_pos(2,4);
lcd_wdat(dis4[l_tmpdate[4]%16]);
lcd_pos(2,5);
lcd_pos(2,6);
lcd_wdat(dis4[l_tmpdate[3]/16]);
lcd_pos(2,7);
lcd_wdat(dis4[l_tmpdate[3]%16]);
//设置显示位置为第三行的第1个
字符
lcd_pos(3,0);
//设置显示位置为第四行的第1个字符
lcd_wdat(dis4[l_tmpdate[2]/16]);
lcd_pos(3,1);
lcd_wdat(dis4[l_tmpdate[2]%16]);
lcd_pos(3,2);
:
'
lcd_pos(3,3);
lcd_wdat(dis4[l_tmpdate[1]/16]);
lcd_pos(3,4);
lcd_wdat(dis4[l_tmpdate[1]%16]);
lcd_pos(3,5);
lcd_pos(3,6);
lcd_wdat(dis4[l_tmpdate[0]/16]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 字库 液晶 12864 DS1302 数字 时钟 源程序 按键 修改 功能
链接地址:https://www.bdocx.com/doc/21251170.html