📄 stopwatch.c
字号:
#include<reg51.h>
#include<intrins.h>
sbit dat=P1^0;
sbit clk=P1^1;
sbit isKeyPress=P1^2;
sbit sege1=P1^6;
sbit sege2=P1^5;
sbit sege3=P1^4;
sbit sege4=P1^3;
unsigned char SEGCODE[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char KEYCHECKCODE[8] = {1,2,4,8,16,32,64,128};
unsigned int counter=0x10,dbuffer=0,min=0;
void initial(void)
{
TMOD=0x01;
TH0=0x00;
TL0=0x00;
IE=0x82;
TR0=1;
}
void send(unsigned char a)
{
data unsigned char i;
for(i=0;i<8;i++)
{
if(_crol_(a,i)&0x80)
dat=1;
else
dat=0;
clk=1;
clk=0;
}
}
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<121;j++);
}
unsigned char key_scan(void)
{
unsigned char data keyNum,i,keyValue;
keyNum=0xff;
send(0x00);
while(!isKeyPress)
{
//keyNum=0xff;
//display_bit=0xfe;
for(i = 0;i < 8; i++)
{
send(~KEYCHECKCODE[i]);
if(!isKeyPress)
{
keyValue = i;
break;
}
/*
send(display_bit);
if(!isKeyPress)
{
keyNum=display_bit;
break;
}
display_bit=_crol_(display_bit,1);
*/
}
delay(200);
return keyValue;
}
return keyNum;
}
int main(void)
{
initial();
while(1)
{
unsigned char keyValue = 8;
unsigned char i;
send(0x00);
while(!isKeyPress)
{
for(i = 0;i < 8; i++)
{
send(~KEYCHECKCODE[i]);
if(!isKeyPress)
{
keyValue = i;
break;
}
}
}
if(keyValue==0)
{
min++;
if(min > 59)
{
min = 0;
}
}
if(keyValue==1)
{
min--;
if(min < 0)
{
min = 59;
}
}
send(SEGCODE[dbuffer%10]);
sege4=0;
delay(1);
sege4=1;
send(SEGCODE[dbuffer/10]);
sege3=0;
delay(1);
sege3=1;
send(SEGCODE[min%10]);
sege2=0;
delay(1);
sege2=1;
send(SEGCODE[min/10]);
sege1=0;
delay(1);
sege1=1;
}
}
void timer0_int(void) interrupt 1
{
TH0=0x00;
TL0=0x00;
TR0=0;
if(!(counter--))
{
counter=0x10;
if(dbuffer!=59)
dbuffer++;
else if(min<59)
{
dbuffer=0;
min++;
}
else
min=0;
}
TR0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -