简易数字钟实验报告 - 图文

发布时间 : 星期日 文章简易数字钟实验报告 - 图文更新完毕开始阅读

for (i=0; i<120; i++); ms--; } }

void display()//扫描显示 { unsigned char i;

disdata[0]=h/10;//数据处理,小时高位 disdata[1]=h;//小时低位 disdata[2]=m/10;//分钟高位 disdata[3]=m;//分钟低位 disdata[4]=s/10;//秒钟高位 disdata[5]=s;//秒钟低位

for(i=0;i<6;i++)//循环显示 {

P1=0xff;

P1=seg7[disdata[i]]; P2=disp[i]; Delayms(2);//显示延时 } }

void time0(void)interrupt 1 using 0 //时间计数函数 {

TH0=0xfc;//(65536-20000)/256; TL0=0x18;//(65536-20000)%6; if(++tmcnt==1000)//计数1000次1秒 { tmcnt=0; s++; if(s==60) { s=0; m++; if(m==60) { m=0; h++;

if(change==0&&h==12)//按下进制转换键为12进制 {h=0;}

if(change==1&&h==24)//未按下进制转换键为24进制 {h=0;} }

} } }

void voice()//发声函数 {

if((m==59)&&(s==51))//判断时间符合低音条件 {

BUZ =~BUZ; Delayms(80); }

if((m==59)&&(s==53))//判断时间符合低音条件 {

BUZ =~BUZ; Delayms(80); }

if((m==59)&&(s==55))//判断时间符合低音条件 {

BUZ =~BUZ; Delayms(80); }

if((m==59)&&(s==57))//判断时间符合低音条件 {

BUZ =~BUZ; Delayms(80); }

if((m==59)&&(s==59))//判断时间符合高音条件 {

BUZ =~BUZ; Delayms(55); } }

void keyscan()//键盘扫描 {

if(change==0)//判断是否按下进制转换键, { Delayms(10);

if(change==0&&h>=12)//若h>12,则执行h-12,转换成12进制 { h=h-12;} }

if(HOURADD==0)//判断是否按下小时加1键 { Delayms(10);

if(HOURADD==0) { while(HOURADD==0); h++; if(h==24) {h=0;} } }

if(MITADD==0)//判断是否按下分钟加1键 { Delayms(10); if(MITADD==0) { while(MITADD==0); m++; if(m==60) {m=0;} } } }

main()

{ unsigned int time();

TMOD=0x01;//软件启动计数器、工作方式为方式1 EA=1; ET0=1;//允许定时计数器中断 TR0=1;//启动计数 while(1)

{ keyscan();//扫描键盘 display();//显示 voice();//发声 } }

五、调试过程

5.1 仿真调试

由于方案的修改,参考的电路使用的是6位数码管显示器,而且是共阴极的,仿真时改用一个4位,一个2位的共阳极的数码管显示器。喇叭改用成蜂鸣器,仿真时与软件中发声程序延时发出高音和低音配合不当,造成使用蜂鸣器没有声音。在进一步的调试过程中,改变供给蜂鸣器的电压为+9V,它另一端的限流电阻减小改成了220Ω。 5.2 实物调试

1.实物做成后,连接电源,发现数码管显示器全部显示8,而且显示器的电压不够,因

此显示不够亮,不明显。因此,检查实物连线,发现驱动芯片74LS245的接地端没有连接,修改连线后,数码管显示器明显变亮,但是6位仍然全部显示8。

2.实物中蜂鸣器接+5V的电源即能够工作,但是蜂鸣器一直在鸣叫。

3.仔细查阅资料后发现原电路所连接的P0口是需要接入上拉电阻的,为了简便起见,修改程序使单片机控制的数码管显示器的段选口从P0改到P1口,重新连线后发现实物效果没变,仍然全部显示8,蜂鸣器一直鸣叫。

4.使用示波器,发现震荡电路输出的波形没有起到震荡作用,检查线路后发现震荡电路和复位电路没有如原理图中所画的接地,调整后重新上电测试,维持原来的结果。

5.使用示波器检测震荡电路连入单片机的18、19脚没有反应,检查线路后发现震荡电路漏接入单片机的18、19脚,修改后电路结果维持不变。

6.重新再单片机中考入简单程序P1=0xff进行单片机测试。上电后发现P1口输出的结果与程序结果不符合,因此怀疑是单片机的问题。

7.重新选用一块单片机芯片,考入原始程序后接入电路板中,上电发现电路结果与设计结果一致,能够实现全部设定的功能。因此判断是单片机的问题。

8.此外,显示的结果发现在蜂鸣器鸣叫时,即整点报时时数码管显示闪动,除了数码管显示的最后一位即秒钟的个位正常现实外其余的显示几乎不可见,怀疑是主程序调用发声程序时,发声程序中的延时过长导致。但是在仿真中反复测试的结果是只有一个狭窄的范围(低音80ms左右,高音只能55ms)才能使蜂鸣器正常工作。

9.改变单片机中考入的程序,减小发声程序中的延时使低音60ms,高音10ms,重新接入电路板中上电测试,发现数码管显示器在发声过程中仍然闪烁,但是闪烁的幅度有所减小,因此判定是由于发声程序中的延时调用影响了数码管的显示。

10.按下按键开关使小时或分钟加一时,发现数码管显示器没有显示,但计时器仍然正常运作着。重新检查程序发现与按键相关的程序中使用的是按键按下弹起后重新进入主程序调用显示。

六、测试

整个电路板实现全部功能后确定数字钟的精度。 使用外部正确的秒表进行同步计时,两次测量取平均值后发现当外部校准计时器每计时15分钟,本次课程设计的简易数字钟慢8s.因此本次设计的数字钟的精度约为-8s/15min=-0.534s/min.

使用示波器检测到晶振电路的输出频率为11.99998MHz,即约12MHz.

七、总结

本此计算机控制技术综合课程设计是锻炼各个同学对于计算机控制特别是微电子方面的控制的能力。

我们组分到的是简易数字钟,在查资料的过程中发现不论是书本上还是网页上,基于单片机控制的数字时钟还是非常多的,说明使用单片机构成简易控制的数字钟的技术是非常成熟而且简便的。因此决定采用单片机构成主要的MCU模块。MCU模块确定后发现很多的参考文献上书写的控制程序使用的都是汇编语言,参看程序时有一定的障碍。但是数字钟是一个硬件电路简单的设计题目,它的主要难点就是为功能的实现所编写的软件控制程序。在反复查阅比较阅读后搞清了许多参考程序的主要结构。具体编写过程中再采用了一个C语言编写的基本时钟控制程序,之后以它为主,自己修改具体的部分功能程序,实现如整点报时、24\\12进制转换,小时、分钟加一等课程设计所要求的具体功能。

最终在仿真过程中比较不同硬件连接方案后,根据实验室提供的元器件清单调整个别元

联系合同范文客服:xxxxx#qq.com(#替换为@)