一、设计环境与器材
Keil开发uVision4开发环境,window10系统。
二、设计内容
a.设计内容分析:
1.能够记录整个赛程的比赛时间并可同时用数码管显示。
2.可通过键盘修改当前的比赛成绩。
3.能够通过数码管显示篮球比赛成绩。(由于数码管数量的限制,比赛时间和分数轮流显示)
4.比赛中场和结束时,能发出报警。
b.设计方案:
硬件使用网络标号连接,用到的AT89C52单片机引脚口:P0口八个引脚接上拉电阻,用于驱动数码管显示,P2口中P2.3引脚接FM,控制蜂鸣器,P2.6控制段码锁存器锁存数据,P2.7控制位码锁存器锁存数据,P3口八个引脚接矩阵键盘的4个行和4个列。所有引脚均作为IO口使用。
LED采用6个八位共阴数码管,前三位数码管交替显示分(minute)和第一个队的比分(蓝队),后三位数码管显示时钟秒数(second)和第二个队的比分。用锁存器将数码管的位码先锁存,然后再锁存段码。LED和锁存器之间加入上拉电阻(为了高电平驱动数码管段码显示),数码管从1~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)%256 ;
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工程图:
(55条消息) 单片机应用技术,AT89C51,篮球比赛计分、计时器-单片机文档类资源-CSDN文库https://download.csdn.net/download/weixin_52013159/85436389注意,积分下载的目的是为了让大家更好地借鉴其中的方法,同时防止滥用,请勿为了完成作业而照搬!
如有疑惑,评论区联系。