五、软件设计
1.程序流程图
开始(复位) 电路初始化 开始抢答 计时器开始倒计时 数码管显示时间 是否有键按下 Y 显示选手号码 剩余时间 N 允许答题时间到 禁止抢答 扬声器发声 结束 2.主程序
#include
#define uchar unsigned char #define uint unsigned int sbit LE=P3^4; sbit dula=P3^0; sbit wela=P3^1;
10
sbit speak= P2^3; bit start=0; bit rest=0; bit flag=0; uchar person=0; uchar num=0; uchar time=0; uchar c=0; uchar
table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar
table1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void main() {init(); while(1) {if(time==0) start=~WR; rest=~RD; if(start==1) {time=40; start=0; TR0=1; LE=1; }
if(rest==1) {time=0;
TL0=(65536-50000)%6; TH0=(65536-50000)/256;
11
num=0x00; P2=0xff; }
if(time!=0) if(flag==1) {flag=0; speak=0; delay_ms(5000);
speak=1;
switch(person)
{case 0xfe:num=0x01;speak=0; delay_ms(5000);
speak=1;
break;
case 0xfd:num=0x02; break; case 0xfb:num=0x03;break; case 0xf7:num=0x04;break; case 0xef:num=0x05;break; case 0xdf:num=0x06;break; case 0xbf:num=0x07;break; case 0x7f:num=0x08;break; default:; }
}
display(0,time/10); display(1,time); display(2,num); }
}
12
六、调试
1建立工程和仿真图
(1)打开proteus软件,新建一个工程,然后在工作窗口内画好原理图并保存。 (2)打开keil软件新建一个工程,选择所用单片机的型号,然后新建一个文件保存为.c文件并添加到工程中去,开始写源程序,写好后编译生成Hex文件。 (3)将生成的Hex文件下载到单片机内,观察结果,并调试,观察数码管上是否有相应正确的变化。若结果不正确,思考问题的所在,修改源程序,继续调试,直到观察到正确的运行结果。
2.keil软件调试结果
13
3.proteus软件仿真结果
14