mBeta
-
51单片机4×4矩阵键盘仿真哪里找
4*4 矩阵键盘布局如下,检测按键,然后通过 LCD1602 显示出来
第一行:The key value is
第二行:每按一次键,键值依次显示出来,整行显示完后,清屏,键值
从左开始显示
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
单片机源程序如下:
/**************************************************************************************
* LCD1602液晶显示实验 *
实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define LCD1602_DATAPINS P0
#define GPIO_KEY P1
u8 KeyValue,k=0,n=0,miss=1;
u8 Disp[]="The key value is";
u8 cmy[17]={"1","2","3","/","4","5","6","%","7","8","9","@","*","0","#","="};
u8 dp[17]={" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "};
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
Lcd1602_Delay1ms(10);//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{ n=1;
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测
{
Lcd1602_Delay1ms(1);
a++;
}
}
}
}
void main(void)
{
u8 i,m;
LcdInit();
for(i=0;i<16;i++)
{
LcdWriteData(Disp[i]);
}
while(miss)
{
LcdWriteCom(0x80+0x40);
KeyDown();
if(n==1)
{dp[k]=cmy[KeyValue];
n=0;
k++;
}
for(m=0;m<16;m++)
{LcdWriteData(dp[m]);}
if(k==16)
{ for(m=0;m<16;m++)
{dp[m]=" ";}
Lcd1602_Delay1ms(1000);
LcdWriteCom(0x01);
Lcd1602_Delay1ms(1000);
k=0;
for(i=0;i<16;i++)
{
LcdWriteData(Disp[i]);
}
}
}
}
gitcloud
-
51单片机4×4矩阵键盘仿真哪里找
4*4 矩阵键盘布局如下,检测按键,然后通过 LCD1602 显示出来
第一行:The key value is
第二行:每按一次键,键值依次显示出来,整行显示完后,清屏,键值