您的位置 首页 解答

单片机+数码管简略秒表程序,带中止发动复位

p0口是数码管的位选入口,P2口是数码管的段选用4位一体的数码管,P30P31P32分别是启动停止和复位按钮includereg51h>defineu

p0口是数码管的位选进口,P2口是数码管的段选用4位一体的数码管,P3.0 P3.1 P3.2分别是发动中止和复位按钮

#include
#define uchar unsigned char
#define uint unsigned int
#define DATA P2
sbit start=P3^0;
sbit stop=P3^1;
sbit reset=P3^2;
//———启停标志—–
bit SAT=0;
bit RST=0;
//————数码管码表———-
uchar tab[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//————
uint time=0; //时刻
uint cnt=0; //计数
//————-
void delay(int k)
{
while(k–);
}
void startkey()
{
static uchar i,j;
if(start==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(start==0)
{
i=1;j=0; SAT=1;
}
}
}
}
else
{
i=j=0;
}
}
void stopkey()
{
static uchar i,j;
if(stop==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(stop==0)
{
i=1;j=0; SAT=0;
}
}
}
}
else
{
i=j=0;
}
}
void resetkey()
{
static uchar i,j;
if(reset==0)
{
if(i==0)
{
j++;
if(j>3)
{
if(reset==0)
{
i=1;j=0; RST=1;
}
}
}
}
else
{
i=j=0;RST=0;
}
}
//———数码管显现 00.0——-
void shownumber(int num)
{
DATA=tab[num%10];
P0=7;
delay(100);
DATA=0x80;
P0=6;
delay(100);
DATA=tab[num%100/10];
P0=5;
delay(100);
DATA=tab[num/100];
P0=4;
delay(100);
}
//———定时器初始化ˉ———
void time0_init()
{
TMOD=0x01;
TH0=(65536-18348)/256;
TL0=(65536-18348)%256;
EA=1;
ET0=1;
}
void T0_time()interrupt 1
{
TH0=(65536-18348)/256;
TL0=(65536-18348)%256;
cnt++;
if(cnt==5)
{
time++;cnt=0;
}
}
void main(void)
{
delay(50000);
time0_init();
while(1)
{
shownumber(time);
if(SAT==1)TR0=1;
if(SAT==0)TR0=0;
if(RST==1){TR0=0;SAT=0;time=0;}
startkey();
stopkey();
resetkey();
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/318501.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部