




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程:单片机及接口技术 题 目:数字电子钟 学 院:信息科学技术 设计任务书:课程设计题目数字电子钟设计指标:1用单片机和8位LED数码管显示时、分、秒,实现从00时00分00秒-23时59分59秒循环运行。2用按键实现时、分、秒的调整。3整点提醒:0、1、223和短蜂鸣。4省电功能:关闭显示。5闹钟功能:设置闹钟,到设定时间响五次蜂鸣。6秒表功能:显示XX分XX秒XX 按“启动” 键:从00分00秒00开始计时 按“停止” 键:显示实际计时XX分XX秒XX 按“复位” 键:显示00分00秒00;7.日历功能:能更改日期(包括年、月、日、时、分、秒),日历带闰年计算功能,在闰年时,二月天数为28,否则为29。其他大月份为31,小月份为30。功能及按键说明:K1:主要功能,在时钟模式下,作为闹钟与闹铃开关;在日历模式下,由不同的按键次而分别作为年、月、日、时、分、秒六位的选能开关。K2:主要功能,在时钟模式下,作为调时功能;在日历模式下作为,由K1的次数不同而分别作为年、月、日、时、分、秒的加键;在闹钟模式下作为设定闹钟的时功能。K3:主要功能,在时钟模式下,作为调分功能;在日历模式下作为,由K1的次数不同而分别作为年、月、日、时、分、秒的减键;在闹钟模式下作为设定闹钟的分功能。K4:主要功能是秒表功能;按第一次开启秒表计时;按第两次暂停秒表计时并显示计时时间;按第三次清零各位;按第四次返回时钟模式。K5:主要功能,如果在时钟模式下已经开启闹钟模式,此键有效;若闹钟模式已经开启,按第一次进入闹钟设定界面,按第两次返回时钟模式。K6:主要功能,按第一次进入省电模式;按第二次进入日历模式,此刻结合K1、K2、K3各键可以实现日历的调整,设置年、月、日、时、分、秒。 目录 一、课程设计的目的及选题意义1、目的:2、 选题意义:二、整体设计1、仿真阶段:2、实物阶段:三、部分模块设计1、蜂鸣器输出2、显示模块3、按键按制模块四、软件设计1、时钟模块2、整点提醒功能模块3、 省电模式模块4、 闹钟模式模块5、 秒表模式模块6、 日历模式模块7、中断服务模块8、主程序模块五.实验总结及感想1、显示问题:2、整点报时问题。3、闹钟开关问题。4、按键问题。5、中断冲突问题。6、显示数字分隔问题。7、关闭闹铃问题参考文献:附件完整程序清单: 数字电子钟设计报告一、课程设计的目的及选题意义1、目的:学以致用是中华民族千百年来的劝勉,而大学里相关课程设置对应的课程设计是对学生把知识提升为技能不可或缺的一步。就我个人观点,能设计出新奇的作品固然好,但若能把所学知识融会贯通也是不错的。毕竟对一门刚熟悉的课程,需要一些中介来熟悉它。本次课程设计,我们主要目的是为了熟悉51单片机并能灵活运用单片机设计有一定质量的作品。踏实的把基础知识应用熟练,因为只有基础知识(例如:中断、定时器、并行接口、按键排布、七段数码管动态显示、C语言编程等等)稳固,其他外设模块(例如:温度传感器、超声波测距、红外、液晶显示器等等)就只是熟悉的问题了。2、选题意义:在本次课程设计选题中,我们最终选择了数字电子钟,是因为对数字电子钟的工作模式较为清楚,这样方便自顶向下设计相关电路及程序,让我们对设计的方向看的比较清楚,这样对活用单片机相关知识有很大的作用。并且,我们并没有用单片机上固有的时钟模块DS1302,并不是应用这个模块会给设计带来多少难度;相反,正是因为我们设计决定不用任何集成模块,这使设计的实践性加大,也使程序与电路的可变性增多。这都是对设计者的莫大考验,但考验与收获是成正比的。在单片机开发板自带的例程里,有很多模板,但我们并不是把几个貌似很华丽的把几个模板拼接在一起就完事了,而是选择最基础的器件,选择最古老的方法(自顶向下设计)进行我们的课程设计。李老师说过,本科生的课程设计抄是无可厚非的,只要能把这抄的部分完全消化好就行。当然,在本组的课程设计过程中,我们不否认有借鉴先辈们的优秀思想,但只是借鉴,在最后软件与硬件的设计都是一点一滴仿真出来的。以及后期从仿真到单片机开发板上的移植过程,都遇到了很多问题,但都经过我们的努力,一个一个把问题解决干净。二、整体设计电路的总体设计框架如图1-1所示: 图1-1单片机总电路示意图此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路用8个共阴数码管分别显示,星期(年份),小时、分钟(月份)和秒(日),通过动态扫描进行显示,从而避免了译码器的使用,同时节约了I/0端口,使电路更加简单。本次设计没有使用任何时钟集成模块,也增大了实践性与可变性。在最初的设计,我们应用protues仿真软件来设计电路,所以后来移植到单片机开发板上有几个方面出现矛盾:(1)仿真中,我们应用外部中断1与外部中断0进行拓展来控制按键。而实际单片机开发板上并没有或非门相关集成电路,所以只能改用其他方式来实行对按键控制。(2)仿真中我们用的是八位七段共阳数码管,而单片机开发板上自带的数码管是共阴的,这必需对程序作相关更改。(3)在仿真中,为了使按键有顺序性,我取了P1.16作为按键控制使能输入口,P1.0为蜂鸣器输出口。但在单片机开发板中,蜂鸣器与P1.5有短路帽可以直接相连,于是为了增加电路的美观,就把P1.5作为蜂鸣器输出口,而按键输入口除去P1.5外的P1.06。对应按键如表1-1:表1-1:P1.012346按键组K1K2K3K4K5K61、仿真阶段:仿真电路设计中,我们拓展两个外部中断为六个功能按键,仿真电路图如图1-1所示。图1-1仿真电路总图2、实物阶段:我们在移植到单片机开发板上时,对程序与电路图作了相应的更改,运用T1定时器定时扫描按键的形式对按键进行控制。实物图如图1-3所示。(其中:J12与JP10下联,J16与JP11相联,JP8与JP5下联)图1-2实物图三、部分模块设计1、蜂鸣器输出由P1.0控制蜂鸣器,当输出为高电平时,蜂鸣器工作。具体电路图如图1-4所示:图1-4仿真蜂鸣器电路模块2、显示模块本次设计,我们采用8位七段共阳数码管,7SEG-MPX8-CA是共阳极数码管显示器,它左下侧的A B C D E F G DP是LED数码管显示器的I/O口,是段选信号,右下侧的12345678是它的位选信号,就是从左到右分别是第一位到第八位,段选信号与位选信号分别接到单片机的不同输出口,例如段选信号可以接到P0口,位选信号可以接到P2口,P0口还要加一个上拉电阻。仿真电路图如图1-3所示:图1-3仿真显示模块3、按键按制模块本次采用状态机与计数结合的模式来实现按键对电路的控制。例如:K1、K4、K5、K6都采用了软件对按键次数的计数来实现多种功能。所有开关都有状态机模式。具体电路图如图1-5所示下:图1-5仿真按键模块电路四、软件设计1、时钟模块按键说明如表1-2所示。表1-2:K1按下K2按下K3按下K4按下K5按下K6按下进入省电界面小时加1分钟加1进入秒表界面进入闹钟界面关闹钟 图1-6时钟界面部分程序如下:void display(void) /显示子程序P2=0x7f;P0=tabdis_buff0; /显示秒个位delay(2);P2=0xbf;P0=tabdis_buff1; /显示秒十位delay(2);P2=0xdf;P0=tabdis_buff2; /显示-delay(2);P2=0xef;P0=tabdis_buff3; /显示分个位delay(2);P2=0xf7;P0=tabdis_buff4; /显示分十位delay(2);P2=0xfb;P0=tabdis_buff5; /显示-delay(2);P2=0xfd;P0=tabdis_buff6; /显示时个位delay(2);if(hour9)P2=0xfe;elseP2=0xff;P0=tabdis_buff7; /如果小时大于9,则显示时十位delay(2);void disp_data(void) /数据处理子程序dis_buff7=hour/10;dis_buff6=hour%10;dis_buff5=10;dis_buff4=min/10;dis_buff3=min%10;dis_buff2=10;dis_buff1=sec/10;dis_buff0=sec%10; 2、整点提醒功能模块部分程序如下:void delay_500(void)/整点提醒子程序 if(!(min|sec)switch(hour)/开关函数实现整点报时功能, 从一点到二十三点,分别响对应的次数case 23:lb=1;delay(200);lb=0;delay(200);case 22:lb=1;delay(200);lb=0;delay(200);case 21:lb=1;delay(200);lb=0;delay(200); Case 20:lb=1;delay(200);lb=0;delay(200); case 19:lb=1;delay(200);lb=0;delay(200); case 18:lb=1;delay(200);lb=0;delay(200); case 17:lb=1;delay(200);lb=0; delay(200); case 16:lb=1;delay(200);lb=0;delay(200); case 15:lb=1;delay(200);lb=0;delay(200); case 14:lb=1;delay(200);lb=0;delay(200); case 13:lb=1;delay(200);lb=0;delay(200); case 12:lb=1;delay(200);lb=0;delay(200);case 20:case 11:lb=1;delay(200);lb=0;delay(200); case 10:lb=1;delay(200);lb=0; case 9:lb=1;delay(200);delay(200); case 8:lb=1;delay(200);lb=0;delay(200); case 7:lb=1;delay(200);lb=0;delay(200); case 6:lb=1;delay(200);lb=0;delay(200); case 5:lb=1;delay(200);lb=0;delay(200); case 4:lb=1;delay(200);lb=0;delay(200); case 3:lb=1;delay(200);lb=0;delay(200);case 2:lb=1;delay(200);lb=0;delay(200);case 1:lb=1;delay(200);lb=0;delay(200);default:break;/整点提醒子程序结束 3、省电模式模块在省电界面按键说明如表1-3所示。表1-3:K1按下K2按下K3按下K4按下K5按下K6按下进入日历界面无效无效无效无效无效图1-7省电模式界面流程图:部分程序如下:void disp_data4(void) /熄灭显示管dis_buff7=11;dis_buff6=11;dis_buff5=11;dis_buff4=11;dis_buff3=11;dis_buff2=11;dis_buff1=11;dis_buff0=11; void sheng_d(void) / 当省电键第一次按下后,进入省电模式while(m=1)disp_data4();display();4、闹钟模式模块在闹钟界面按键说明如表1-4所示。表1-4:K1按下K2按下K3按下K4按下K5按下K6按下无效小时加1分钟加1无效进入闹铃选择界面无效图1-8闹钟设置界面在闹铃选择界面按键说明如表1-5所示。表1-5:K1按下K2按下K3按下K4按下K5按下K6按下无效无效无效无效返回时钟界面选择铃声图1-9闹铃选择界面 流程图:部分程序如下:void nao_zh(void) /闹钟子程序 while(n=1) display_2(); disp_data2(); while(n=2) /当闹钟键第二次按下时显示歌曲选择界面 dis_buff4=gequ/10;dis_buff3=gequ%10;P2=0xef;P0=tabdis_buff3;delay(2);P2=0xf7;P0=tabdis_buff4;delay(2); if(hour=hour2)&(min=min2)&(sec=0) /当时间到闹钟定时时,响相应的歌曲铃声 if(kaig=0) Play_Song(gequ); 5、秒表模式模块在开始秒表界面按键说明如表1-6所示。表1-6:K1按下K2按下K3按下K4按下K5按下K6按下无效无效无效暂停秒表并显示界面无效无效图1-10秒表计时界面在暂停秒表并显示界面按键说明如表1-7所示。表1-7:K1按下K2按下K3按下K4按下K5按下K6按下无效无效无效清零秒表并显示界面无效无效图1-11秒表计数显示界面在清零秒表并显示界面按键说明如表1-8所示。表1-8:K1按下K2按下K3按下K4按下K5按下K6按下无效无效无效返回时钟界面无效无效图1-12秒表清零界面 流程图:部分程序如下:void miao_biao(void) /秒表子程序while(i=1) /当i=1时,秒表按键按下,显示秒表界面disp_data1();display_1();min3=min1; /保存秒表数据sec3=sec1;msec1=msec;while(i=2) /当秒表键第二次按下即i=2时,暂停计时并显示秒表数据disp_data3();display_1();while(i=3) /当秒表键第三次按下时即i=3时,清零秒表数据并显示00-00-00min1=0;sec1=0;msec=0;min3=min1;sec3=sec1;msec1=msec;disp_data3();display_1();6、日历模式模块在日历界面按键说明如表1-9所示。表1-9:K1按下K2按下K3按下K4按下K5按下K6按下返回时钟界面无效无效无效无效进入年月日时分秒位选择界面图1-13日历显界面在年月日时分秒位选择界面按键说明如表1-10所示。表1-10:K1按下K2按下K3按下K4按下K5按下K6按下返回时钟界面对相应位加1对相应位减1无效无效继续年月日时分秒位选择图1-14日历设置界面部分程序如下:void chu_li(void) /日历月份天数处理子程序 if(month=2) /处理二月份的天数 if(year%4=0|year%4=4) /如果是闰年,则该年二月份天数为28; 否则为29天 t=28; else t=29; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)/一年中的大月份天数为31; t=31; if(month=4|month=6|month=9|month=11) /一年中的小月份天数为30 t=30; void ri_li(void) /日历子程序while(jishu=0&m=2) /省电模式键第二次按下进入日历界面 chu_li(); display4(); disp_data5();year1=year;while(jishu=1&m=2) /在日历界面,设置键第一次按下显示年份,min3=year1-2000;dis_buff7=min3/10;dis_buff6=min3%10;P2=0xfd;P0=tabdis_buff6;delay(2);if(year19)P2=0xfe;elseP2=0xff;P0=tabdis_buff7;delay(2);year=year1;month1=month;while(jishu=2&m=2) /在日历界面,设置键第二次按下显示月份,dis_buff4=month1/10;dis_buff3=month1%10;P2=0xef;P0=tabdis_buff3;delay(2);P2=0xf7;P0=tabdis_buff4;delay(2);month=month1;day1=day;while(jishu=3&m=2) /在日历界面,设置键第三次按下显示日份,dis_buff1=day1/10;dis_buff0=day1%10;P2=0x7f;P0=tabdis_buff0;delay(2);P2=0xbf;P0=tabdis_buff1;delay(2);day=day1;min3=hour;while(jishu=4&m=2) /在日历界面,设置键第四次按下显示小时,dis_buff7=min3/10;dis_buff6=min3%10;P2=0xfd;P0=tabdis_buff6;delay(2);if(hour9)P2=0xfe;elseP2=0xff;P0=tabdis_buff7;delay(2);hour=min3;sec3=min;while(jishu=5&m=2) /在日历界面,设置键第五次按下显示分钟,dis_buff4=sec3/10;dis_buff3=sec3%10;P2=0xef;P0=tabdis_buff3;delay(2);P2=0xf7;P0=tabdis_buff4;delay(2);min=sec3;msec1=sec;while(jishu=6&m=2) /在日历界面,设置键第六次按下显示秒,dis_buff1=msec1/10;dis_buff0=msec1%10;P2=0x7f;P0=tabdis_buff0;delay(2);P2=0xbf;P0=tabdis_buff1;delay(2);sec=msec1; 7、中断服务模块部分程序如下:void ZHONGDUA(void) interrupt 3 using 1 TR1=0; /关闭定时器T1 P1=0xff;if(mb=0) /如果按键mb按下 delay(200); /延时60ms,软件消抖if(mb=0) /如果按键s1按下 i+;if(i=4) /当i=4时使i=0回到最初状态,进行循环 i=0; if(nz=0) /如果闹钟键按下 delay(200); /延时防抖 if(nz=0&kaig=0) /加kaig=0是为了防止在进入闹钟界面时设定关闹钟,而无法返回时钟界面 n+; /n自加1if(n=3) /按键等于三次返回时钟界面 并清n为0n=0; if(sd=0) /如果省电键按下delay(200); /延时防抖if(sd=0) /如果省电键按下m+; /m自加1if(m=3)/当m=3时返回时钟主界面 并清m为0m=0; if(sz=0)/设置键按下delay(200); /延时防抖if(sz=0) /设置键按下 if(m=2) /在日历界面下jushu自加1 jishu+; if(jishu=7) /当jushu=7时,清零 jishu=0; if(n=0&m=0) /防止在非时钟界面给闹钟开关赋值 kaig+; if(kaig=2) /当kaig=2时,清零 kaig=0; if(n=2)/在歌曲选择界面gequ+ gequ+; if(gequ=4)/当gequ=4时,置为1 gequ=1; if(zh1=0) /调时键按下 delay(200); /延时消抖 if(zh1=0) /调时键按下 if(jishu=1) /若在调年位年加1 year1+; if(jishu=2)/若在调月位月加1 month1+; if(jishu=3) /若在调日位日加1 day1+; if(jishu=4) /若在调时位时加1 min3+; if(jishu=5)/若在调分位分加1 sec3+; if(jishu=6) /若在调秒位秒加1 msec1+; if(n=1) /若在闹钟界面 设置小时加一 inc_hour2(); else hour+; /在时钟界面小时加一 if(hour=23) /当小时大于是 23时,清零 hour=0; if(zh2=0)/调分键按下 delay(200); /延时防抖 if(zh2=0) /调分键按下 if(jishu=1) /若在调年位年减1 year1-; if(jishu=2) /若在调月位月减1 month1-; if(jishu=3) /若在调日位日减1 day1-; if(jishu=4) /若在调时位时减1 min3-; if(jishu=5) /若在调分位分减1 sec3-; if(jishu=6) /若在调秒位秒减1 msec1-; if(n=1) /若在闹钟界面,分加一 inc_min2(); else min+; /若在 时钟界面,分加一 if(min=60) min=0; TR1=1; /启动定时器T0void timer0()interrupt 1 /定时器T0TH0=0xDC;TL0=0x00; /10msCount+;sec100+;sec10+;if(sec10=10) /当达到100ms时,msec自加1sec10=0;inc_msec();if(sec100=100) /当达到1S时,sec自加1sec100=0;inc_sec(); 8、主程序模块 流程图:程序如下:void main(void) /主程序int_init(); /初始化P0=0xff;P1=0xff;P2=0xff;hour=9; /初始化时钟为9-58-00;min=58;sec=0;sec100=0;sec10=0;i=0;n=0;m=0;kaig=0; /闹钟默认为开状态hour2=0;min2=0;sec2=0;day=22; /日历初始化为2013-05-22month=5;year=2013;while(1)min1=0;sec1=0;msec=0;jishu=0;if(kaig=0) /如果闹钟开关为开状态,则调用闹钟子程序nao_zh();miao_biao(); /调用秒表子程序ri_li();/调用日历子程序sheng_d(); /调用省电子程序disp_data(); /调用数据处理子程序display(); /调用时钟界面显示子程序delay_500(); /调用整点报时子程序五.实验总结及感想一分耕耘,一分收获。只有亲自用实践来验证这句话,在能得其要领。经过这次单片机课程设计,我从一个单片机实践的门外汉,已经越升为略知一二的新手。虽然还有很多有关单片机的应用有待学习,但万变不离其宗,只要深入了解单片的原理,全部知识点,各个细节,一切设计皆有可能。在实验的开始几天,基本上没有收获,不知何从下手,不知所措。最后发现,自己少的就是一个模板,而我要做的数子电子钟这个课题的模板不就是小学时候都会戴的电子表么!于是,我把电子表的功能用笔认真记下。一个完整的电子表有正常的时钟显示功能,秒表功能,闹钟功能,查看日期功能,设置日期功能。有了方向于是我就从图书馆以及网上查找各种与电子时钟相关的资料,我阅读了不少。随着涉猎的点滴积累,以及对每个模块划分的出现,我对电子时钟的设计方案已经慢慢酝酿而成。有了方向和不少知识储备后,在接下来的几天,几乎每天都有突破,我先把主要时钟模块完成后,运行并仿真没有问题后再一个一个功能往上加。虽然有时只是一句程序的修改或诞生,但那种收获的感觉很暖人心。实践中遇到了不少问题,接下来总结一下,共同探讨。1、显示问题:显示问题分布在设计的整个过程中,前三次是在时钟模块,最后一次是在从仿真到单片机开发板上的移植过程。相信每一组的同学都多多少少有一个设计的模板,或简单,或完善。所以,我们这组也选择了一个相对比较简单的模板,这个模板最开始只有一个时钟显示功能,我按照原程序与原电路图写好程序,画好电路仿真图,在Keil里面与protues联调,发现八位七段共阳数码管中的第2、5位不显示“-”,还有所有的D段都不亮。在最开始,我认为是程序问题,然后返回一步一步重读程序,实在找不出明显的错误,然后我又担心是位码与段码写错了,查证资料与程序中的位码与段码相比较还是没有发现有错误。因为仿真图中,我是用标号代替连线的,因为知道是D位不亮,所以我就看D位的管脚,发现它始终是暗的,我怕是线没连好,放大电路图,还是没有发现有什么错误,于是抱着试一试的心理,就D这一位用连线代替标号,点击发现D位按照理论情况亮灭。然后就剩下2、5不能正常显示“-”的问题了,应为检查核对过,不太可能是位码错误的原因,返回再次检查显示子程序,一步一步重新检查,终于发现,2、5这两位与其他位相比程序少了一个延时delay(2)。完善程序后,运行,发现整个时钟界面能正常的显示从9-58-00开始的时钟了。最后一次关于显示的问题是出现在从仿真到单片机开发板上的移植过程,单片机开发板上自带的八位七段数码管是共阴的,而我仿真所用的是共阳的,移植中显示子程序肯定要改很多(其中包括位选码与段选码的更改)。但当我把所有要改的地方都改好后,在单片机上运行程序,发现没有显示,我当时觉得问题肯定在板子上,详细阅读了数码管的使用说明,才发现J14短路帽没有取下,而如果没有取下则位显示码则是从P1口输出(相对单片机而言)。把短路帽取下后,发现能正常工作了。2、整点报时问题。本次设计在第一个突破点就在时钟模块上加了整点报时功能,报时所响铃的次数等于当时的小时数。这个主要是程序设计的问题,如果单用调用响铃程序的话,这样整点报时模块程序就显得过于臃肿,于是重新阅读C语言课本,在其中注意到开关函数switch函数的妙用,这是上课老师重点提出的,所以做了详细的笔记,大家都知道switch函数的功能即选择,他会跳到指定的位置执行相应的程序,然后退出该函数,但这是在执行相关程序语句后加了break;为前提的,若没加break,则会从该语句一直执行到函数未尾。以这个为前提,整点报时函数很简洁了,从23-0,依次作为函数的选择条件,例如当十点整到来时,路到10,然后依次往下运行响铃程序(每个条件后带有一次响铃),即响十次。3、闹钟开关问题。在闹钟模块,基本想法是:我设置了一组变量,这组变量可以由按键加或减运算,当时钟与所设定变量值相等时,则开启闹钟。所有的细枝未节都略去,把其中在设置闹钟开关时所遇到的问题作详致整理。时钟模块加上整点报时模块,秒表模块以及闹钟模块时,按键的数量也增加了不少(按键问题放在下面再谈),所以在处理闹钟模块时,繁琐程度也加大了,所需注意的点无处不在。我把闹钟开关用if语句实现,当kaig变量为0时,表示闹钟开启,则跳进if中扫描闹钟子程序,判断定时是否到来。设置好相关变量,运行程序,最初并未发现有何不妥,但由于按错,我在闹钟界面按了设置键K7,惊讶的发现,竟然跳不出闹钟界面,无法返回到时钟界面。由于清楚控制闹钟开关的即kaig变量,于是if(n=0)中加入&m=0。这样就能防止在时钟界面之外对闹钟进行设定开与关,这是非常人性化的。具体程序段如下:if(n=0&m=0) /防止在非时钟界面给闹钟开关赋值 kaig+; if(kaig=2) /当kaig=2时,清零 kaig=0; 4、按键问题。本次设计,我采用了状态机与计数结合的方法控制按键,由于开始的时候功能很少,所以所需按键不是很多,在处理按键方面基本没什么大的问题。但随着设计的进行,功能的增加,发现要处理好端口与按键以及功能实现之间的问题越来越困难,在网上查找相关一键多控的信息,相关高人给出了两种处理办法,一个是状态机,另一个是计数。状态机即不同按键的状态组成一串信息来实现某种功能,而计数是通过一个按键的按键次数来实现不同的功能,进行到设计最后,我结合了这两种处理办法。使用最少的按键实现尽量多的功能。特别是在单片机开发板上,我用的是T1定时扫描按键来控制,里而把状态机与计数赋值结合的方法用的淋漓尽致。5、中断冲突问题。为了实现秒表,我在T0中断嵌套了秒表相关进位程序,由于秒表要求精度0.01秒,故我的T0中断定时为就刚好0.01秒,中断100次,刚好1秒。秒表确实实现了,但是我的闹铃音质变差了。一开始以为是闹铃程序存太多冗余环节,影响了T1的音乐输出中断,但是检查程序后,发现没什么多余的,裁剪无从下手。6、显示数字分隔问题。本实验中用8个共阴极数码管显示日历及其时间,但是8个数码管连在一起,显示过程中不能有效地区分时,分,秒和年,月,日,数码管是两两组合起来,形成某位的十位和个位,故用第五位与第二位显示“”并一直保持高亮状态,形成分隔符,实现方便的读取数据。7、关闭闹铃问题在设计最后,整体调试阶段。在调试闹钟时,我发现,到达所设时间后,闹钟会按预期响已经选择过的闹铃,但是当我想把闹铃立马关闭时,却发现只能等到这首歌放完后才能停止。这问题明显是软件问题,并且与kaig这个变量有关,于是我想把这个变量直接放进音乐子程序中,控制音乐的停止。更改程序块如下:else if ( Temp1 = 0x00|kaig=1 ) /歌曲结束符或者关闹钟时停止播放音乐 return; 更改程序后,发现闹钟响铃时,一关闹钟,响铃立马停止。参考文献:1楼然苗等.单片机课程设计指导.北京航空航天大学出版社.2012年.第二版2徐爱钧.单片机原理实用教程.电子工业出版社.2012年.第二版附件完整程序清单:#include #define uchar unsigned char#define uint unsigned intunsigned char Count;sbit sd=P10;sbit zh1=P11;sbit zh2=P12;sbit mb=P13;sbit nz=P14;sbit lb=P15; /蜂鸣器器控制脚sbit sz=P16;uchar dis_buff8;uchar sec100,sec,min,hour,hour1,min1,sec1,sec10,msec,i,sec2,min2,hour2,min3,sec3,msec1,n,k,m,t,kaig,jishu,gequ,day,month,year,year1,month1,day1; unsigned char code SONG = /祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,/路边的野花不要采0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢结构防火设计方案
- 2025年汉字听写大会竞赛试题库(附答案)
- 2025年医院卫生院传染病管理工作奖惩制度
- 市金融办2025年上半年工作总结和下半年工作打算
- 医院医养中心建设项目社会稳定风险评估报告
- 2025年预防呼吸机感染试题及答案
- 清淤知识培训课件
- 危险废物处置中心建设项目节能评估报告
- 清洗首饰知识培训内容课件
- 工程项目外包管理方案
- 【MOOC答案】《VLSI设计基础(数字集成电路设计基础)》(东南大学)章节作业慕课答案
- 中国儿童食管狭窄诊治专家共识解读 2
- 注塑质量管理办法
- 数字治理培训课件
- 军品配套项目管理办法
- 教培机构安全管理制度
- TCSF00782023森林草原消防无人机巡护作业技术规程
- DB62∕T 4964-2024 地质灾害精细调查技术规范
- 2025年七一党课-作风建设永远在路上学习教育党课
- 2025年《互联网销售》课程标准
- 4《公民的基本权利和义务》第一课时 公开课一等奖创新教案
评论
0/150
提交评论