一、设计环境和设备
Keil开发uVision4开发环境,window10系统。
二、设计内容
1.能够记录整个赛程的比赛时间并可同时用数码管显示。
2.当前的比赛结果可以通过键盘修改。
3.篮球比赛成绩可以通过数字管显示。(由于数字管数量的限制,比赛时间和分数轮流显示)
4.中场和比赛结束时可以报警。
用到的AT89C52单片机引脚口:P用于驱动数码管显示的0口八引脚接上拉电阻,P2口中P2.3引脚接FM,控制蜂鸣器,P2.6控制段码锁存器锁定数据,P2.7控制位码锁存器锁定数据,P四行和四列三口八引脚接矩阵键盘。所有引脚都用作IO口使用。
,前三位数字管交替显示分数(minute)与第一队(蓝队)的比分,后三位数字管显示时钟秒数(second)与第二队的比分。用锁存器将数码管的位码先锁存,然后再锁存段码。LED将上拉电阻添加到锁存器之间数字管段码显示为高电平驱动)~6.交替显示,使用视觉暂留,可以同时显示,显示一段时间后转向显示分数,然后交替显示时间数和分数。
矩阵键盘的列加上拉电阻,便于检测(不需要程序中对列线的高电平)。矩阵键盘用于单片机设置低电平,然后单片机扫描列。
三极管连接蜂鸣器,高电平驱动蜂鸣器发出声音。
三、设计电路图(模拟和实际电路图)
四、C程序
下面列出了一些函数mian()
/******************************************************************** * 名称 : main() * 功能 : 初始化 调用数码管显示 打开中断和定时器 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { //主函数 uint8 i=0; uint8 number_key; P3=0xff; WELA = 0; DULA = 0; FM=0; ////初始化数码管引脚 SEG_PIN = 0x00; delay(1); DULA=1; delay(1); DULA=0; ; ///定时器0,方式1 tmod 00000001 0x01 TMOD=0x01; TH0=(65536-50000)/256 ;//50ms TL0=(65536-50000)%6 ; while(key_scan()!=13) ////点击键盘上的开始比赛 记录分数,开始计数 { }; EA=1; //总中断 ET0=1; ///定时器1中断 TR0=1; while(1) { for(i=0;i<100;i ) { number_key=key_scan(); display(now_second,SECOND,1); key_function(number_key); key_last=number_key; ///上次键值 display(now_minute,MINUTE,0); number_key=key_scan(); key_function(number_key); key_last=number_key; ///上次键值 } for(i=0;i<100;i ) { number_key=key_scan(); display(blue_score,BLUE,2) ; key_function(number_key); key_last=number_key; ///记录上次键值 display(red_score,RED,2); number_key=key_scan(); key_function(number_key); key_last=number_key; ///上次键值 }
完整的程序和proteus工程图: