51单片机4位数码管做秒表,C语言编程含有控制开

环球商务网 2022-02-12 20:55 编辑:admin 302阅读

#include <REG52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulint unsigned long int
#define y4c P2&=0x1f;P2|=0X80
#define y5c P2&=0x1f;P2|=0Xa0
#define y6c P2&=0x1f;P2|=0Xc0
#define y7c P2&=0x1f;P2|=0Xe0
#define rst P2&=0x1f
sbit key1=P3^5;
sbit key2=P3^6;
sbit key3=P3^7;
uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint time,x;
void yan(uint t)
{
uint j;
for(;t>0;t--)
for(j=110;j>0;j--);
}
void anjian()//按键
{
if(key1==0)
{
yan(5);
if(key1==0)
{
x=0;
}
}
if(key2==0)
{
yan(5);
if(key2==0)
{
TR0=1;
}
}
if(key3==0)
{
yan(5);
if(key3==0)
{
TR0=0;
}
}
}
void display(uchar a,uchar b,uchar c,uchar d)
{
y6c;
P0=0x10;
rst;
P0=table[a];
y7c;
rst;
yan(5);
y6c;
P0=0x20;
rst;
P0=table[b];
y7c;
rst;
yan(5);
P0=0x7f;
y7c;
rst;
yan(5);
y6c;
P0=0x40;
rst;
P0=table[c];
y7c;
rst;
yan(5);
y6c;
P0=0x80;
rst;
P0=table[d];
y7c;
rst;
yan(5);
}
void main()
{
TMOD=0x01;//0000 0get位中断0定时01方式
TH0=(65536-5000)/256;//
TL0=(65536-5000)%256;
EA=1;//总终端开关
ET0=1;//打开定时器中断
TR0=1;//启动定时器
P3=0xff;
while(1)
{
anjian();
time=x/2;
display(time/1000,time/100%10,time/10%10,time%10);
}

}
void xx () interrupt 1
{
TH0=(65536-5000)/256;//设置初值
TL0=(65536-5000)%256;
x++;
if(x==20000)
{
x=0;
}
}