LED数码管秒表制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用工程学院
单片机应用技术实训报告
专业:应用电子
学号:1504150137
姓名:许林
日期:2016/12/24
项目二: LED数码管秒表制作
一、任务目的
1.了解并掌握数码管静态和动态显示原理。
2.掌握秒表计时原理与编程思想。
3.了解并掌握单个按键次数的识别。
二、任务要求
a)上电后数码管最右边显示自己学号。
b)按下功能键后,右边6个数码管上显示秒表定时初值,格式为00-00.0。
c)第二次按下功能键后,以一百毫秒为最小计时单位从0开始计时,第三
次按下功能键后暂停计时,第四次按下功能键后时间清0。
三、硬件电路设计
四、软件设计
#include
unsigned char sec,mmiao,miao,fen;
sbit K=P3^2;
unsigned char a=0;
void delayms(unsigned int i)
{
unsigned char k;
while(i--)
for(k=0;k<120;k++);
}
void time1() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
sec++;
if(sec==2)
{
mmiao++;
sec=0;
if(mmiao==10)
{
miao++;
mmiao=0;
if(miao==60)
{
fen++;
miao=0;
if(fen==60)
{
fen=0;
}}}}}
void time2() interrupt 0
{unsigned char n;
if(K==0)
for(n=0;n<1200;n++);
if(K==0)
{ while(K==0);
for(n=0;n<1200;n++);
a++;
switch(a)
{
case 1:mmiao=0;miao=0;fen=0;break;
case 2:TR0=1;break;
case 3:TR0=0;break;
case 4:mmiao=0;miao=0;fen=0;break;
case 5:P0=0x07;P2=7;a=0;break;
}
}
}
void main()
{
unsigned char
led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char
led1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=0;
ET0=1;
EX0=1;
IT0=1;
EA=1;
while(1)
{
if(a==0){P2=6;
P0= 0x4f;
delayms(1);
P2=7;
P0= 0x07;
delayms(1);}
else{
P2=7;
P0=led[mmiao%10];
delayms(1);
P2=6;
P0=led1[miao%10];
delayms(1);
P2=5;
P0=led[miao/10];
delayms(1) ;
P2=4;
P0=0x40;
delayms(1);
P2=3;
P0=led[fen%10];
delayms(1);
P2=2;
P0=led[fen/10];
delayms(1);
}}}
五、系统调试
仿真调试:首先检查各个线路是否连接正确,尤其是数码管是否选择正确(共阴数码管)。
实物调试:
1)首先把电脑上生成的HEX文件下载到单机中。
2)按键观察现象是否符合要求。
出现问题:按键不灵,或者现象不符合要求。此时需要检查开发板是否存在问题(用两个开发板用相同操作看是否存在差异),如开发板没问题,检查程序是否在显示部分的程序是否存在错误。此项目需要读取按键次数,而按键抖动是主要问题,开发板做好没法硬件消抖,所以只有软件消抖,所以需要在按键识别程序里加按键延时消抖程序。
六、心得体会
通过项目二的学习,使我对这门课有了等多多新的了解,弥补了在课堂上学习的不足。首先,我学到了如何发现问题,以及如何解决这些问题。这些我想是我以后工作中重要的能力。