西安航空职业技术学院 毕业设计论文
{ }
TR0=0; p=5;
second=dt_time; beep=0;
for(i=0;i<20;i++) { } beep=1; qd=0;break;
display();
case 6:
{ }
TR0=0; p=6;
second=dt_time; beep=0;
for(i=0;i<20;i++) { } beep=1; qd=0;break;
display();
}
}
if(dt==1) {
//答题标志开启时
if(start==0) {
display(); if(start==0)
18
西安航空职业技术学院 毕业设计论文
}
}
}
}
{ }
beep=0;
for(i=0;i<20;i++) { } beep=1; TR0=1;
display();
}
if(second==0) { }
beep=0; qd=0; dt=0;
//为0时报警
4.2 数码管显示程序
4.2.1 程序流程图
在写程序之前需要先测出数码管显示数字时它各个引脚的电平情况,从而得出各个数字的代码,控制单片机输出不同的代码,就能显示不同的数字。本次的程序采取动态扫描的编程方式,一般显示的频率在50hz左右,眼睛不会感到有闪烁感,因此应该适当地选择显示延时的时间。
开始 查表取得代码 位码送驱动显示 19 西安航空职业技术学院 毕业设计论文
段码送数码管显示 延时 图4-2 数码管显示程序流程图
4.2.2 程序注释
数码管显示程序如下:
void display(uchar shiwei,uchar gewei,uchar xuanshou) {P2=0xfd;
/*位选*/
P0=shiwei; /*段选*/ delay_us(80); /*延时显示*/ P2=0xfe; P0=gewei; delay_us(80); P2=0xf7; P0=xuanshou; delay_us(80); }
4.3 蜂鸣器发声程序
4.3.1程序流程图
发声部分主要是通过改变蜂鸣器的通断频率去改变声调,具体是改变高低电平的延迟时间,频率越高则声调越高,频率越低则声调越低。
开始 输出音频脉冲低电平 延时 20 西安航空职业技术学院 毕业设计论文
输出音频脉冲高电平 延时 图4-3 蜂鸣器发声程序流程
4.3.2程序注释
蜂鸣器发声程序如下:
void sound_ok() /* { uchar a,b; TR1=0;
for(a=4;a>0;a--) {for(b=900;b;b--)
{ beep=1; /* delay_us((a+5)*10); /* beep=0; /* delay_us((a+5)*10); /* } } }
void sound_err(void) /* {uchar a,b; TR1=0;
for(a=1;a<5;a++) {for(b=900;b;b--)
{ beep=1; /* delay_us((a+5)*10); /* beep=0; /* delay_us((a+5)*10); /* } } }
回答正确子程序*/ 开蜂鸣器*/
改变高电平持续时间*/ 关蜂鸣器*/
改变低电平持续时间*/ 回答错误子程序*/ 开蜂鸣器*/
改变高电平持续时间*/ 关蜂鸣器*/
改变低电平持续时间*/ 21
西安航空职业技术学院 毕业设计论文
5 设计调试及性能测定
数码管的调试,因为在硬件各模块中出错机会比较大的就是数码管的显示混乱。按照设计前测出的位码和段码编写一小程序,四位同时依次显示0至9,测试段码的编码是否正确,看是否有显示错误的段位。因此,本设计采用动态扫描的显示方式,然后是位码的测试,将程序改为让数码管的1至4位依次显示数字1~4,经测试后,显示正常。数码管经测试功能正常。
根据功能要求编写程序,在单独测试中各个模块的程序功能正常,但将各个部分结合在一起的时候遇到了一个问题,就是显示程序与发声程序之间有一定的冲突,例如要求在倒计时开始和结束的时候要求有一声0.5秒左右的鸣叫声,但是发现在发声的这段时间里数码管没有了显示,因为单片机在同一个时间里只能执行一条程序。经过一番努力终于想到的解决的方法,因为原来的数码管显示间隔与计时倒数是公用同一个定时器的,因此间隔过大,解决方案为:数码管显示程序用另外一个定时器来调用,并使用较小的显示间隔,这样当要发声时数码管上仍然有显示,因为这时程序在发声和显示模块之间快速的来回跳动,而且数码管没有闪烁感。
设计各个部分功能调试完毕,显示正常,发声正常,抢答正常,并且性能良好。
22
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于单片机的6路抢答器设计(5)在线全文阅读。
相关推荐: