📄 key4x4.c
字号:
#include <reg51.h>
sfr P4=0xe8;
sbit P42=P4^2;
sbit P43=P4^3;
#define DELAYTIME 40
sbit a=P0^0;
sbit b=P0^1;
sbit c=P0^2;
sbit d=P0^3;
char test[4]={0x7f,0xbf,0xdf,0xef};
void delay(unsigned long time)
{
while(time--);
}
unsigned char code code_table[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
#define WEISHU 8 //修改该处可以做到不同位数的动态显示,本程序可以做到最多8个
/*************************
硬件描述
**************************/
#define WEI_LE P43
#define DUAN_LE P42
/*************************
全局变量
**************************/
unsigned char xdata DISP[8];
/****************************************************************
* 将int型转换为4位BCD码
****************************************************************/
void bianhuan(unsigned long x)//
{
unsigned long temp=x;
DISP[0]=code_table[temp/10000000];temp=x%10000000;
DISP[1]=code_table[temp/1000000] ;temp=x%1000000 ;
DISP[2]=code_table[temp/100000] ;temp=x%100000 ;
DISP[3]=code_table[temp/10000] ;temp=x%10000 ;
DISP[4]=code_table[temp/1000] ;temp=x%1000 ;
DISP[5]=code_table[temp/100] ;temp=x%100 ;
DISP[6]=code_table[temp/10] ;temp=x%10 ;
DISP[7]=code_table[temp/1] ;temp=x%1 ;
}
/*************************
Timer 0 定时中断处理
**************************/ //timer init
void initTimer(void)
{
TMOD=0x01;
TH0=0xef;
TL0=0x80;
TR0=1;
ET0=1;
EA=1;
} //timer0/counter0 interrupt
void timer0(void) interrupt 1
{
static unsigned char wei=0;
unsigned char weixuan=0x80;
TH0=0xef;
TL0=0x80;
P1=DISP[wei];
DUAN_LE=1;
DUAN_LE=0;
P1=(~(weixuan>>wei));
WEI_LE=1;
WEI_LE=0;
wei++;
if(wei>=WEISHU)
wei=0;
}
void LED_Disp(unsigned long dat)
{
WEI_LE=0;
DUAN_LE=0;//锁存复位
EA=0;
bianhuan(dat);
EA=1;
}
void main()
{
int i=0;
P0=0xff;
delay(400);
initTimer();
LED_Disp(0);
while(1)
{
P0=0xff;
for(i=0;i<4;i++)
{
P0=0xff;
P0=P0&test[i];
delay(DELAYTIME);
if(a!=1)
{
delay(DELAYTIME);
if(a!=1)
{
LED_Disp((3-i)*4+1);
}
}
if(b!=1)
{
delay(DELAYTIME);
if(b!=1)
{
LED_Disp((3-i)*4+2);
}
}
if(c!=1)
{
delay(DELAYTIME);
if(c!=1)
{
LED_Disp((3-i)*4+3);
}
}
if(d!=1)
{
delay(DELAYTIME);
if(d!=1)
{
LED_Disp((3-i)*4+4);
}
}
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -