📄 123.c
字号:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
void delay(uchar k);//延时
void add (uchar da);
uchar scan_key(void);//键盘扫描
//uchar get_key(uchar temp);//取按键值
uchar SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//共阳
uchar scan_led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //片选 高平亮
uchar led[8]={16,16,16,16,16,16,16,16}; //每位led要显示的数
uchar code temp_key[16]={0x11,0x12,0x14,0x18, 0x21,0x22,0x24,0x28, 0x41,0x42,0x44,0x48, 0x81,0x82,0x84,0x88};
uchar x,y;///行和列的扫描的值
bit flag;//按下键盘的标志位
uchar temp,key;
void main(void)
{ uchar i;
P1=0x0f;//按键的初值
while(1){
if(flag==0)key=scan_key();
if(flag==1&&P1==0xf0)add(key);
P0=0xff;
P2=scan_led[i]; //片选扫瞄
P0=SEG7[led[i]]; //共阳段显
i++;
if(i>=8)i=0;
delay(1);
}
}
////////////////////////////////////////////
void delay(uchar k)//延时
{uchar i,j;
for(i=0; i<k ;i++)
for(j=0;j<125;j++);
}
////////////////////////////////////////////
uchar scan_key(void)//键盘扫描///线反转法
{uchar i;
uchar x,y,z;
P1=0x0f; //先对P3置数 行扫描
if(P1!=0x0f) //判断是否有键按下
{delay(10); //延时,软件去干扰
if(P1!=0x0f) //确认按键按下X = P3;
{x=P1; //保存行扫描时有键按下时状态
P1=0xf0; //列扫描
y=P1; //保存列扫描时有键按下时状态
z=~(x|y); //取出键值
flag=1;
for(i=0;i<16;i++)
if(temp_key[i]==z)return i;//判断是哪个按键并返回值
}
}
return 16;//否则返回无效值16
}
/////////////////////////////////////////////////////////
void add(uchar da)//按了一个值后就往左移去显示
{uchar i;
flag=0; //键盘的标志位赋0
if(da!=16){for(i=7;i>0;--i)
led[i]=led[i-1];
led[0]=da;
}
}
//////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -