51单片机矩阵按键程序
开发板具体型号我忘了。
上面有一个4*4的矩阵按键
可以通过程序来实现当依从左向右从上到下的次序按下时,第一个数码管显示0~15的十六进制数。下面就说一下具体实现
下述为程序: #include reg51.h#define Keyvalue P1 //按下的键的代号#define Digvalue P0 //用宏定义来定义一下数码管的发送数据端口typedef unsigned int ut;typedef unsigned char uc;ut k;sbit LSA=P2^2; //定义三八译码器的三个输入端口sbit LSB=P2^3;sbit LSC=P2^4; ut smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//从0~15的十六进制编码void delay(ut i) //延时函数{while(i)i--;}void anjian() //检测按键是否按下,若按键按下则给k附上按下的键的序号{ut a;Keyvalue=0x0f;if(Keyvalue!=0x0f){delay(1000);if(Keyvalue!=0x0f){Keyvalue=0x0f;switch(Keyvalue){case(0x07):k=0;break;case(0x0b):k=1;break;case(0x0d):k=2;break;case(0x0e):k=3;break;}Keyvalue=0xf0;switch(Keyvalue){case(0x70):k=k;break;case(0xb0):k=k+4;break;case(0xd0):k=k+8;break;case(0xe0):k=k+12;break;}}}while((a50)(Keyvalue!=0x0f)){delay(1000);a++;}}void main(){LSA=0; //让第一个数码管显示数字LSB=0;LSC=0;while(1){anjian();Digvalue=smgduan[k];//显示数字}}
写了个单片机矩阵按键控制数码管显示数字的程序,只需要显示0到9就好...
wei=1; \/\/第一个数码管点亮 P0=table[d];} void main(){ uchar v,temp;uchar key_l,key_h;\/\/ 定义列和行 uchar key;while(1){ P2=0xf0;temp=P2;temp=temp&0xf0;if(temp!=0xf0) \/\/检测到有按键按下 { delay(10);\/\/消抖 if(temp!=0xf0)\/\/再次确认一下有否真的有按下 {...
单片机 1602lcd 矩阵按键显示程序 按
是要仿真的矩阵按键吗,proteus 中一个计算器用的矩阵按键,很漂亮,如下图所 示。
单片机的c语言:判断矩阵键盘被按下:P1=0xfe;while(P1!=0xfe){延时,判...
硬件没问题到可以最好加个中间变量 。第一步先给矩阵赋值将一线拉低即:P3=0xFE; \/\/ 1111,1110 第二步再给读口即:temp=P3;第三步取:取高4位;temp&=0xF0;第四步:判断是否有按键,有按键按下进入按键循环,没有就退出,一般用if就行了。第五步:延时10ms 第六步接着第一步,到第...
单片机学习day7—独立按键 & 矩阵按键
另一方面,矩阵按键的使用涉及到多个按键的组合,接线图和代码实现通常更为复杂。矩阵按键的处理通常需要扫描按键矩阵,识别每个按键的准确位置,这涉及到了解矩阵的结构和相应的逻辑处理。矩阵按键的接线图和代码设计是单片机编程中的一大挑战,需要精确的逻辑设计以确保每个按键输入的正确识别。具体细节需要根据...
单片机矩阵键盘不同次数实现不同功能
设置一个按键,根据按下按键的次数,实现不同功能。比如一次实现功能1,二次实现功能2,实现方法是定义一个按键次数计数器变量,然后根据这个变量的值进行散转:unsigned char key=0;\/\/有按键时自加1 switch(hwjs){ case 1:功能1 break;case 2:功能2 break;case 3:功能3 break;default:break;} ...
如何在矩阵按键中一个按键按下后使51单片机中断中的num清0,清零后num...
很简音进入中断程序后先做一下键盘扫描(key_scan()),如果指定的某个按键((key_scan(1))被按下则将mum清零。键盘扫描程序你可以自已完成啦!另外你还须注意中断程序和进入中断后的设置。void timer0()interrupt 1 { if(key_scan());else if(key_scan(1))mum=0;TH0=(65536-2304)\/256; ...
单片机,矩阵键盘:麻烦哪位大侠帮我看看,我这下面的程序有什么问题...
else if(temp==0x02)key=key+4;else if(temp==0x04)key=key+0;return key;} main(){ int i;while(1){ i=Keyscan();P0=LED[i];\/\/i=0;} } 你这个程序里,按键没有去抖,若按一个键后,手还须多按一会儿,要不就不显示,所以你还要好好改改这个程序,你那个扫描按键的函数想的很好,...
51单片机矩阵多个按键同时按下如何写程序
用数组啊,如果是指定位数的就比较简单 当第一次输入时i=0,第一个数6放a[0],i=1,第二个数7放a[1],显示就是 OUT= a[0] * 10 + a[1] * 1 数组用之前初始化为0,a[2] = {0} \/\/这个好用点,递推if(key_data)\/\/有按键按下{ for(i = key_count ;i>0;i--;)...
矩阵键盘这个代码不懂了,
其次,行列键盘扫描,一般都要求输出列加入上拉电阻,虽然单片机内部至有上拉电阻。然后说到程序,这个程序如果在实际应用中,肯定会出现串键现像的。这个就不提了。再说算法,最简单的做法应该是,像使用动态数码管一样,先输出一行,读取全列,可以得到4个键值,再输出一行,同样读取全列,如此循环。vo...
51单片机矩阵键盘程序:想把按键的值一一存到数组里,最后按下某个按键...
给一个键盘扫描程序参考:void delay(unsigned int a){unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);}uchar kbscan(void){unsigned char sccode,recode;P1=0x0f; \/\/发0扫描,列线输入if ((P2 & 0x0f) != 0x0f) \/\/有键按下{delay(20); \/\/延时去抖动if (...
德卖田七: 用数组啊,如果是指定位数的就比较简单 当第一次输入时i=0,第一个数6放a[0],i=1,第二个数7放a[1],显示就是 OUT= a[0] * 10 + a[1] * 1 数组用之前初始化为0,a[2] = {0} //这个好用点,递推 if(key_data)//有按键按下 {for(i = key_count ;i>0;i--;){a[i+1] = a[i];}a[0] = key_data;key_count ++;} //显示调用,根据你的输入最大数定数组的位数Sprint = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0] * 1 ;
澄城县18754805881: C 51单片机 矩阵按键 - ?
德卖田七: 首先记住,你的是矩阵键盘,就是说一个按键A的一端接单片机的一个脚(假设P00),另一个也接一个脚(假设P07), GPIO_KEY=0x0f; 当没有按下的话,GPIO_KEY还是等于0x0f的,假设按下A按键,由于按键两边一个接高电平,一个接低电平,按下后,高电平被低电平拉成低电平,也就是说按键A两侧都是0,此时不就可以判定了嘛
澄城县18754805881: 51单片机矩阵按键 - ?
德卖田七: i=keyscan(); delay(50); while(i==keyscan());
澄城县18754805881: 51单片机怎么用矩阵键盘让数码管加一减一,就是每两个键盘控制一个数 - ?
德卖田七: #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit key1=P1^0; sbit key2=P1^1; uchar num=0; //共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77}; void Delay1ms(uint i) //1...
澄城县18754805881: 89c51单片机4*4矩阵键盘编程. - ?
德卖田七: PANDUAN: MOV P1,#0FFHCLR P1.4MOV A,P1ANL A,#0FHXRL A,#0FHJZ SW1LCALL DELAY10MSJZ SW1//确认有键按下,但不知道哪个,此时可以之间让蜂鸣器叫 MOV P3.0,#1//蜂鸣器发声(赋1还是赋0取决你用的蜂鸣器)...
澄城县18754805881: 51单片机 如何4*4矩阵键盘输入按键 继电器输出信号 - ?
德卖田七: ........... Inter0_process() interrupt 2 //外部中断1 { Key_scan();//你的键盘扫描程序(中断服务程序),一旦触发中断,将运行至本段. } //主程序main() {........... ........... ........... EX1=1; //开中断一 P3.3 IT1=1; //下降沿触发 ET1=1; EA=1;........... ...........} 注:图中的键盘接法都是独立按键接发,矩阵键盘没有见过能直接触发中断的.
澄城县18754805881: 51单片机做矩阵键盘,定义四个键,其中一个确认键,要求按下确认键时才显示之前按下的键... - ?
德卖田七: 之前按下的按键数值保存在变量里面,当检测到按下确认键的时候再把之前的按键数值取出来显示.
澄城县18754805881: 怎么样用C语言写51单片机4*4矩阵按键使之响应? - ?
德卖田七: 这个是键盘函数,你参考一下,网上也有很多资料的 uchar keyscan() { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:num=1; break; case 0...
澄城县18754805881: 51单片机控制矩阵键盘,谁能帮帮我?
德卖田七: 我的想法,仅供参考.可以定义“确定”键:比如,输入2345,或者123圈后,点击确认,才会执行.定义按键计数器“a”,每次按键一次自加 1 ,如果有确定键按下,根据按键计算器数值进行加权运算.例如,输入“1”“2”“3”“4”“确认”此时“a=4”那么加权就是 圈数 “j=1x10^3+2x10^2+3x10^1+4x10^0”“或者定义数组key 存放按键数字,然后用for(i=0;i<=a;i++){ j=key注:如果觉得浪费键盘资源.可以用定时器,定义不再按键2s后,自动确认什么的.撸主自己选择.仅供参考
澄城县18754805881: 80c51单片机的矩阵键盘检测,按键释放代码要怎样写?谢谢. - ?
德卖田七: 注意:);//!!!注意通过这个循环判断是否松开该键 进一步交流进我空间 /*------------------------------------------------按键扫描函数,返回扫描键值 ------------------------------------------------*/ unsigned char KeyScan(void) //键盘扫描函数,使用行列逐级扫...