毕业设计程序_第1页
毕业设计程序_第2页
毕业设计程序_第3页
毕业设计程序_第4页
毕业设计程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、#include#defineuintunsignedint#defineucharunsignedcharUinti,miao,fen,fen1,fen2,fen3,fen4,shi,shi1,shi2,shi3,shi4,flag1,flag2,flag3,flag4,flag5,aa,K1num,K2num,K3num,K4num,N;/K1num-K1按键被按下的标记变量,K2num-K2按键被按下的标记变量,K3num=0-K3按键被按下的标记变量ucharcodetable=H.I.TCHINA;/定义初始上电时液晶默认显示状态ucharcodetable2=TIME;ucharc

2、odeAlarm_0=GBDS;ucharcodeAlarm_1=SKDS;ucharcodeAlarm_2=XKDS;ucharcodeAlarm_3=DKDS;ucharcodeAlarm_00=GB;ucharcodeAlarm_11=SK;ucharcodeAlarm_22=XK;ucharcodeAlarm_33=DK;ucharcodedeng=LIGHTING;sbitK1=P10;/四个按键sbitK2=P11;sbitK3=P12;sbitK4=P13;sbitrs=P20;sbitrw=P21;/灯光控制端sbitlcden=P22;sbitLED2=P23;/广播控制端s

3、bitled=P24;/发光二极管控制端sbitbeep=P25;/蜂鸣器控制端voiddelay(uintz)/延时函数uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidwrite_com(ucharcom)/液晶写命令函数rs=0;rw=0;lcden=0;P3=com;delay(5);lcden=1;delay(5);lcden=0;voidwrite_date(uchardate)/液晶写数据函数rs=1;rw=0;lcden=0;P3=date;delay(5);lcden=1;delay(5);lcden=0;voidwrite_sfm(uch

4、aradd,uchardate)/液晶写时分秒函数ucharshi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);voidinit()/初始化函数uintnum;/写液晶的循环控制变量aa=0;/中断次数标志K1num=0;/K1按键被按下的标记变量K2num=0;/K2按键被按下的标记变量K3num=0;/K3按键被按下的标记变量K4num=0;/K4按键被按下的标记变量flag1=1;/控制lcd屏刷新的变量flag2=1;/控制闹钟响闹开启关闭的标记f

5、lag3=1;/控制闹钟响起时,按下K4停止闹钟响闹的标记flag4=1;/进入闹钟设置时的标记变量flag5=1;/进入时间设置时的标记变量led=1;/发光二极管初始化LED2=0;/广播初始化rw=0;N=100;/系统启动时,闹钟时间到发出的声音为连续三次发出“哗”的一声miao=0;/系统初始化时间fen=0;19shi=7;fen1=6;/初始化闹钟的时间shi1=7;fen2=8;/初始化闹钟的时间shi2=7;fen3=10;/初始化闹钟的时间shi3=7;fen4=12;/初始化闹钟的时间shi4=7;beep=0;/蜂鸣器初始化lcden=0;/液晶使能端初始化write_

