导航:首页 > 操作系统 > 单片机矩阵

单片机矩阵

发布时间:2022-04-11 11:26:32

单片机c语言矩阵

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
};
uchar code KeyCodeTable[]=
{
0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
};

void Delay() //延时,不用多说,延时时间600us左右
{
uchar i;
for(i=0;i<200;i++);
}

uchar Keys_Scan() //键盘扫描程序
{
uchar sCode,kCode,i,k;
P1 = 0xf0; //P1低四位置零
if((P1&0xf0)!=0xf0) //读高四位数据,根据高四位是否有零判断是否有键按下
{
Delay(); //若有键按下,延时,去抖动
if((P1&0xf0)!=0xf0) //再次判断是否有键按下,防止上一步是误判断
{
sCode = 0xfe; //确实有键按下,准备读键值
for(k=0;k<4;k++) //4*4矩阵键盘,需要扫描四次
{
P1 = sCode; //行线最低位置零
if((P1&0xf0)!=0xf0) //判断第一行是否有键按下
{
kCode = ~P1; //若有键按下,读键值
for(i=0;i<16;i++) //键值总共会有16种可能情况
{
if(kCode == KeyCodeTable[i]) //读键值表,判断是几号键按下
return i; //返回按键编号
}
}
else
sCode = _crol_(sCode,1); //若第一行没有键按下,循环左移一位,扫描第二行
}
}
}
return -1; //若没有键按下,返回错误值
}

void main()
{
uchar KeyNO = -1;
uchar i,P2_LED,P3_LED;
while(1)
{
KeyNO = Keys_Scan(); //扫描键盘
if(KeyNO != -1) //有键按下
{
P2_LED = 0xff; //显示清零
P3_LED = 0xff;
for(i=0;i<=KeyNO;i++) //显示程序,16个LED对应16个按键,一一对应,根据按键编号显示对应LED
{
if(i<8)
P3_LED>>=1;
else
P2_LED>>=1;
}
P3 = P3_LED;
P2 = P2_LED;
}
}
}

这是程序是一个按键扫描程序,P1口接4*4矩阵键盘,P2,P3分别接8个LED,灌电流点亮,每个按键对应一个LED,每按下一个键,相应的LED便被点亮

DSY_CODE 这个数组是4位8段数码管的码表,码表上看是共阳数码管,对应数码管显示1-f,最后一个是全亮;
KeyCodeTable 是4*4矩阵键盘的键值,4*4矩阵键盘每按下一个键,有两位被拉低,取反就是有两位置高,这两位一位位于低四位,一位位于高四位,所有总共有16种情况
建议你看一看51单片机的书,里面矩阵键盘跟数码管讲得很清楚

㈡ 用51单片机矩阵如何写程序

