#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar C,KS,KT,KF,KM,KA,KB,KC; //C:定时/计数溢出次数;KS:K1按键初始状态;KF:K1按键按下次数;KT:K2按键初始状态;KM:K3按键初始状态
sbit K1=P1^0; //开始暂停按键
sbit K2=P1^1; //记录
sbit K3=P1^2; //上翻
sbit K4=P1^3; //下翻
sbit K5=P1^4; //倒计时
sbit K6=P1^5; //清零按键
sbit BEEP=P1^6; //扬声器口
sbit D=P0^7; //秒和毫秒之间的点
uchar code SMG4[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0--9对应的段码
uchar SD[]={0,0,0,0}; //SD[]表示4段数码管显示的数字
uchar CC[][4]={0}; //存储时间
//延时函数
void Delay(uchar x)
{
uint i;
while(--x) for(i=0;i<120;i++);
}
//数码管显示0
void r()
{
uchar f;
for(f=0;f<4;f++)
SD[f]=0;
}
//蜂鸣器
void Beep()
{
uchar i,j=2;
for(i=0;i<120;i++)
{
while(--j); BEEP=~BEEP;
}
BEEP=0;
}
//K1按键处理函数 开始暂停
void KE()
{
if(KS==0)
{ KF=(KF+1)%2;
switch(KF)
{
case 1:EA=1;ET0=1;TR0=1;Beep();break; //数码管开始计时
case 0:EA=1;ET0=0;TR0=0;Beep();break; //数码管停止计时
}
}
}
//K2按键处理函数,存储时间
void KW()
{
uchar f;
uchar i=0 ;
if(KT==0)
{ i++;
Beep();
for(f=0;f<4;f++)
{
CC[i][f]=SD[f];
}
}
}
/*for(f=0;f<4;f++) CC[f]=SD[f];*/
//K3按键处理函数
void KX()
{ uchar i=0;
uchar f;
if(KA==0)
{ i++;
Beep();
for(f=0;f<4;f++)
{
SD[f]= CC[i][f];
}
}
}
//K6按键处理函数,计时清零
void KZ()
{
if(KM==0)
{
Beep();
EA=1;ET0=0;TR0=0;r();
}
}
//主程序
void main()
{
uchar i,j;
P0=0x00;
P3=0xff;
C=0;
KF=0;
KT=1;
KM=1;
KS=1;
KA=1;
KB=1;
KC=1;
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256; //50ms定
while(1)
{
j=0x7f;
for(i=0;i<=3;i++) //从低往高显示位数
{
j=_crol_(j,1);
P3=j;
P0=SMG4[SD[i]]; //显示数字
if(i==2) D=1;
Delay(2);
}
if(KS!=K1) //判断K1是否有按键按下
{
Delay(10);
KS=K1;
KE();
}
if(KT!=K2) //判断K2是否有按键按下
{
Delay(10);
KT=K2;
KW();
}
if(KA!=K3) //判断K3是否有按键按下
{
Delay(10);
KA=K3;
KX();
}
/*if(KB!=K4) //判断K4是否有按键按下
{
Delay(10);
KB=K4;
KY();
}
if(KC!=K5) //判断K5是否有按键按下
{
Delay(10);
KC=K5;
KU();
} */
if(KM!=K6) //判断K6是否有按键按下
{
Delay(10);
KM=K6;
KZ();
}
}
}
//T0中断函数
void
timer0() interrupt 1
{
uchar i;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256; //50ms定时
if(++C!=10) return;
C=0;
SD[0]++; //0.1s位累加
for(i=0;i<=3;i++) //进位处理
{
if(SD[i]==10)
{
SD[i]=0;
if(i!=3) SD[i+1]++;
}
else break;
}
}
仿真图在压缩包里,急用,请大神帮忙
-
-
-
新建文件夹.rar
下载积分: 积分 -1 分
17.47 KB, 下载次数: 8, 下载积分: 积分 -1 分
一周热门 更多>