6、com(0x38);/1602液晶初始化,设置16*2显示。5*7点阵,8位数据接口write_com(0x0c);/设置开显示,不显示光write_com(0x06);/写一个字符后地址指针自动加1write_com(0x01);/显示清0数据指针清0write_com(0x80);/将数据指针定位到第一行,第一个字处for(num=0;num15;num+)/显示闹钟标示:H.I.TCHINAwrite_date(tablenum);delay(10);write_com(0x80+0x40+11);/写出时间显示部分的两个冒号write_date(:);write_com(0x80+0x

7、40+14);write_date();write_com(0x80+0x40+15);write_date();write_sfm(12,fen);/送去液晶显示秒分时write_sfm(9,shi);TMOD=0x01;/设置定时器0为工作方式1TH0=(65536-50000)/256;/定时器装初值TL0=(65536-50000)%256;EA=1;/开总中断ET0=1;/开定时器0中断TR0=1;voidxianshi()/系统时间显示write_com(0x80+0x40);for(i=0;i9;i+)write_date(table2i);write_com(0x80+0x40

8、+11);/写出时间显示部分的两个冒号write_date(:);write_com(0x80+0x40+14);write_date();write_com(0x80+0x40+15);write_date();write_sfm(12,fen);/送去液晶显示秒分时write_sfm(9,shi);voidtime()/更改系统时间if(K1num=0)&(flag3=1)write_com(0x80+0x40);for(i=0;i9;i+)write_date(table2i);if(K1=0)/判断K1按下,则开始修改时间delay(5);flag5=1;if(K1=0&K1num=0

9、)K1num=1;while(!K1)/判断是否松开按键,后同if(K1num=1)TR0=0;/关闭计数器0write_com(0x0f);/光标开始闪烁write_com(0x80+0x40+13);if(K1=0&K1num=1)/判断K1按下,修改系统时间的小时delay(5);if(K1=0)write_com(0x80+0x40+10);/光标定位到小时位置K1num=1;/置K1num=1while(!K1);shi+;/则调整时加1if(shi=24)shi=0;/若满24后将清零write_sfm(9,shi);/每调节一次送液晶显示write_com(0x80+0x40+1

10、0);if(K2=0&K1num=1)/判K2按下,修改系统时间的分钟delay(5);if(K2=0)write_com(0x80+0x40+13);/光标定位到分钟位置K1num=1;while(!K2);fen+;/则调整分加1if(fen=60)fen=0;/若满60后将清零write_sfm(12,fen);/每调节一次送液晶显示write_com(0x80+0x40+13);if(K1num=1)/当设置时间或闹钟时,K3被按下设置完成。if(K3=0)/判断K3按下delay(5);if(K3=0)flag5=0;K1num=0;while(!K3);write_com(0x0c

11、);/取消光标闪TR0=1;/启动定时器使时钟开始走flag1=1;/flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值flag1=1;write_com(0x80+0x40+11);write_date(:);write_com(0x80+0x40+14);write_date();write_com(0x80+0x40+15);write_date();voidguangbo()/广播定时if(K3num=0)write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_00i);if

12、(K3=0&K3num=0)/判断K3首次被按下,则设置闹钟delay(5);/延时消抖,后同if(K3=0)flag1=0;write_com(0x80+0x40+13);/第一次按下光标定位到分钟位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_0i);write_sfm(12,fen1);/送去液晶显示定时的分,时write_sfm(9,shi1);write_com(0x0f);/光标开始闪烁write_com(0x80+0x40+13);/显示位置回到调节处if(K2=0&K3num=0)

13、/K2被按下时显示定时时间delay(5);if(K2=0)write_sfm(12,fen1);/送去液晶显示定时的分,时write_sfm(9,shi1);while(!K2);write_sfm(12,fen);/K2松开显示当前时间write_sfm(9,shi);if(K1=0&K3num=1)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时delay(5);if(K1=0)write_com(0x80+0x40+10);/光标定位到小时位置K3num=1;while(!K1);shi1+;/则调整定时的时加1if(shi2=24)/若满24

14、后将清零shi1=0;write_sfm(9,shi1);/每调节一次送液晶显示write_com(0x80+0x40+10);/显示位置重新回到调节处if(K2=0&K3num=1)/按键2按下,修改闹钟时间的分钟delay(5);if(K2=0)write_com(0x80+0x40+13);/光标定位到分钟位置K3num=1;while(!K2);fen1+;/则调整分加1if(fen1=60)/若满60后将清零fen1=0;write_sfm(12,fen1);/每调节一次送液晶显示write_com(0x80+0x40+13);/显示位置重新回到调节处if(K3num=1)/当设置闹

