基于51单片机的年历程序,12864液晶显示.doc_第1页
基于51单片机的年历程序,12864液晶显示.doc_第2页
基于51单片机的年历程序,12864液晶显示.doc_第3页
基于51单片机的年历程序,12864液晶显示.doc_第4页
基于51单片机的年历程序,12864液晶显示.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#define uchar unsigned char#define uint unsigned intsbit LCD_RS=P35;sbit LCD_RW=P36;sbit LCD_EN=P34;sbit LCD_PSB=P24;sbit s1=P30;/独立按键sbit s2=P31;sbit s3=P32;sbit rd=P37;sbit beep=P23;/定义蜂鸣器端口uchar miao,shi,fen,mon,day,week,year1,year2,i, s1num,count;uint a,b,year;uchar code dis2=星期 ; uchar code dis3= 北华大学;void delay_1ms(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void di()/蜂鸣器 beep=0; delay_1ms(100); beep=1;void write_cmd(uchar cmd) /写命令 LCD_RS=0; LCD_RW=0; LCD_EN=0; P0=cmd; delay_1ms(5); LCD_EN=1; delay_1ms(5); LCD_EN=0;void write_dat(uchar dat) /写数据 LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; delay_1ms(5); LCD_EN=1; delay_1ms(5); LCD_EN=0;void write_sfm(uchar add,char dat) /写时分秒 uchar shi1,ge1; shi1=dat/10; ge1=dat%10; write_cmd(0x90+add); /写显示地址的指令 write_dat(0x30+shi1); write_dat(0x30+ge1); /ge2=dat%10; /write_cmd(0x88+add);/ write_dat(0x30+ge2);void write_nyr(uchar add,char dat) /写年月 char shi,ge; shi=dat/10; ge=dat%10; write_cmd(0x80+add); write_dat(0x30+shi); write_dat(0x30+ge);void write_week(uchar add,char dat) /写星期 char ge2; ge2=dat%10; write_cmd(0x88+add); write_dat(0x30+ge2);void init() /初始化 2014年11月6日星期1 23:59:59 LCD_PSB=1; rd=0; LCD_EN=0; fen=59; miao=59; shi=23; week=1; year1=20; year2=14; mon=11; day=6; count=0; s1num=0;TMOD=0x01; /中断0,方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1; write_cmd(0x30); delay_1ms(5); write_cmd(0x0c); delay_1ms(5); write_cmd(0x01); delay_1ms(5); write_cmd(0x91); write_dat(:); delay_1ms(5); write_cmd(0x93); write_dat(:); delay_1ms(5);write_sfm(4,miao);write_sfm(2,fen); write_sfm(0,shi) ; write_cmd(0x82); write_dat(-); delay_1ms(5); write_cmd(0x84); write_dat(-); delay_1ms(5); write_nyr(5,day); write_nyr(3,mon); write_nyr(0,year1); write_nyr(1,year2); write_week(2,week); void keyscan() /独立键盘检测 if(s1=0) delay_1ms(5); if(s1=0) s1num+; while(!s1); di(); if(s1num=1) TR0=0;write_cmd(0x84); /光标定位到日的位置write_cmd(0x0f); /光标开始闪数if(s1num=2) write_cmd(0x82);/光标定位到月的位置 if(s1num=3) write_cmd(0x80); /光标定位到年的位置 if(s1num=4) write_cmd(0x95); /光标定位到秒的位置 if(s1num=5) write_cmd(0x93); /光标定位到分的位置if(s1num=6) write_cmd(0x90); /光标定位到时的位置 if(s1num=7) write_cmd(0x91); if(s1num=8) write_cmd(0x8a); /光标定位到星期的位置 if(s1num=9) s1num=0; write_cmd(0x0c);/取消光标闪数 TR0=1;/启动定时器 if(s1num!=0) /只有功能键被按下后,增大和减小键才有效 if(s2=0) delay_1ms(5); if(s2=0) while(!s2); di(); if(s1num=1) miao+;if(miao=60) miao=0;write_sfm(4,miao);write_cmd(0x84);if(s1num=2) fen+; if(fen=60) fen=0;write_sfm(2,fen);write_cmd(0x82);if(s1num=3) shi+; if(shi=24) shi=0;write_sfm(0,shi);write_cmd(0x80);if(s1num=4) day+; if(day=a) day=0;write_nyr(5,day);write_cmd(0x95);if(s1num=5) mon+; if(mon=12) mon=0;write_nyr(3,mon);write_cmd(0x93);if(s1num=6) year2+; if(year2=99) year2=-1; write_nyr(1 ,year2); write_cmd(0x91);if(s1num=7) year1+; write_nyr(0,year1);write_cmd(0x90);if(s1num=8) week+; if(week=8) week=0;write_week(2,week);write_cmd(0x8a); if(s3=0) delay_1ms(5); if(s3=0) while(!s3); di(); if(s1num=1) miao-; if(miao=0) miao=60; write_sfm(4,miao); write_cmd(0x84); if(s1num=2) fen-;if(fen=0)fen=60; write_sfm(2,fen); write_cmd(0x82); if(s1num=3) shi-;if(shi=0)shi=24; write_sfm(0,shi); write_cmd(0x80); if(s1num=4) day-;if(day=0) day=a ;write_nyr(5,day);write_cmd(0x95);if(s1num=5) mon-; if(mon=0) mon=12; write_nyr(3,mon); write_cmd(0x93); if(s1num=6) year2-; if(year2=-1) year2=99; write_nyr(1,year2); write_cmd(0x91); if(s1num=7) year1-; write_nyr(0,year1); write_cmd(0x90); if(s1num=8) week-; if(week=0) week=6; write_week(2,week); write_cmd(0x8a); void display(uchar a) year=year2+year1*100; if(mon=1|3|5|7|8|10|12) a=31; else if(mon=2) if(year%4!=0) a=28; else a=29; else a=30; void main() init(); write_cmd(0x98); /地址 for(i=0;i8;i+) write_dat(dis3i); delay_1ms(5); write_cmd(0x88); /地址for(i=0;i4;i+) write_dat(dis2i); delay_1ms(5); while(1) keyscan(); display(a); void timer0()interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0;shi+;if(shi=24) shi=0; day+; week+; if(week=7) week=0; if(day=a) day=0; m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论