/ ***
*矩阵键盘控制数字电子管显示
*顺序:按键为4 * 4矩阵键盘,左上角为1号,水平排列
*数字管的单芯片P0 ^ 0-P0 ^ 7引脚控制
*矩阵键盘界面:
* 1. MCU的P1 ^ 0接口连接到第四列的右端
* 2. MCU的P1 ^ 1接口连接到第三列的右端
* 3.
smgxs(); //使用数字管显示键的编号,如果未按下键,则显示键的初始值(0 0)
}
}
void ajpd(void)
{
int hang = -1,lie = -1; //存储按钮的行和列
P1 = 0X0F; //将高电平发送到矩阵键盘的列,将低电平发送到行,首先确认按下的列
if(P1!= 0X0F)//如果按下按钮(下拉高电平)
{
delay(400 0); //去抖动
if(P1!= 0X0F)//再次判断是否按下
{
开关(P 1) //判断P1的状态(矩阵键盘界面)(按下哪一列(将高电平拉低))
{
case 0x0E:lie = 4; break; //按下第四列(P1 ^ 0接口电平被拉低)
case 0x0D:lie = 3; break; //按下第三列(下拉P1 ^ 1接口级别)
case 0x0B:lie = 2; break; //按下第二列(P1 ^ 2接口电平被拉低)
case 0x07:lie = 1; break; //按下第一列(下拉P1 ^ 3接口级别)
}
P1 = 0XF0; //确认按下的列后,将高电平发送到矩阵键盘的行,然后该列发送低电平以确认按下了哪一行
if(P1!= 0XF 0) //如果按下按钮
{
开关(P 1) //判断P1的状态(矩阵键盘界面)(按下该行(将高电平拉低))
{
情况0xE0:挂起= 4;中断; //按下第四行(下拉P1 ^ 4接口级别)
情况0xD0:挂起= 3;中断; //按下第三行(下拉P1 ^ 5接口级别)
情况0xB0:挂起= 2;断开; //按下第二行(下拉P1 ^ 6接口级别)
情况0x70:挂起= 1;中断; //按下第一行(下拉P1 ^ 7接口级别)
}
}
}
}
while(((P1!= 0xF 0) &&(P1!= 0X0F));; //等待按钮放开
if(lie!= -1 && hang!=-1) //如果列和行包含数据(被认为是完整的按键操作)
{

key = lie +((hang- 1) * 4); //将按钮的行和列转换为数字并将其分配给key(column +(row- 1) * 4)( 4 * 4矩阵键盘的第一列+上方的行数*上方的每一行数
}
}
void smgxs(void)//数字管的最后两位显示按钮的值
{
/ *显示最后一个数码管(一位)* /
YMQA = 0; //将数据发送到的A引脚以选择数字管的最后一个数字管
YMQB = 0; //将数据发送到的B引脚以选择数字管的最后一个数字管
YMQC = 0; //将数据发送到的C引脚以选择数字管的最后一个数字管
P0 = smg [key]; //将数据发送到端口P0(控制数字管显示字符)以显示密钥的值(单位)
delay(5); //为了便于观察而延迟(延迟后,数码管的亮度会增加)
P0 = 0X00; //数字管消隐(当同时显示多个数字管而没有消隐时,它们将互相干扰)
/ *显示倒数第二个数码管(十位数)* /
YMQA = 1; //将数据发送到的A引脚并选择倒数第二个数码管
YMQB = 0; //将数据发送到的B引脚并选择倒数第二个电子管
YMQC = 0; //将数据发送到的C引脚并选择倒数第二个电子管
P0 = smg [key / 10]; //将数据发送到端口P0(控制数字管显示字符)以显示key / 10(十位数字)的值
delay(5); //为了便于观察而延迟(延迟后,数码管的亮度会增加)
P0 = 0X00; //数字管消隐(当同时显示多个数字管而没有消隐时,它们将相互干扰
}
无效延迟(int a)//延迟功能
{
int i;
for(i = 0; i}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-357410-1.html
真实
在几个小时的交锋中就采取撞击等升级事态的行动
美国这么无赖那么咱们就应该更加坚定的造岛
不动武就惊跑了美帝