简易秒表LED数码管显示接口技术应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TL0=0xB0;
time++;
if(time==20)//1秒钟到
{
time=0;//重新计数20次
s++ ;//秒钟加1
}
if(s==60)//1分钟到
{
s=0;//秒钟置零
m++;//分钟加1
}
if(m==60)//1分钟到
{
m=0;//分钟置零
h++;//时钟加1
}
if(h==24)//一天到
{
delay(10);
if(s3==0)
{
TR0=~TR0;
while(!s3);
}
}
if(s2==0) //S2启动
{
delay(10);
if(s2==0)
{
TR0=1;
while(!s2);
}
}显示程序流程图
N Y
void display() //显示
{
P0=table[h/10];
P2=0x01;
单片机原理及应用
课程设计
设计题目:简易秒表LED数码管显示接口技术应用
姓名:廖承润
学号:110105011118
专业班级:11级光信1班
指导教师:叶念渝
2014年5月
目 录
简易秒表LED数码管显示接口技术应用
1,内容及要求
(1)内容
如何运用单片机实现计时;
如何显示时间;
如何利用按键实施对秒表的控制。
利用按键构成键盘实现秒表的启动、停止与复位,
利用LED数码管显示时间。
*进行简单的串行通信。
2,设计思路
(1)硬件
采用P0口输出并联控制两个数码管的8个段选控制端。
用P2.0、P2.1分别控制两个LED数码管的位选控制端。
这是典型的动态显示电路接法,LED采用共阳极数码
三个按键采用独立式键盘接法,
两个按键连接到外部中断INT0、INT1的输人引脚P3.2和P3.3,
8,源程序
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint s,m,h,n=0;
P2=0x20;
delay(2);
}
6调试
输人源程序。
先调试主程序,实现基本的显示功能
当无键按下时,将一直显示初值“00”。
再分别调试4个中断服务子程序。当按键S2按下时,程序将会进入对应INT1的中断服务程序,启动各定时器开始计时
若在不同的中断服务程序中设置断点,全速运行程序后将会停在断点处,表明程序运行状态正确;
S4按键接到T1的外部脉冲输入引脚P3.5,以中断方式实现键盘输入状态的扫描。
其中S2为启动按钮,S3为停止按钮,S4清零按钮。
K1为复位键
(2)软件
根据设计的总体要求划分出各功能程序模块,分别确定主程序、子程序及中断服务程序结构。
对各程序模块占用的单片机资源进行统一调配。
对各模块间的逻辑关系进行细化,优化程序结构;
设计出各模块程序结构流程图。
最后依据流程图编制具体程序。
将整个程序划分为主程序、键盘扫描程序、秒计时程序三大模块。
其中主程序除完成初始化外,主要由动态显示程序构成。
秒计时程序由定时器0中断服务子程序构成,
键盘扫描程序也由各中断服务子程序来实现。
3工作原理
(1)原理图
4硬件设计
(1)板子焊接
根据电路图焊接板子如下图:
delay(2);
P0=table[h%10];
P2=0x02;
delay(2);
P0=table[m/10];
P2=0x04;
delay(2);
P0=table[m%10];
P2=0x08;
delay(2);
P0=table[s/10];
P2=0x10;
delay(2);
P0=table[s%10];
定时器T0或Tl的定时时间作为时钟计时的基准
启动与停止定时器工作实现计时。
先用两个数码管动态显示时间,时间范围为0-60s
用三个独立式按键实现秒表的启动、停止和复位功能。
A机发送,B机接收*
(2)要求
通过简易秒表的制作,熟悉LED数码管与单片机的接口方式;
定时/计数器、中断技术的综合应用;
学会简易键盘的使用。
{
P0=table[h/10];//取时针的十位
P2=0x01;//选右边第一的数码管
delay(2);//延时
P0=table[h%10];//取时针的个位
P2=0x02;//选右边第二的数码管
delay(2);//延时
P0=table[m/10];//取分针针的十位
P2=0x04;//选右边第三的数码管
delay(2);
P0=table[m%10];
P2=0x08;
delay(2);
P0=table[s/10];
P2=0x10;
delay(2);
P0=table[s%10];
P2=0x20;
delay(2);
}
timer0() interrupt 1 using //定时中断T0
{
TH0=0x3C;//重置定时初值
h=0;//时钟清零
}
void main()//主程序
{
s2=1;//按键初始设置为高电平
s3=1;
s4=1;
TMOD=0x41;//定时器T0,T1初始化
TH1=0xff;
TL1=0x1f;
TH0=0x3C;
TL0=0xB0;
EA=1;//打开中端总开关
ET0=1;//定时中端T0允许
ET1=1;//定时中端T1允许
{
delay(10);//延时
if(s3==0)
{
TR0=~TR0;//TR0取反
while(!s3);//松手检测
}
}
if(s2==0) //S2启动
{
delay(10);
if(s2==0)
{
TR0=1;//启动定时器T0
while(!s2);//松手检测
}
}
}
void display() //显示子程序
5软件设计
(1)流程图
主程序流程图
Y
主程序
void main()
{
s2=1;
s3=1;
s4=1;
TMOD=0x41;
TH1=0xff;
TL1=0x1f;
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
ET1=1;
TR1=1;
IT0=1;
IT1=1;
s=0,m=0,h=0;
while(1)
{
{
TH0=0x3C;
TL0=0xB0;
time++;
if(time==20)
{
time=0;
s++ ;
}
if(s==60)
{
s=0;
m++;
}
if(m==60)
{
m=0;
h++;
}
if(h==24)
h=0;
}
键盘扫描程序流程图
S3
S2
void keyscan() //按键扫描
{
if(s3==0); //S3暂停
uint time=0;
sbits3=P3^3;
sbits2=P3^2;
sbits4=P3^5;
void delay(uint z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}Biblioteka Baidu
void keyscan() //按键扫描
{
if(s3==0); //S3暂停
{
TH1=0xff;//重置计数初置
TL1=0x1f;
s=0;//显示器清零
m=0;
h=0;
}
9,收获及体会
这次课程设计让我受益匪浅,。因为这个简易秒表的设计不仅检验了我们的单片机原理的学习程度,也培养了我们动手和独自思考编写程序的能力。在设计中使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。焊接电路板时需要足够的耐心,编写源程序刚开始虽然遇到一些问题,但是通过后来的仔细检查和思考最终解决了这些问题,因此也培养了我们独立解决问题的能力。在此还要感谢叶老师上课对我们的细心教导才使得我能够成功做出这个简易秒表。
keyscan();
display();
}
}
定时器1中断程序流程图
timer1() interrupt 3 using 1 //定时1中断S4清零
{
TH1=0xff;
TL1=0x1f;
s=0;
m=0;
h=0;
}
定时器0中断程序流程图
N
Y
N
Y
N
Y
定时器0中断程序
timer0() interrupt 1 using //定时中断T0
TR1=1;
IT0=1;//外部中断T0采用下降沿触发
IT1=1;//外部中断T1采用下降沿触发
s=0,m=0,h=0;//显示管设置初值
while(1)
{
keyscan();//调用按键扫描子程序
display();//调用显示程序
}
}
timer1() interrupt 3 using 1 //定时1中断S4清零
当按键S3按下时,进入INT0中断服务程序,停止定时器工作,秒表显示内容保持不变;
当按键S4按下时,进入T1中断服务程序,停止定时器工作,秒表显示清零;
最后将各模块联调实现全部功能。
将调试好的程序固化至89C51芯片中,脱机运行。
7改进意见
在编写程序时,运行遇到一些错误,经过仔细修改,最终找出错误并改正。
相关文档
最新文档