📄 ex.c
字号:
//****************Copyright (c)*************
// 成都麟鑫科技有限责任公司
// http://www.linxinpro.com
//******************************************
/*2007年11月19日
矩阵键盘试验及数码管移位显示试验
按键输入0~F的数据
数码管动态移位显示
通过改变time变量可以改变动态显示效果
采用逐行扫描法实现矩阵键盘输入
*/
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code tab1[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~F字形代码
uint data1=0,data2=0,data3=0,data4=0;time=100;//全局变量
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
void delay(uint tx);//延时程序
void keys(); //判断键值子程序
void skeys(); //扫描键盘子程序
void show(uint tx1,uint tx2,uint tx3,uint tx4);//数据显示子程序
void main () //主程序
{
uint i;
P1_3=1;//初始化数码管控制位
P1_2=1;
P1_1=1;
P1_0=1;
while(1)
{
skeys();//扫描键盘
show(data1,data2,data3,data4);//显示数据
}
}
/*判断键值*/
void keys()
{
P0=0xef; //判断是否为第一行按键按下
if(P0<0xef)
{
data4=data3;//数据移位操作
data3=data2;
data2=data1;
if(P0==0Xee)
data1=0;
if(P0==0xed)
data1=1;
if(P0==0xeb)
data1=2;
if(P0==0xe7)
data1=3;
while(P0!=0xef)
show(data1,data2,data3,data4);//等待按键断开
}
P0=0xdf; //判断是否为第二行按键按下
if(P0<0xdf)
{
data4=data3;//数据移位操作
data3=data2;
data2=data1;
if(P0==0Xde)
data1=4;
if(P0==0xdd)
data1=5;
if(P0==0xdb)
data1=6;
if(P0==0xd7)
data1=7;
while (P0!=0xdf)
show(data1,data2,data3,data4);//等待按键断开
}
P0=0xbf; //判断是否为第三行按键按下
if(P0<0xbf)
{
data4=data3;//数据移位操作
data3=data2;
data2=data1;
if(P0==0Xbe)
data1=8;
if(P0==0xbd)
data1=9;
if(P0==0xbb)
data1=10;
if(P0==0xb7)
data1=11;
while (P0!=0xbf)
show(data1,data2,data3,data4);//等待按键断开
}
P0=0x7f; //判断是否为第四行按键按下
if(P0<0x7f)
{
data4=data3;//数据移位操作
data3=data2;
data2=data1;
if(P0==0X7e)
data1=12;
if(P0==0x7d)
data1=13;
if(P0==0x7b)
data1=14;
if(P0==0x77)
data1=15;
while (P0!=0x7f)
show(data1,data2,data3,data4);//等待按键断开
}
}
/*扫描矩阵键盘*/
void skeys()
{
uint j=0;
P0=0x0f;
if(P0<0x0f)
{
for(j=0;j<20;j++)
show(data1,data2,data3,data4);//软件消除抖动
if(P0<0x0f)
keys();
}
}
/*延时子程序*/
void delay(uint tx)
{
uint x=tx;
do
x--;
while(x>1);
}
/*显示按键键值*/
void show(uint tx1,uint tx2,uint tx3,uint tx4)
{
P2=tab1[tx1];
P1_0=0;
delay(time);
P1_0=1;
P2=tab1[tx2];
P1_1=0;
delay(time);
P1_1=1;
P2=tab1[tx3];
P1_2=0;
delay(time);
P1_2=1;
P2=tab1[tx4];
P1_3=0;
delay(time);
P1_3=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -