标题:
51单片机记时秒表,暂停、清零、开始 外加矩阵键盘定时秒表上限反向计时
[打印本页]
作者:
落落桑桑桑
时间:
2018-4-7 15:07
标题:
51单片机记时秒表,暂停、清零、开始 外加矩阵键盘定时秒表上限反向计时
秒表,暂停、清零、开始 外加矩阵键盘定时秒表上限反向计时
单片机源程序如下:
#include <reg52.h>
unsigned int code Act_Num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带下标的数字编码
unsigned int code Set_Num[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带有下标的数字编码
unsigned char code BitNumber[] = {0xef,0xdf,0xbf,0x7f};
unsigned int x0,flag = 0,j,num=80,key,key1,k=0,x1;
unsigned char temp, led[4];
sbit KEY = P3^2;
sbit KEY1 = P3^3;
void delay(int time);
void inti();
void inti1();
void main()
{
unsigned int i;
TMOD = 0x01;
ET0 = 1;
EA = 1;
inti();
inti1();
while (1)
{
led[0] = Act_Num[flag/10%10];
led[1] = Set_Num[flag%10];
led[2] = Act_Num[x1/10%10];
led[3] = Act_Num[x1%10];
for(i=0;i<4; i++)
{
P0=0x00;
P0=led[i];
P2=BitNumber[i];
delay(4);
P2=0xff;
}
}
}
void time0() interrupt 1
{
unsigned int i;
TH0 = 0xff;
TL0 = 0xa4;
x0++;
i++;
if (x0==10000)
{
x0 =0;
if (flag==60)
{
k=1;
}
else if (flag==0)
{
k=0;
}
if (k==1)
{
flag--;
}
else
{
flag++;
}
}
if (i==100)
{
i=0;
if (k==1)
{
x1--;
}
else
{
x1++;
}
if (x1==60)
{
x1=0;
}
}
}
void delay(int time)
{
unsigned int i;
for (i = 0; i< time;i++)
{
}
}
void inti()
{
EA = 1;
IT0 = 1;
EX0 = 1;
}
void stop()interrupt 0
{
if (KEY==0)
{
delay(2);
if (KEY==0)
{
j++;
switch(j)
{
case 1:
TH0 = 0xff;
TL0 = 0xa4;
TR0 = 1;
break;
case 2:
TR0= 0;
j=0;
num=80;
break;
}
while(KEY==0);
}
}
while(!KEY);
}
void inti1()
{
EA = 1;
IT1 = 1;
EX1 = 1;
}
void qinglin()interrupt 2
{
if (KEY1==0)
{
delay(2);
if (KEY1==0)
{
j=0;
TR0=0;
flag=0;
x1=0;
}
while(KEY1==0);
}
while(!KEY1);
}
复制代码
所有资料51hei提供下载:
带分.zip
(29.76 KB, 下载次数: 24)
2018-4-7 15:06 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-4-7 16:26
有原理图吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1