标题:
单片机定时器的应用 具有清零,暂停,启动功能秒表源程序
[打印本页]
作者:
108880802
时间:
2020-6-17 19:36
标题:
单片机定时器的应用 具有清零,暂停,启动功能秒表源程序
/*利用定时器0、灯光、数码管模块和两个独立摁键,设计一个秒变,具有清零,暂停,启动功能。
1.显示格式为:
分-秒-0.05毫秒(既50ms)
08-26-18表示:8分26秒900毫秒
2.独立摁键s4为:启动/暂停
独立摁键s5为:清零
摁键均为摁下有效。
3.暂停时只有L1亮,启动时只有L2亮*/
#include"reg51.h"
#define led P2/*定义P2端口*/
typedef unsigned int u16;
typedef unsigned char u8;
sbit k2=P3^2 ;
sbit k1=P3^3 ;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 a,b,c,d[8],e,i,r;
void delay(i)
{
while(i--);
}
void InitTimer0(void)
{
TMOD = 0x01; /*定时一毫秒*/
TH0 = 0xFC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 0;/*关闭计数器*/
}
void dd()/*计算数值*/
{
d[0]=smgduan[c%10];
d[1]=smgduan[c/10];
d[2]=0x40;
d[3]=smgduan[b%10];
d[4]=smgduan[b/10];
d[5]=0x40;
d[6]=smgduan[a%10];
d[7]=smgduan[a/10];
}
void kk()/*按键*/
{
if(k2==0)
{
delay(1000);
if(k2==0)
{
led=0xa3;e++;TR0=!TR0;/*开计数器*/
}
if(e==2)
{
e=0;led=0x63;
}while(!k2);
}
if(k1==0)
{
delay(1000);
if(k1==0)
{
a=0;b=0;c=0;TR0=0;/*关计数器*/
}
}
}
void show()
{
for(i=0;i<8;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0;break;
case(1):
LSA=1;LSB=0;LSC=0;break;
case(2):
LSA=0;LSB=1;LSC=0;break;
case(3):
LSA=1;LSB=1;LSC=0;break;
case(4):
LSA=0;LSB=0;LSC=1;break;
case(5):
LSA=1;LSB=0;LSC=1;break;
case(6):
LSA=0;LSB=1;LSC=1;break;
case(7):
LSA=1;LSB=1;LSC=1;break;
}
P0=d[i];
delay(100);
P0=0x00;
}
}
void main(void)
{
InitTimer0();
while(1)
{
dd();
kk();
show();
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0xFC;/*定时一毫秒*/
TL0 = 0x18;
r++;
if(r>=50)
{
r=0;
c++;
if(c>=20)
{
c=0;
b++;
}
if(b>=60)
{
b=0;
a++;
}
if(a>=60)
{
a=0;
}
}
}
复制代码
作者:
108880802
时间:
2020-8-28 12:38
大家有问题可以问哈,我时不时就会登陆,看到了就会回的哈!!
作者:
jdf
时间:
2020-8-29 22:21
有电路图吗
作者:
陌上开花
时间:
2020-10-7 18:39
感谢感谢,我知道如何暂停计数器了。(笑哭笑哭)
作者:
烛龙...
时间:
2020-10-19 10:39
能发一下仿真吗?
作者:
瓶盖儿
时间:
2022-5-9 22:09
中断函数那个地方能详细讲一下吗 看不太懂 a,b那几个自增代表什么呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1