15、钟时,K3被按下设置完成。if(K3=0)/判断K3按下delay(5);if(K3=0)K1num=0;K3num=0;while(!K3);write_com(0x0c);/光标停止闪烁flag1=1;/flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值write_sfm(12,fen);/送去液晶显示分,时write_sfm(9,shi);write_com(0x80+0x40+11);write_date(:);write_com(0x80+0x40+14);write_date();write_com(0x80+0x40

16、+15);write_date();voidshangke()/上课定时if(K3num=0)write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_11i);if(K3=0&K3num=0)/判断K3首次被按下,则设置闹钟delay(5);/延时消抖,后同if(K3=0)flag1=0;write_com(0x80+0x40+13);/第一次按下光标定位到分钟位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_1i);write_sfm(12,fen2

17、);/送去液晶显示定时的分,时write_sfm(9,shi2);write_com(0x0f);/光标开始闪烁write_com(0x80+0x40+13);/显示位置回到调节处if(K2=0&K3num=0)/K2被按下时显示定时时间delay(5);if(K2=0)write_sfm(12,fen2);/送去液晶显示定时的分,时write_sfm(9,shi2);while(!K2);write_sfm(12,fen);/K2松开显示当前时间write_sfm(9,shi);if(K1=0&K3num=1)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时

18、间的小时delay(5);if(K1=0)write_com(0x80+0x40+10);/光标定位到小时位置K3num=1;while(!K1);shi2+;/则调整定时的时加1if(shi2=24)/若满24后将清零shi1=0;write_sfm(9,shi2);/每调节一次送液晶显示write_com(0x80+0x40+10);/显示位置重新回到调节处if(K2=0&K3num=1)/按键2按下,修改闹钟时间的分钟delay(5);if(K2=0)write_com(0x80+0x40+13);/光标定位到分钟位置K3num=1;while(!K2);fen2+;/则调整分加1if(

19、fen1=60)/若满60后将清零fen1=0;write_sfm(12,fen2);/每调节一次送液晶显示一下write_com(0x80+0x40+13);/显示位置重新回到调节处if(K3num=1)/当设置时间或闹钟时,K3被按下设置完成。if(K3=0)/判断K3按下delay(5);if(K3=0)K1num=0;K3num=0;while(!K3);write_com(0x0c);/光标停止闪烁flag1=1;/flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值write_sfm(12,fen);/送去液晶显示分,时

20、write_sfm(9,shi);write_com(0x80+0x40+11);write_date(:);write_com(0x80+0x40+14);write_date();write_com(0x80+0x40+15);write_date();voidxiake()/下课定时if(K3num=0)write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_22i);if(K3=0&K3num=0)/判断K3首次被按下,则设置闹钟delay(5);/延时消抖,后同if(K3=0)flag1=0;write_com(0x80+0x40+13

21、);/第一次按下光标定位到分钟位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_2i);write_sfm(12,fen3);/送去液晶显示定时的分,时write_sfm(9,shi3);write_com(0x0f);/光标开始闪烁write_com(0x80+0x40+13);/显示位置回到调节处if(K2=0&K3num=0)/K2被按下时显示定时时间delay(5);if(K2=0)write_sfm(12,fen3);/送去液晶显示定时的分,时write_sfm(9,shi3);while

22、(!K2);write_sfm(12,fen);/K2松开显示当前时间write_sfm(9,shi);if(K1=0&K3num=1)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时delay(5);if(K1=0)write_com(0x80+0x40+10);/光标定位到小时位置K3num=1;while(!K1);shi3+;/则调整定时的时加1if(shi3=24)/若满24后将清零shi1=0;write_sfm(9,shi3);/每调节一次送液晶显示write_com(0x80+0x40+10);/显示位置重新回到调节处if(K2=0&K

23、3num=1)/卸螷2按下,修改闹钟时间的分钟delay(5);if(K2=0)write_com(0x80+0x40+13);/光标定位到分钟位置K3num=1;while(!K2);fen3+;/则调整分加1if(fen1=60)/若满60后将清零fen1=0;write_sfm(12,fen3);/每调节一次送液晶显示write_com(0x80+0x40+13);if(K3num=1)/当设置时间或闹钟时,K3被按下设置完成。if(K3=0)/判断K3按下delay(5);if(K3=0)K1num=0;K3num=0;while(!K3);write_com(0x0c);/光标停止闪

24、烁flag1=1;write_sfm(12,fen);/送去液晶显示分,时write_sfm(9,shi);write_com(0x80+0x40+11);write_date(:);write_com(0x80+0x40+14);write_date();write_com(0x80+0x40+15);write_date();voiddengkong()/灯光控制if(K3num=0)write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_33i);if(K3=0&K3num=0)/判断K3首次被按下,则设置闹钟delay(5);/延时消抖,

