




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #define uchar unsigned char#define PA XBYTE0x0fefc#define PB XBYTE0x0fefd#define PC XBYTE0x0fefe#define CTL XBYTE0x0feffcode unsigned char pan=0x0e7,10,0x0eb,3,0x0ed,2,0x0ee,1, /键盘 0x0d7,11,0x0db,6,0x0dd,5,0x0de,4, 0x0b7,12,0x0bb,9,0x0bd,8,0x0be,7, 0x77,13,0x7b,14,0x7d,0,0x7e,15;unsigned char buf=0,0,0,0,0,0,0,0,now,old=0xff;code char led=0x0c0,0x0f9,0x0a4,0x0b0, 0x99,0x92,0x82,0x0f8,0x80,0x90,0x0bf, 0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x078,0x00,0x10,0x88,0x0c8,0x8e;/字段码09,-,0.9.,n,fchar time8=0,0,0,0,0,0,0,0; /用于放时间char date8=0,0,0,0,0,0,0,0; /用于放日期int show_state;code int MAX=150;/用于设置时,无键按下的最多时间unsigned char clock_hour=6,clock_minute=30;/设置闹钟的时间char ms50,mx50,hour=5,minute=59,second=55;int year=2008;unsigned char month=10,day=1;/ XXXXXXXXXXXXXXXX延时1毫秒XXXXXXXXXXXXXXXX /void delay(void) uchar m; for(m=0;m150;m+);/XXXXXXXXXXXXXXXX LED显示子程序1 XXXXXXXXXXXXXXXXX /void scan1() unsigned char m,tc=0x80; int j; for(m=0;m=1; for(j=0;j1000;j+) delay(); PB=0x00; for(j=0;j100;j+) delay(); /XXXXXXXXXXX LED显示 XXXXXXXXXXX/void scan2(unsigned char x,char a) unsigned char m,tb,tc=0x80;for(m=0;m=1; delay();void time1() /时间存放数组 time7=second%10; time6=second/10; time5=10; time4=minute%10; time3=minute/10; time2=10; time1=hour%10; time0=hour/10;void date1() /日期存放数组 date7=day%10; date6=day/10; date5=month%10+11; date4=month/10; date3=year%10+11; date2=year%100/10; date1=year%1000/100; date0=year/1000;/XXXXXXXXXXXX 判断闰年程序XXXXXXXXXXXXXXXXXXX/char runnian() if(year%400=0)|(year%4=0&year%100!=0) return 1; return 0;void timechange(void) interrupt 1 using 2 /定时器0中断程序 int m; unsigned char xday; TF0=0; TH0=0x4B; TL0=0x0ff; /0.05s TR0=1; ms50+; if(ms50=20)/50毫秒中断20次为1秒 ms50=0;second+; if(second=60) second=0;minute+; if(minute=60) minute=0;hour+; if(hour=24) hour=0;day+; if(month=1,3,5,7,8,10,12) xday=31; if(month=4,6,9,11) xday=30; if(month=2)if(runnian()=1)xday=29; else xday=28;/判断闰年 if(dayxday) month+;day=1; if(month12) year+;month=1; /XXXXXXXXXXXXXXXXXXX计算星期几XXXXXXXXXXXXXXXXXXX/ char week() unsigned char y,w; y=month; if(y=1|y=2) y=y+12; w=(day+1+2*y+3*(y+1)/5+year+year/4-year/100+year/400)%7;/基姆拉尔森计算公式 return w; /XXXXXXXXXXXXXXXXXXX显示星期几XXXXXXXXXXXXXXXXXXX/void show_week() char n,w,key; show_state=0; w=week(); for(n=0;n8;n+) timen=w; while(1) show_state+; if(show_state=MAX) break; key=jian(time); if(key=13) break; scan(time); /闹钟响if(hour=clock_hour&minute=clock_minute)P3=P3&0x0fb;for(m=0;m5;m+) delay();P3=P3|0x04; /XXXXXXXXXXXXXXXX键盘子程序 XXXXXXXXXXXXXXXXXX/unsigned char jianpan() unsigned char m,row,line,k_value; PC=0xf0; if(PC&0xf0=0xf0) return 0x0ff; /无键按下 line=0x0FE; for (m=0;m4;m+) PC= line; /输出扫描信号 row=PC; /读键盘口 if (row & 0xf0) != 0xf0) break; line=(line1)+1;/下一行 if (m=4) return 0xff; k_value = (row & 0xf0) | (line & 0x0f);/给各键赋键值 for(m=0;m32;m=m+2) if(panm=k_value) return panm+1; return 0x0ff;unsigned char jian(unsigned char a)/读键盘5次,每次间隔10ms,判断键值是否有变,起到消抖动作用 unsigned char jj5=0,0,0,0,0; char n; for(n=0;n5;n+) hn=jianpan(); scan(a); if(h0=h1)&(h1=h2)&(h2=h3)&(h3=h4) now=jj0; if(now!=old)/键值前后不等 old=now; return now; return 0xff; else return 0xff;/XXXXXXXXXXXXXXXXXXX设置时间XXXXXXXXXXXXXXXXXXX/void set_time() unsigned char m=0,key=0xff,team=0,j; show_state=0; time6=10;/-用于区别时间设置与时间显示 time7=10; while(1) show_state+; if(show_state=MAX) team=1;break;/5s无按键自动退出 for(j=0;j12;j+) scan2(time,m); key=jian(time);/获取键值 if(key!=0x0ff) show_state=0; if(key=13&(time0*10+time1)24&(time3*10+time4)60)/确定,退出 break; else if(key=15) team=1;break;/取消,退出 else if(key=9) if(m=0&key=2) /控制时、分钟的个位和及十位输入的有效的键值 timem=key;m+; else if(m=1&time02&key=9) timem=key;m+; else if(m=1&key=3) timem=key;m+; else if(m=3&key=5) timem=key;m+; else if(m=4) timem=key;m+; m=m%5; else if(m=2) m+; if(team=0) hour=time0*10+time1; minute=time3*10+time4; /XXXXXXXXXXXXXXXXXXX设置日期XXXXXXXXXXXXXXXXXXX/void set_date() unsigned char m=0,key,j,team=0; int y=year; show_state=0; date1(); date6=0; date7=1; while(1) show_state+; if(show_state=MAX) team=1;break;/5s无按键自动退出 for(j=0;j12;j+) scan2(date,m); key=jian(date); if(key!=0x0ff) show_state=0; if(key=13&(date4*10+date5-11)0) /确认退出 break; else if(key=15) team=1;break; if(m=3) datem=key+11;m+; /年份的最后一位 else if(m=4&key=1) datem=key;m+; /月份的高位只能为0或1 else if(m=5) if(date4=1&key=2) datem=key+11;m+;/如果月份高位大于0,那月份的低位只能小于3 else datem=key+11;m+; else if(m=6&key=2&date4=0&date5=13) datem=key;m+;/如果月份是2月,天数的高位要小于3 else if(m=6&key=3&date4!=0&date5!=13) datem=key;m+;/不是2月,天数的高位可以为3 else if(m=7&key=9&date6=2&date4=0&date5=13)/二月且天数高位为2 year=date0*1000+date1*100+date2*10+date3-11; if(runnian()!=1&key=8)/不是闰年,低位只能0-8 datem=key;m+; else if(runnian()=1)/是闰年,低位0-9 datem=key;m+; year=y; else if(m=7&key=9&date6=2)datem=key;m+; /不是二月且天数的高位为2,天数的低位0-8 else if(m=7&key=1&date6=3) /天数的高位为3 y=date4*10+date5-11; if(y=2|y=4,y=6|y=9|y=11)&key=0) datem=key;m+; /是2,4,6,9,11月,天数的低位只能为0,否则为1 else datem=key;m+; else if(m=0|m=1|m=2)&key=9) datem=key;m+; m=m%8; if(team=0) year=date0*1000+date1*100+date2*10+date3-11; month=date4*10+date5-11; day=date6*10+date7; /XXXXXXXXXXXXXX开机自检子程序XXXXXXXXXXXXXXXX /void zijian() int m,j; scan1();/检查数码管 p_jiance(); for(j=0;j3;j+) P3=P3&0x0fb; for(m=0;m1000;m+) delay(); P3=P3|0x04; for(m=0;m1000;m+) delay(); /XXXXXXXXXXXX LED显示子程序2 XXXXXXXXXXXX /void scan(char buf) unsigned char m,tb,tc=0x80; for(m=0;m=1;/右移一位 delay(); /XXXXXXXXXXXXXXXXXXX指示灯检测XXXXXXXXXXXXXXXXXXX/void p_jiance() unsigned char team,m; int j; team=0x80; for(m=0;m=1; for(j=0;j100;j+) scan(time); P1=0xff;/XXXXXXXXXXXXXXXXXXX主程序XXXXXXXXXXXXXXXXXXX / void main() uchar j,key=0; for(j=0;j255;j+) delay(); CTL=0x88; /设置8255工作方式 zijian(); /开机自检 TMOD=0x01; TH0=0x4B; TL0=0x0ff; /0.05s TR0=1; IE=0x82; ms50=0;/这两个为50毫秒计数 mx50=0; for(j=0;j=100) mx50=0; else mx50=101; else if(key=11) set_time();/时间设置 else if(key=12) set_date();/日期设置 show_week();/显示星期 if(mx50=200)/重新计数 mx50=0; 袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年第十三届贵州人才博览会遵义市事业单位人才引进笔试高频难、易错点备考题库含答案详解
- 难点解析自考专业(行政管理)试题及答案(网校专用)
- 2024政法干警通关题库附参考答案详解(综合题)
- 2025年中国热带农业科学院热带作物品种资源研究所第一批高层次人才招聘笔试备考题库及答案详解一套
- 高校教师资格证之《高等教育法规》试卷含答案详解ab卷
- 2024-2025学年度一级建造师通关题库及参考答案详解(基础题)
- 2025年地府判官考试题及答案
- 2024-2025学年度一级建造师真题附答案详解(考试直接用)
- 2024年政法干警试卷新版附答案详解
- 2025计算机一级模拟题库及参考答案详解(能力提升)
- 双姿培训课件
- GB/Z 41082.2-2023轮椅车第2部分:按GB/Z 18029.5测得的尺寸、质量和操作空间的典型值和推荐限制值
- 实施项目经理岗位的工作职责描述
- 医院物业服务投标方案
- 中频操作评分标准
- 国家免疫规划疫苗儿童免疫程序说明-培训课件
- 生活中的理财原理知到章节答案智慧树2023年暨南大学
- GB/T 22588-2008闪光法测量热扩散系数或导热系数
- GB/T 22237-2008表面活性剂表面张力的测定
- GB/T 13298-1991金属显微组织检验方法
- 《绿色建筑概论》整套教学课件
评论
0/150
提交评论