制作一个LED数码管显示的秒表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与工程系实验报告
实验题目:制作一个LED数码管显示的秒表
班级:姓名:学号:日期:
一、实验目的
掌握单片机使用定时计数器控制LED数码管的设计与软件编程
二、实验要求
1、用2位数码管显示计时时间,最小计时单位为“百毫秒”,计时范围0.1~9.9s;
2、当第1次按下并松开计时功能键时,秒表开始计时并显示时间;
3、第2次按下并松开计时功能键时,停止计时,计算两次按下计时功能键的时间,并在数码管上显示;
4、第3次按下计时功能键,秒表清0,再按1次计时功能键,重新开始计时。

5、如果计时到9.9s时,将停止计时,按下计时功能键,秒表清零,再按下重新开始计时。

三、实验要求
提交的实验报告中应包括:电路原理图、实验设计思路、C51源程序(含注释语句)、运行效果(含运行截图与说明)、实验小结
三、硬件电路原理图的设计
四、编程思路及C51源程序
编程思路:使用外中断服务处理程序处理按键,内部设计一个计数器,记录按键按下的次数,根据按键次数完成相应的功能。

用数码管显示计时时间,根据按键的次数以及其功能来显示
数字。

#include<reg51.h> //包含8051单片机寄存器定义的头文件
unsigned char code discode1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef} unsigned char code discode2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
unsigned char timer=0; //记录中断次数
unsigned char second; //存储秒数
unsigned char key=0; //记录按键次数
main() //主函数
{
TMOD=0x01; //定时器T0方式1定时
ET0=1; // 允许定时器T0中断
EA=1; // 总中断允许
second=0; //设初始值
P0=discode1[second/10]; //显示秒位
P2=discode2[second%10]; //显示0.1S位
while(1) //循环
{
if((P3&0x80)==0x00) //当按键被按下时
{
key++; //按键次数加一
switch(key) //根据按键次数分三种情况
{
case 1: //第一次按下为启动秒表表示
TH0=0xee; //
TL0=0x00; //
TR0=1; //
break; //
case 2: //按下两次暂停秒表
TR0=0; //
break; //
case 3: //按下三次秒表清零
key=0; //
second=0; //
P0=discode1[second/10]; //
P2=discode2[second%10]; //
break;
}
while((P3&0x80)==0x00); //如果按键时间过长在此循环}
}
}
}
void int_t0() interrupt 1 using 0 //定时器T0中断子程序
{
TR0=0; //停止计时,执行以下操作(计时出现误差)
TH0=0xee; //向TH0写入初值的高8位
TL0=0x00; //向TL0写入初值的低8位,定时5ms
timer++; //记录中断次数
if (timer==20) //中断20次,20*5ms=100ms=0.1s
{
timer=0; //中断次数清0
second++; //加0.1s
P0=discode1[second/10]; //根据计时时间,即时显示秒位
P2=discode2[second%10]; //根据计时时间,即时显示0.1s位
}
if(second==99) //当计时到9.9s时
{
TR0=0; //停止计时
second=0; //秒数清0
key=2; //按键数置2,当再次按下按键时,key++,即key=3,秒表清0复原
}
else //计时不到9.9s时
{
TR0=1; //继续计时
}
}
五、仿真运行效果展示
1、第一次按键,秒表开始计时,并计时到9.9
2、2次按键,停止计时,将计时的时间值送到数码管显示
3、第3次按下计时功能键,秒表清零
六、实验小结
在实验的过程中,出现过几次错误,自己对理论知识了解的还不够透彻,所幸,通过自己思考解决了。

相关文档
最新文档