资源描述
精品文档
南开大学滨海学院
C51嵌入式软件设计(C语言)
题目:计时秒表
l 功能描述:本设计实现在99秒内的秒表计时,一个按键实现开始、暂停、复位。
l 原理概述:P1接四位七段数码管,P3.2接一按键产生外部中断0,P3.4-P3.7控制扫描显示。计时使用定时器0产生10ms中断累计。按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零。主程序调用显示程序,显示程序实时显示计时时间。
l 效果显示
l 图一(电路总图)
l 图二(效果显示) 注:第四位显示为单位:S
l 程序清单
#include<reg51.h>
#include<stdio.h>
unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };
sbit P37=P3^7;
sbit P36=P3^6;
sbit P35=P3^5;
sbit P34=P3^4;
unsigned int a=0,cout=0,mm=0;x,y,p,q;
/*********延时*********************/
void delay()
{
int g;
for(g=70;g>0;g--);
}
/*********显示程序*****************/
void display()
{
x=cout/10; //秒十位
P34=0;
P1=Tab[x]; delay();
P34=1;
y=cout-x*10; //秒各位
P35=0;
P1=Tab[y]; delay();
P1=0x80; delay();
P35=1;
p=mm/10; //ms的高位
P36=0;
P1=Tab[p];delay();
P36=1;
P37=0; //显示单位:S
P1=Tab[5]; delay();
P37=1;
}
/*********主程序********************/
void main()
{
IT0=1;
EX0=1;
ET0=1;
TMOD=0x01;
TH0=0xD8; //装初值,10ms
TL0=0xF0;
EA=1;
while(1)
{ display(); };
}/*********外部按键中断子程序*********/
void int0 ()interrupt 0
{
if(a==0) //开始计时
{ TR0=1;
mm=0;
a++; }
else if(a==1) //暂停计时
{ TR0=0;
a++;}
else //置零
{ a=0;
mm=0;
cout=0;}
}
/*********定时器子程序****************/
void time0() interrupt 1
{
TH0=0xD8;
TL0=0xF0;
mm++;
if(mm==80) //考虑其它损耗,调整后约为1S
{ cout++;
mm=0;}
}
可修改
展开阅读全文