51单片机c语言编写的1602液晶显示闹钟(共13页).doc
《51单片机c语言编写的1602液晶显示闹钟(共13页).doc》由会员分享,可在线阅读,更多相关《51单片机c语言编写的1602液晶显示闹钟(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上#include#define uchar unsigned char#define uint unsigned intuchar code table= 2012-08-17 MON; /設定開始顯示時間uchar code table1= 12:30:00;uchar code table273= MON,TUE,WED,THU,FRI,SAT,SUN; /定義二維字符數組sbit wr=P36; / 1602液晶讀/寫端sbit dula=P26; / 數碼管段選sbit wela=P27; / 數碼管位選sbit lcden=P34; / 1602液晶使能端s
2、bit lcdrs=P35; /1602液晶命令/數據端 sbit key1=P30; /聲明s4按鍵sbit key2=P31; / 聲明s8按鍵sbit key3=P32; / 聲明s12按鍵sbit key4=P33; / 聲明s16按鍵sbit beep=P23; / 聲明蜂鳴器sbit rd=P37; / 聲明4個按鍵公共端uchar num1,shi=12,fen=30,miao,yue=8,ri=17,shi1,fen1,miao1,keynum1,week;/定義時分秒變量uint nian=2012; /定義年變量void delayms(uint x)uint i,j;fo
3、r(i=x;i0;i-) /定義帶參數延時函數for(j=110;j0;j-);void write_com(uchar com) /1602液晶寫指令函數wr=0;lcdrs=0;P0=com;delayms(1);lcden=1;delayms(1); lcden=0;void write_date(uchar date) /1602液晶寫數據函數 wr=0;lcdrs=1;P0=date;delayms(1);lcden=1;delayms(1);lcden=0;void write_addate1(uchar add,uint date)/定義顯示年函數uint qian;uchar
4、bai,shi,ge;qian=date/1000;bai=date%1000/100;shi=date%1000%100/10;ge=date%10;write_com(add+0x80);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);void write_addate2(uchar add,uchar date)/定義顯示月、日、時、分、秒函數uchar shi,ge;shi=date/10;ge=date%10;write_com(add+0x80);write_da
5、te(0x30+shi);write_date(0x30+ge);void write_rq(uchar i) /定義顯示星期函數 uchar x;for(x=0;x3;x+)write_date(table2ix);delayms(1);void init () /定義初始化函數 dula=0; /關閉數碼管段、位選端wela=0; TMOD=0x01; / 定時器0工作方式為16位TH0=(65536-45872)/256; / 裝初值TL0=(65536-45872)%256;EA=1; / 開總中斷ET0=1; /開定時器0中斷write_com(0x38); / 設置16*2顯示,5
6、*7點陣,8位數據口write_com(0x06); / 寫一個字符後地址指針加1write_com(0x0c); /設置開顯示,不顯示光標write_com(0x01); / 顯示清0,數據清0write_com(0x80); / 使指針指向第1行第1列void keyscan() / 定義按鍵函數uchar keynum; rd=0; /4個按鍵公共端為低電平if(key1=0) /s4按鍵被按下delayms(3); /去抖延時if(key1=0) /確認s4按鍵被按下,進入調時間模式keynum+;while(!key1); /松手檢測if(keynum=1) /s4按下一次 TR0=
7、0; /關閉定時器0write_com(0x81); /指針指向第1行2列 write_com(0x0f); /開啟光標顯示,光標閃爍if(keynum=2)write_com(0x86); /光標跳到月份if(keynum=3) write_com(0x89);/光標跳到日 if(keynum=4) write_com(0x8c); /光標跳到星期 if(keynum=5) write_com(0xc4); /光標跳到時 if(keynum=6) write_com(0xc7); /光標跳到分 if(keynum=7) write_com(0xca); /光標跳到秒 if(keynum=8)
8、 keynum=0; /退出調時間模式 TR0=1; /開啟定時器0 write_com(0x0c); /關閉光標顯示 if(keynum) /當進入調時間模式時 if(key2=0) /s8按鍵按下 delayms(3); /去抖延時if(key2=0) if(keynum=1) nian+; /s8每按下一次年份加1if(nian=10000) / 加滿清0nian=0;write_addate1(1,nian); / 顯示年份write_com(0x81); /寫完數據指針指向年份原來位置 if(keynum=2) yue+; /s8每按下一次月份加1if(yue=13) yue=0;
9、/加滿清0write_addate2(6,yue); /顯示月份write_com(0x86); /寫完數據指針指向月份原來位置 if(keynum=3) ri+;if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) /1,3,5,7,8,10,12月有31天if(ri=32) /加滿還原ri=1;if(yue=4|yue=6|yue=9|yue=11)/4,6,9,11月有30天if(ri=31)ri=1;if(yue=2&(nian%4=0&nian%100!=0)|nian%400=0)/閏年2月有30天if(ri=30)ri=1;if(yue=
10、2&(nian%4!=0)|(nian%100=0&nian%400!=0) /非閏年2月有31天if(ri=29)ri=1;write_addate2(9,ri); /顯示日 write_com(0x89); /寫完數據指針指向日原來位置 if(keynum=4) week+; /s8每按下一次星期加1if(week=7) /加滿還原week=0; write_rq(week); /顯示星期write_com(0x8c); /寫完數據指針指向星期原來位置 if(keynum=5) shi+; /s8每按下一次時加1if(shi=24) shi=0; /加滿還原write_addate2(0x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 语言 编写 1602 液晶显示 闹钟 13
限制150内