《电子时钟设计(单片机)需求分析(共11页).doc》由会员分享,可在线阅读,更多相关《电子时钟设计(单片机)需求分析(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上电子钟目 录一、需求分析1. 功能描述该电子钟能实现基本的时钟显示,还能调时。调时可以对分时秒的每个位(即个位和十位)调整。2. 其他要求当时钟的时间小于10-00-00时,时的十位为零,不显示。(如显示时间:9-45-00)二、总体设计1. 设计思路用89C51单片机实现控制和数据输出,8位7段LED数码管作为显示器件。时间的调整通过外加独立按键来控制。2. 器件选型89C51单片机、LED数码管、独立按键。三、硬件设计1. 硬件框图2. 硬件模块因该设计非常简单,硬件模块很少,只有显示模块和按键模块。3. 硬件电路图硬件电路如下图所示:四、软件设计1. 软件框图2
2、. 软件流程图及其程序代码2.1主程序1.初始化:将数字编码放在数组dis_711中,位选数据放在scan_con8中,分、时、秒的个位和十位放在dis_8中,分时秒的初始数据放在timedata3中。2.键盘扫描:判断key0key3中哪些键按下,当key3未按下时:1. key0按下,则key0每按下一次,秒加1。2. key1按下,则key0每按下一次,分加1。3. key2按下,则key0每按下一次,时加1。当key3按下时:1. key0按下,则key0每按下一次,秒的十位加1(即秒加10)。2. key1按下,则key0每按下一次,分的十位加1。3. key2按下,则key0每按下
3、一次,时的十位加1。3.显示:通过P2口控制位选,使8个数码管依次被选中。P0口作为数据的输出口,循环输出分、时、秒的各位数据,当P0口输出某位的数据后,P2口控制位选将给位数码管选中,从而使该位显示。同时当时的十位为零时,使p2口输出为0,使该位不显示。(即当hour=60) timedata0=0;timedata1+;if(timedata1=60) timedata1=0; timedata2+;if(timedata2=24)timedata2=0;if(key1=0)delay1ms(10);while(key1=0); timedata1+=10;if(timedata1=60)
4、 timedata1=0; timedata2+; if(timedata2=24) timedata2=0; if(key2=0) delay1ms(10);while(key2=0) ; timedata2+=10 ;if(timedata2=24)timedata2=0; 2.3显示子程序显示子程序流程图显示子程序代码display() char k;dis7=timedata0%10;dis6=timedata0/10;dis4=timedata1%10;dis3=timedata1/10;dis1=timedata2%10;dis0=timedata2/10;/通过模10计算,取出分
5、时秒的个位和十位的值 if(dis0=0) P2=0x00; /时个十位为零时,不显示 else P0=dis_7dis0; P2=scan_con0; delay1ms(1); P2=0x00; for(k=1;k8;k+) / 循环选中每个数码管,并输出其显示值,从而实现时钟显示 P0=dis_7disk; P2=scan_conk; delay1ms(1);P2=0x00; 五、测试效果经过软件仿真,测试效果良好,上述功能都能实现。效果如下图:六、问题分析1、实现过程中遇到的问题及解决方法分析。因为我本科时学习单片机都是用汇编写程序,没有用过C语言写单片机程序,所以本实验开始时,我是用汇编写的程序,这个程序虽然能实现基本的时钟显示,但存在很多问题。并且汇编使用起来很麻烦,可读性也很差。最后,我决定试着用C语言写单片机程序。经过好几天的摸索,最后总算是用C语言把程序写好了。最后,经过仿真,该设计虽能达到预期的要求,但也存在不足之处。仿真发现:调时时,当有按键按下时,数码管显示会出现闪烁的情况。经过分析得知,在电路中加入锁存器,该问题可以得到解决。2收获与体会。经过本次实验设计的学习,收获颇丰。首先,对单片机有更进一步的了解,同时锻炼了我的动手能力。其次,我学习了用C语言写单片机程序,基本学会了用C语言写单片机程序。专心-专注-专业
限制150内