版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include<reg52.h> #define uint unsigned int #define uchar unsigned char Uint i,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按键被按下的标
2、记变量,K3num=0-K3按键被按下的标记变量 uchar code table=" H.I.T CHINA "/定义初始上电时液晶默认显示状态 uchar code table2=" TIME " uchar code Alarm_0=" GBDS " uc
3、har code Alarm_1=" SKDS " uchar code Alarm_2=" XKDS " uchar code Alarm_3=" DKDS " uchar code Alarm_00="
4、;GB " uchar code Alarm_11=" SK " uchar code Alarm_22=" XK " uchar code Alarm_33=" DK
5、60;" uchar code deng=" LIGHTING " sbit K1=P10; /四个按键 sbit K2=P11; sbit K3=P12; sbit K4=P13; sbit rs=P20; sbit rw=P21; /灯光控制端 sbit lc
6、den=P22; sbit LED2=P23; /广播控制端 sbit led=P24; /发光二极管控制端 sbit beep=P25; /蜂鸣器控制端 void delay(uint z) /延时函数 uint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-) void write_com(uchar
7、160;com)/液晶写命令函数 rs=0; rw=0; lcden=0; P3=com; delay(5); lcden=1; delay(5); lcden=0; void write_date(uchar date)/液晶写数据函数 rs=1; rw=0; lcden=0; P3=date; delay(5); lcden=1; delay(5); lcden=0;
8、 void write_sfm(uchar add,uchar date) /液晶写时分秒函数 uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); void init() /初始化函数 uint num; /写液晶的循环控制变量 aa
9、=0; /中断次数标志 K1num=0; /K1按键被按下的标记变量 K2num=0; /K2按键被按下的标记变量 K3num=0; /K3按键被按下的标记变量 K4num=0; /K4按键被按下的标记变量 flag1=1; /控制lcd屏刷新的变量 flag2=1;/控制闹钟响闹开启关闭的标记 flag3=1;/控制闹钟响起时,按下K4停止闹钟响闹的标记 flag4=1;/进入闹钟设置时的标记变量 flag5
10、=1;/进入时间设置时的标记变量 led=1; /发光二极管初始化 LED2=0; /广播初始化 rw=0; N=100; /系统启动时,闹钟时间到发出的声音为连续三次发出“哗”的一声 miao=0; /系统初始化时间 fen=0; 19 shi=7; fen1=6; /初始化闹钟的时间 shi1=7; f
11、en2=8; /初始化闹钟的时间 shi2=7; fen3=10; /初始化闹钟的时间 shi3=7; fen4=12; /初始化闹钟的时间 shi4=7; beep=0; /蜂鸣器初始化 lcden=0; /液晶使能端初始化 write_com(0x38); /1602液晶初始化,设置16*2显示。5*7点阵,8位数据接口 write_com(0x0c);/设置开显示,不显示光 writ
12、e_com(0x06); /写一个字符后地址指针自动加1 write_com(0x01);/显示清0数据指针清0 write_com(0x80); /将数据指针定位到第一行,第一个字处 for(num=0;num<15;num+) /显示闹钟标示: H.I.T CHINA write_date(tablenum);delay(10); write_com(0x80+0x40+11);/写出时间显示部分的两个冒号
13、0;write_date(':'); write_com(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); write_sfm(12,fen); /送去液晶显示秒分时 write_sfm(9,shi); TMOD=0x01; /设置定时器0为工作方式1 TH0=(65536-50000)/256;/定时器装初值 TL0=(
14、65536-50000)%256; EA=1; /开总中断 ET0=1; /开定时器0中断 TR0=1; void xianshi() /系统时间显示 write_com(0x80+0x40); for(i=0;i<9;i+) write_date(table2i); write_com(0x80+0x40+11);/写出时间显示部分的两个冒号 write_date(':'); write_com(0x80+0
15、x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); write_sfm(12,fen); /送去液晶显示秒分时 write_sfm(9,shi); void time() /更改系统时间 if( (K1num=0)&&(flag3=1) ) write_com(0x80+0x40)
16、; for(i=0;i<9;i+) write_date(table2i); if(K1=0)/判断K1按下,则开始修改时间 delay(5); flag5=1; if(K1=0&&K1num=0) K1num=1; while(!K1) /判断是否松开按键,后同 if(K1num=1) TR0=0; /关闭计数器0 write_com(
17、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=1 while(!K1); shi+; /则调整时加1 if(shi=24)
18、shi=0; /若满24后将清零 write_sfm(9,shi); /每调节一次送液晶显示 write_com(0x80+0x40+10); if(K2=0&&K1num=1) /判K2按下,修改系统时间的分钟 delay(5); if(K2=0) write_com(0x80+0x40+13); /光标定位到分钟位置 K1num=1; while(!K2); fen+;
19、60;/则调整分加1 if(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); w
20、rite_com(0x0c); /取消光标闪 TR0=1; /启动定时器使时钟开始走 flag1=1;/flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值 flag1=1; write_com(0x80+0x40+11); write_date(':'); write_com(0x80+0x40+14); write_date(' '); wr
21、ite_com(0x80+0x40+15); write_date(' '); void guangbo() /广播定时 if(K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_00i); if(K3=0&&K3num=0) /判断K3首次被按下,则设置闹钟 delay(5); /延时消抖,后
22、同 if(K3=0) flag1=0; write_com(0x80+0x40+13); /第一次按下光标定位到分钟位置 while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_0i); write_sfm(12,fen1); /送去液晶显示定时的分,时 write_sfm(9,shi1); write_com(0x0f); /光标
23、开始闪烁 write_com(0x80+0x40+13); /显示位置回到调节处 if(K2=0&&K3num=0) /K2被按下时显示定时时间 delay(5); if(K2=0) write_sfm(12,fen1); /送去液晶显示定时的分,时 write_sfm(9,shi1); while(!K2); write_sfm(12,fen);
24、160;/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+; /则调整定时的时加1 if(shi2=24)
25、;/若满24后将清零 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)
26、; fen1+; /则调整分加1 if(fen1=60) /若满60后将清零 fen1=0; write_sfm(12,fen1);/每调节一次送液晶显示 write_com(0x80+0x40+13); /显示位置重新回到调节处 if(K3num=1) /当设置闹钟时,K3被按下设置完成。 if(K3=0) /判断K3按下 delay(5); if(K3=0)
27、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_c
28、om(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); void shangke() /上课定时 if( K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_11i);
29、60; 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;i<9;i+) write_date(Alarm_1
30、i); write_sfm(12,fen2); /送去液晶显示定时的分,时 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
31、(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按键按下,则此时修改的是闹钟时间的小时 delay(5); if(K1=0) write_com(0x8
32、0+0x40+10); /光标定位到小时位置 K3num=1; while(!K1); shi2+; /则调整定时的时加1 if(shi2=24) /若满24后将清零 shi1=0; write_sfm(9,shi2); /每调节一次送液晶显示 write_com(0x80+0x40+10); /显示位置重新回到调节处 if(K2=0&&K3num=1) /按键2按下,修改闹钟时间
33、的分钟 delay(5); if(K2=0) write_com(0x80+0x40+13); /光标定位到分钟位置 K3num=1; while(!K2); fen2+; /则调整分加1 if(fen1=60) /若满60后将清零 fen1=0; write_sfm(12,fen2); /每调节一次送液晶显示一下 write_com(0x80+0x40+13); /显示位置重新回到调节处
34、; 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,则为修改闹钟时间时,屏幕显示的是修
35、改闹钟时间的值 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(' '); void xiake(
36、) /下课定时 if( K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_22i); if(K3=0&&K3num=0) /判断K3首次被按下,则设置闹钟 delay(5); /延时消抖,后同 if(K3=0) flag1=0; write_com(
37、0x80+0x40+13); /第一次按下光标定位到分钟位置 while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_2i); write_sfm(12,fen3); /送去液晶显示定时的分,时 write_sfm(9,shi3); write_com(0x0f); /光标开始闪烁 write_com(0x80+0x40+13); /显示位置回到调节处 &
38、#160;if(K2=0&&K3num=0) /K2被按下时显示定时时间 delay(5); if(K2=0) write_sfm(12,fen3); /送去液晶显示定时的分,时 write_sfm(9,shi3); while(!K2); write_sfm(12,fen); /K2松开显示当前时间 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小时,判断K1键按
39、下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时 delay(5); if(K1=0) write_com(0x80+0x40+10); /光标定位到小时位置 K3num=1; while(!K1); shi3+; /则调整定时的时加1 if(shi3=24) /若满24后将清零 shi1=0; write_sfm(9,shi3); /每调节一次送液晶显示 write_com(0x80+0x
40、40+10); /显示位置重新回到调节处 if(K2=0&&K3num=1) /卸螷2按下,修改闹钟时间的分钟 delay(5); if(K2=0) write_com(0x80+0x40+13); /光标定位到分钟位置 K3num=1; while(!K2); fen3+; /则调整分加1 if(fen1=60) /若满60后将清零 fen1=0;
41、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); /光标停止闪烁
42、0; 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(' '); void dengkong()
43、; /灯光控制 if(K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_33i); if(K3=0&&K3num=0) /判断K3首次被按下,则设置闹钟 delay(5); /延时消抖,后同 if(K3=0) flag1=0; write_com(0x80+0x40+13); /第一次按下光标定位到分钟位置&
44、#160;while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_3i); write_sfm(12,fen4); /送去液晶显示定时的分,时 write_sfm(9,shi4); write_com(0x0f); /光标开始闪烁 write_com(0x80+0x40+13); /显示位置回到调节处 if(K2=0&&K3
45、num=0) /K2被按下时显示定时时间 delay(5); if(K2=0) write_sfm(12,fen4); /送去液晶显示定时的分,时 write_sfm(9,shi4); while(!K2); write_sfm(12,fen); /K2松开显示当前时间 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改
46、的是闹钟时间的小时 delay(5); if(K1=0) write_com(0x80+0x40+10); /光标定位到小时位置 K3num=1; while(!K1); shi4+; /则调整定时的时加1 if(shi4=24) /若满24后将清零 shi1=0; write_sfm(9,shi4); /每调节一次送液晶显示一下 write_com(0x80+0x40+10); /显示位置重新回到调节处
47、60;if(K2=0&&K3num=1) /按键2按下,修改闹钟时间的分钟 delay(5); if(K2=0) write_com(0x80+0x40+13); /光标定位到分钟位置 K3num=1; while(!K2); fen4+; /则调整分加1 if(fen1=60) /若满60后将清零 fen1=0; write_sfm(12,fen4); /每调节一次送液晶显示一下
48、 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. write_s
49、fm(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(' '); void clock()/任意闹钟时间到闹钟响 if(fen=fen1)&&am
50、p;(shi=shi1)|(fen=fen2)&&(shi=shi2)|(fen=fen3)&&(shi=shi3)|(fen=fen4)&&(shi=shi4)&&(flag2=1) /闹钟的响闹控制 beep=1; /此时闹钟响起,连续三次发出哗的一声 flag5=0; flag3=0; /置flag3=0,表示此时闹钟响起,按下K4键执行停止闹钟响闹语句 delay(100); /这些语句是为了使闹钟响起时,发出连续三次哗的声音
51、60;beep=0; delay(100); beep=1; delay(100); beep=0; delay(100); beep=1; delay(100); beep=0; delay(300); else beep=0; if(fen!=fen1)&&(fen!=fen2)&&(fen!=fen3)&&(fen!=fen4)&&(flag4=0)&&(flag5=
52、0) )/显示时间 xianshi(); if(fen=fen1)&&(shi=shi1)&&(flag2=1) LED2=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_00i); write_sfm(12,fen1); /送去液晶显示定时的分,时
53、;write_sfm(9,shi1); else LED2=0; if(fen=fen1)&&(shi=shi1)&&(flag2=0)|(fen-1=fen1)&&(shi=shi1)&&(flag4=0) ) xianshi(); if(fen=fen2)&&(shi=shi2)&&(flag2=1) write_com(0x80+0x40); for(i=0;i<
54、;9;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)&&
55、(flag2=1) write_com(0x80+0x40); for(i=0;i<9;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=fen4)&&(shi=shi4)&&(flag2=1) write_com(0x80+0x40); for(i=0;i<15;i+) write_dat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年消防工程消防安全隐患排查与整改承接合同范本3篇
- 酒店设施融资租赁转租赁协议
- 2025年度KTV特色主题装饰设计制作合同3篇
- 古镇区二手房交易协议
- 知识更新基金管理办法
- 商务接待商务车租赁协议
- 2025版购猫合同:猫咪健康养护与领养指南3篇
- 智能医疗信息系统安装协议
- 社区服务点管理原则
- 旅游景点建筑合同
- 造纸行业岗位安全操作规程
- 律师事务所人员管理制度
- 带封面的新员工入职登记表
- 20以内的加法口算练习题4000题 205
- 玻璃打胶记录
- 《全媒体营销与运营(微课版)》-教学大纲
- Module3 Unit2 Do they like apples?(教学设计)-2024-2025学年外研版(一起)英语二年级上册
- 医院教学工作汇报
- 篮球球星姚明课件
- 小学生经典阅读英语短文100篇
- 2024-2030年中国计算机视觉行业市场发展趋势与前景展望战略分析报告
评论
0/150
提交评论