矩阵键盘吗?,这是4*4矩阵键盘扫描程序,10毫秒扫描一次,用定时器1控制:
void t1isr() interrupt 3
{
unsigned char sccode,recode;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P3=0x0f; //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f)keynum++; //有键按下
else keynum=0;
if(keynum>5) //按键保持在5次中断以上
{
keynum=0;
sccode = 0xef; //逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
getkey((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
getkey(0);
}

㈢ c51单片机如何用矩阵实现菜单功能

在完成实现菜单功能,需要在单片机的连接输入时,更改一下驱动处理的芯片参数。
参数设置为矩阵模式,应用相关数据函数完成。

㈣ 单片机矩阵当中第二行的十六进制怎么表示

单片机的数据(或者是c程序)里面经常出现一些字母(例如0xff)表示一个字节的数据,你如果想表示两个字节,也就是16位数据的时候就直在0x后跟四个字母(16进制的话,必须是0~9,a~f范围内)就好了。例如variant
=
0xffff,就表示variant的16个bit全部置1。

㈤ 51单片机按键矩阵4X4求指点 不明白他是啥意思

P3端口4根线(高4位)作为输入,另4根线作为输出,作为输入的4根线输出为1(51单片机引脚作为输入时先写1),如果去读取结果当然为1,但有按键接在上面和4根输出线相连,并且这4根输出线轮流输出低电平,有按键按下时,这个低电平就传到了输入引脚,这时你读这4个引脚的状态,就不全是1了,根据哪个引脚是0就可以区分4个按键,4个输出口轮流输出0,就可以识别16个按键
4根输出线每次只有一个是0,因此化成16进制只能是0x07 0x0b 0x0d 0x0e这些数,由于一次只有一个按键按下,因此高4位中也只能有一个0,最终只有16种状态是合法的如
0x77 0x7b 0x7d 0x7e 0xb7 0xbb 0xbd 0xbe……其它状态不可能出现,出现也是非法的(因为干扰或者同时按了两个键),我们把这16个对应的状态编上号,称为0 1 2 3……,这就是键值

㈥ 51单片机矩阵按键

首先记住,你的是矩阵键盘,就是说一个按键a的一端接单片机的一个脚(假设p00),另一个也接一个脚(假设p07),
gpio_key=0x0f;
当没有按下的话,gpio_key还是等于0x0f的,假设按下a按键,由于按键两边一个接高电平,一个接低电平,按下后,高电平被低电平拉成低电平,也就是说按键a两侧都是0,此时不就可以判定了嘛

㈦ 单片机如何控制矩阵型LED灯的亮灭。

这个你要看原理图。流水灯的控制是通过单片机p口接上595芯片来驱动,软件实现移位实现流水灯现象
具体的步骤:
1:画出你的原理图,最小系统,外加led,595芯片
2:些软件程序,通过keil编译并下载到你的单片机
3:观测效果
具体的程序根据你的原理图
可以参考《吴鉴鹰单片机项目实战精讲》里面关于摇摇棒的设计

㈧ 为什么单片机矩阵按键中低电平有效

这是跟单片机的具体电路有关,不同的信号或者不同的单片机结构不一样,信号的有效电平也就不一样,但有些信号已成标准,比如片选,大多数芯片的片选信号都是低电平有效,自然很多单片机厂商也把单片机的某些信号设计成低电平有效。而且一般io的灌电流(低电平时)比拉电流(高电平时)大得多,所以低电平有效时驱动能力就强

㈨ 谁能给我讲明白单片机的4x4矩阵键盘工作原理

给P1赋值0xf0,这时P1^4,P1^5,P1^6,P1^7为高电平,P1^0,P1^1,P1^2,P1^3为低电平。如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。因此P1的值就不等于0xf0,这是就可以判断有按键按下。

4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,通过读入输入线的状态就可得知是否有键被按下。

(9)单片机矩阵扩展阅读:

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

㈩ 单片机矩阵按键扫描为什么用if判断两次

好好看书,这是延时消抖,按键刚按下时会有一个不稳定过程,似接非接,会出现高低电平的几次跳变,如果只检测一次低电平就认为按键按下了,会出现两种情况,一是按一次被当作多次,二是某些偶尔的干扰也可能被当作按键按下。延时10到20ms,真正按下按键就稳定了,如果是干扰第二次判断不可能仍是低电平。

阅读全文

与单片机矩阵相关的资料

热点内容
党员对程序员有帮助么 浏览:544
慢跑穿压缩衣还是紧身衣 浏览:210
什么服务器引擎最好 浏览:495
日立制冷压缩机 浏览:775
抖音绑定了别的app怎么解绑 浏览:552
主流使用算法 浏览:866
mysql恢复数据库命令 浏览:807
pubg国际服怎么注册安卓 浏览:77
清华大学爱德华程序员 浏览:167
android60vmware 浏览:358
民生证券app怎么看炒股收益 浏览:236
绿盾加密怎么重装系统 浏览:493
python二进制数字 浏览:630
五笔教程pdf 浏览:893
智能卡的椭圆加密算法 浏览:324
负数的源码如何得出 浏览:560
只有一个服务器怎么查数据 浏览:953
python为什么不用定义变量 浏览:235
文件夹后退以后消失了 浏览:148
金主文bl压缩包百度云 浏览:704