单片机课程设计24秒篮球计数器Word文档格式.docx
《单片机课程设计24秒篮球计数器Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计24秒篮球计数器Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
![单片机课程设计24秒篮球计数器Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/5/e917fad9-a924-47e8-ac53-f1ffdde94a09/e917fad9-a924-47e8-ac53-f1ffdde94a091.gif)
时间设置完后,启动定时器T0开始定时计数。
计时采用倒计时,比如:
设置的时间为24秒钟,则在LED上显示24两位数。
定时T0计数24秒后中断返回,继续定时计数下一个24秒;
同时则在2位LED显示器上显示,表示时间已经过去1秒钟,即为23秒。
这样一直持续下去。
知道变为“00”时表示赛程结束。
如果比赛中裁判叫停,则只要按下键,即可暂停计时。
3.1总体设计框图
图1倒计时设计总体框图
4基本原理
24秒计时器的总体参考方案框图如图1所示。
它包括秒脉冲发生器、计数器、译码显示电路、报警电路和辅助时序控制电路(简称控制电路)等五个模块组成。
其中计数器和控制电路是系统的主要模块。
计数器完成24秒计时功能,而控制电路完成计数器的直接清零、启动计数、暂停/连续计数、译码显示电路的显示与灭灯、定时时间到报警等功能。
秒脉冲发生器产生的信号是电路的时钟脉冲和定时标准,但本设计对此信号要求并不太高,故电路可采用单片机定时器。
译码显示电路由共阴极七段LED显示器组成。
报警电路在实验中用发光二极管和鸣蜂器。
主体电路:
24秒倒计时。
24秒计数芯片的置数端清零端共用一个开关,比赛开始后,24秒的置数端无效,24秒的倒数计时器的倒数计时器开始进行倒计时,逐秒倒计到零。
选取“00”这个状态,通过组合逻辑电路给出截断信号,让该信号与时钟脉冲在与门中将时钟截断,使计时器在计数到零时停住。
5硬件电路设计
单片机STC89C51简介
AT89C51是一种带4K字节FLASH存储器(FPERO—MFlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
管脚说明
VCC:
供电电压。
AT89C51GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管
脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用
于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为
高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(计时器0外部输入)
P3.5T1(计时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOV,XMOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1
时,/EA将内部锁定为RESE;
T当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放
大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用
外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必
0DA/0.01DA/1.02DA/2.03DA/3.04DA/4.05DA/5.06DA/6.07DA/7.08A/0.29A/1.201A/2.21A/3.221A/4.231A/5.241A/6.251A/7.2DXR/0.3DXT/1.30TNI/2.31TNI/3.30T/4.31T/5.3RW/6.3DR/7.3
.71P.61P.15P.41P.31P.12P.11P.10P
711651141321101827262524232212233345336733893
图2AT89S52单片机引脚图
6
硬件电路图
6.1时钟电路模块
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。
为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。
具体连接图如图3所示:
6.2复位电路模块
复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。
除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。
RST引脚是复位信号的输入端。
复位
6.3报警模块
蜂鸣器通过一NPN三极管进行驱动,如图触发信号有基极引入。
(图7)
R3
0R1
Q2
NPN
图五报警电路
7源程序
#include<
reg52.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitw1=P2^0;
sbitw2=P2^1;
sbitkey1=P3^2;
sbitkey2=P3^3;
sbitkey3=P3^4;
sbitBEEP=P1^1;
uintnum,num1,shi,ge;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)for(y=110;
y>
y--);
}
/*voiddelay1(ucharx)//x*0.14MS
uchari;
while(x--)
{for(i=0;
i<
13;
i++){}
voidbeep(void)
for(i=0;
50;
i++)
delay1(4);
BEEP=!
BEEP;
/*按键扫描函数*/
voidkeyscan()
if(key1==0)
delay(5);
while(!
key1);
TR0=1;
if(key2==0)
key2);
TR0=0;
key3);
num1=24;
BEEP=1;
voidinit()
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
voiddisplay(ucharshi,ucharge){
P0=table[shi];
w1=1;
w2=0;
delay
(2);
P0=table[ge];
w1=0;
w2=1;
if(num1==0)
BEEP=0;
voidmain()
init();
while
(1)
keyscan();
if(num==20)
num=0;
num1--;
}ge=num1%10;
shi=num1/10;
display(shi,ge);
voidtime1()interrupt1
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num++;
8仿真结果
9心得体会
通过了三个星期的动手操作,我已经非常熟悉了计时器的工作原理。
虽然我没能在电路仿真中实现预期的效果,但是我依旧掌握了许多AT89C51的知识。
在这三个想起多的时间里,我花了好长时间去尽自己的最大努力去完成,期间问了许多同学和学长,但我最后还是很遗憾,没有做出24秒计时器。
但是我确实花了很多时间去认真的设计学习,我已经尽了自己最大的努力了。
本次课设是本人到目前为止觉得最有意义也是收获最大的一次实习。
身为通信的学生,设计是我们将来必需的技能。
而这次课设恰恰给我们提供了一个应用自己所学知识的平台。
从通过理论设计,到仿真软件仿真,再到确定具体方案。
整个过程都需要我充分利用所学的知识进行思考、借鉴。
可以说,本次课设是针对前面所学的知识进行的一次比较综合的检验。
总的来说,这次课设虽然累,但非常充实。
在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。
因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础。
前面电路的理论设计是一件多么令人头痛的事。
因为是在仿真软件上较理论上还是存在一定的差距,仿真能出来结果的在实际电路不一定就能出来,这就需要我们有耐心,寻找一个比较正确的调试方法。
虽然我没有按预想的做出24秒篮球计数器,但是我认真地付出了时间去设计,所以我有些遗憾和不甘心。
同时,在这期间我学到了许多知识,不管是单片机AT89C51还是计时器的程序,我多有了更深的理解和学习。
谢谢在这期间帮助过我的同学和老师们。
《单片机课程设计》
篮球24秒倒计时计时器
学院:
物电学院班级:
xxx班姓名:
xxx学号:
12013241958指导老师:
xxx完成时间:
2015.12.