25、后同if(K3=0)flag1=0;write_com(0x80+0x40+13);/第一次按下光标定位到分钟位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_3i);write_sfm(12,fen4);/送去液晶显示定时的分,时write_sfm(9,shi4);write_com(0x0f);/光标开始闪烁write_com(0x80+0x40+13);/显示位置回到调节处if(K2=0&K3num=0)/K2被按下时显示定时时间delay(5);if(K2=0)write_sfm(12,fe

26、n4);/送去液晶显示定时的分,时write_sfm(9,shi4);while(!K2);write_sfm(12,fen);/K2松开显示当前时间write_sfm(9,shi);if(K1=0&K3num=1)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时delay(5);if(K1=0)write_com(0x80+0x40+10);/光标定位到小时位置K3num=1;while(!K1);shi4+;/则调整定时的时加1if(shi4=24)/若满24后将清零shi1=0;write_sfm(9,shi4);/每调节一次送液晶显示一下wri

27、te_com(0x80+0x40+10);/显示位置重新回到调节处if(K2=0&K3num=1)/按键2按下,修改闹钟时间的分钟delay(5);if(K2=0)write_com(0x80+0x40+13);/光标定位到分钟位置K3num=1;while(!K2);fen4+;/则调整分加1if(fen1=60)/若满60后将清零fen1=0;write_sfm(12,fen4);/每调节一次送液晶显示一下 write_com(0x80+0x40+13);/显示位置重新回到调节处if(K3num=1)/当设置时间或闹钟时,K3被按下设置完成。if(K3=0)/判断K3按下delay(5);

28、if(K3=0)K1num=0;K3num=0;while(!K3);write_com(0x0c);/光标停止闪烁flag1=1;/flag=1.write_sfm(12,fen);/送去液晶显示分,时write_sfm(9,shi);write_com(0x80+0x40+11);write_date(:);write_com(0x80+0x40+14);write_date();write_com(0x80+0x40+15);write_date();voidclock()/任意闹钟时间到闹钟响if(fen=fen1)&(shi=shi1)|(fen=fen2)&(shi=shi2)|(

29、fen=fen3)&(shi=shi3)|(fen=fen4)&(shi=shi4)&(flag2=1)/闹钟的响闹控制beep=1;/此时闹钟响起,连续三次发出哗的一声flag5=0;flag3=0;/置flag3=0,表示此时闹钟响起,按下K4键执行停止闹钟响闹语句delay(100);/这些语句是为了使闹钟响起时,发出连续三次哗的声音beep=0;delay(100);beep=1;delay(100);beep=0;delay(100);beep=1;delay(100);beep=0;delay(300);elsebeep=0;if(fen!=fen1)&(fen!=fen2)&(f

30、en!=fen3)&(fen!=fen4)&(flag4=0)&(flag5=0)/显示时间xianshi();if(fen=fen1)&(shi=shi1)&(flag2=1)LED2=1;write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_00i);write_sfm(12,fen1);/送去液晶显示定时的分,时write_sfm(9,shi1);elseLED2=0;if(fen=fen1)&(shi=shi1)&(flag2=0)|(fen-1=fen1)&(shi=shi1)&(flag4=0)xianshi();if(fen=fe

31、n2)&(shi=shi2)&(flag2=1)write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_11i);write_sfm(12,fen2);/送去液晶显示定时的分,时write_sfm(9,shi2);if(fen=fen2)&(shi=shi2)&(flag2=0)|(fen-1=fen2)&(shi=shi2)&(flag4=0)xianshi();if(fen=fen3)&(shi=shi3)&(flag2=1)write_com(0x80+0x40);for(i=0;i9;i+)write_date(Alarm_22i);write_sfm(12,fen3);/送去液晶显示定时的分,时write_sfm(9,shi3);if(fen=fen3)&(shi=shi3)&(flag2=0)|(fen-1=fen3)&(shi=shi3)&(flag4=0)xianshi();if(fen

温馨提示

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

评论

0/150

提交评论