📄 程序.txt
字号:
#include <AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,
0x49,0x41,0x1f,0x01,0x09};
uchar data cnt[8];
uchar data pre_cnt[8];
sbit drv=P3^4;
bit set_flag;
bit out_flag;
bit keydown_flag;
/****************************/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<60;j++)
{;}}
}
/**********************************************/
void scan_key(void)
{uchar i,m=0x01;
P3_6=0;P3_7=1;
for(i=0;i<8;i++)
{
SBUF=255-m;while(!TI);TI=0;
if(!P3_5)pre_cnt[i]++;
m<<=1;
}
//------------------------
for(i=0;i<8;i++)
{if(pre_cnt[i]>9)pre_cnt[i]=0;}
}
/************************************/
void dis_cnter(void)
{uchar i;
P3_7=1;P3_6=1;
for(i=0;i<8;i++)
{SBUF=SEG7[cnt[i]];while(!TI);TI=0;}
P3_7=0;
}
/**********************************************/
void dis_pre_cnter(void)
{uchar i;
P3_7=1;P3_6=1;
SBUF=SEG7[pre_cnt[0]]&0xfe;while(!TI);TI=0;
//----------------------------------------
for(i=1;i<8;i++)
{SBUF=SEG7[pre_cnt[i]];while(!TI);TI=0;}
P3_7=0;
}
/****************************************/
void cnter(void)
{uchar i;
for(i=0;i<7;i++)
{if(cnt[i]>9){cnt[i]=0;cnt[i+1]++;}}
//------------------------------------
if(cnt[7]>9){for(i=0;i<8;i++)cnt[i]=0;}
}
/***************************************************/
void pt_cnt(void)
{
if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&\
(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&\
(cnt[4]==pre_cnt[4])&&(cnt[5]==pre_cnt[5])&&\
(cnt[6]==pre_cnt[6])&&(cnt[7]==pre_cnt[7]))
out_flag=1;
else out_flag=0;
//==========================
if(out_flag)drv=0;
else drv=1;
}
/********************************************/
void main(void)
{ IE=0x84;
IT1=1;
while(1)
{P3_6=0;P3_7=1;
SBUF=0x00;while(!TI);TI=0;
if((P3&0x24)!=0x24)keydown_flag=1;
else keydown_flag=0;
//--------------------------
SBUF=0xfe;while(!TI);TI=0;
if(!P3_2)set_flag=!set_flag;
//=============================================
if(!set_flag){cnter();dis_cnter();pt_cnt();delay(100);}
else {scan_key();dis_pre_cnter();delay(10);}
//=============================================
if(keydown_flag)delay(300);
}
}
/************************************************/
void extern_int1(void) interrupt 2 using 1
{
cnt[0]++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -