#include<reg51.h>
#include<INTRINS.h>
#define u16 unsigned int
#define u8 unsigned char
sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k4=P1^7;
u8 ds[6]; //数码管显示缓存
#define YY 1
#if YY==0
//共阳
code u8 w[]={0x04,0x08,0x10,0x20,0x40,0x80,}; //位码
code u8 d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00,
0x40,};//断码
void dispaly(){//显示函数
static u8 a;
if(++a>=6)a=0;
P3=0x00;
P2=d[ds[a]];
P3=w[a];
}
#else
//共阴
code u8 w[]={~0x04,~0x08,~0x10,~0x20,~0x40,~0x80,}; //位码
code u8 d[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,~0x00,
~0x40,};//断码
void dispaly(){//显示函数
static u8 a;
if(++a>=6)a=0;
P3=0xff;
P2=d[ds[a]];
P3=w[a];
}
#endif
void init() //初始化函数
{ TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
u16 js_ms;//毫秒
u8 js[3];//秒,分,时
u8 zt;//状态,0运行,1暂停
u8 code js_max[]={60,60,24};//秒分时进1值
void key(){
static u8 a;
if((k1&k2&k3&k4)==0){//有按键按下
if(a<10)a++;
if(a==5){//消抖
if(!k1){//k1,启动
zt=0;
}
if(!k2){//暂停
zt=1;
}
if(!k3){//清零
js[0]=0;js[1]=0;js[2]=0;
}
if(!k4){
}
}
}else a=0;
}
void main()//主函数
{
init();
TR0=1;
while(1){
ds[0]=js[2]/10;
ds[1]=js[2]%10;
ds[2]=js[1]/10;
ds[3]=js[1]%10;
ds[4]=js[0]/10;
ds[5]=js[0]%10;
key();
}
}
void timer0() interrupt 1//1ms定时器
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dispaly();
if(zt==0)js_ms++;
if(js_ms>=1000){
js_ms=0;
if(++js[0]>=60){
js[0]=0;
if(++js[1]>=60){
js[1]=0;
if(++js[2]>=24){
js[2]=0;
}
}
}
}
}
第4个按键看不清是干嘛的