uchar keyscantemp = 0xf0;for(i = 0; i < 4; i++)//扫描4次 { P2 = ~(0x01 << i);keyscantemp = P2 & 0xf0;if(keyscantemp != 0xf0)//判断是否有键按下 { delay_s(0.01);//去抖动 P2 =
1、打开keil软件,在工具栏点击Project选项选择new uVision Project创建新的工程并保存,步骤如下图所示:2、创建新的文件,按快捷键“ctrl+s”命名为led.c并保存,步骤如下:3、将创建的51.c文件添加到51项目中,鼠标右
2、LED是不是串联电阻了,而且阻值过大,超过1K。3、LED二极管的元件用错了,哈哈,可能性不大……
//键盘扫描函数 void Scan_Key(void){ P1=0xfe;//PD口(11101111)第1行为低 if((P1&0xf0)!=0xf0)//如果不等于0X0F则有按下 { _delay_ms(10);//延时10MS,去抖 if((P1&0xf0)!=0xf0)//如果TEMP不等于0X
如何用proteus和keil C的仿真实现4*4矩阵键盘控制一个LED灯显示0~F 需要程序和仿真图,谢谢!
如果单片机检测到的是抖动部分,则无法按键判断是否有效,所以我们需要加入防抖程序。注:也可以通过硬件防抖,如上图(b)。功能:矩阵键盘 (按相应的按键,数码管从0~F的显示)单片机:AT89S52 include
当按下启动按钮K1并释放后,数码管显示将会从“60”开始倒计时,每隔一秒减1,此时南北方向开始一直亮绿灯,东西方向一直亮红灯,直到显示为“00”时,数码管将会从“03”开始倒计时,每隔一秒减1,此时南北方向每隔一秒黄灯就闪烁一次,东西
假设矩阵键盘如上图,LED接P1.0,按键用S4 ORG 00H CLR P3.0 STATAR:JB P3.7,CLR P1.0 JNB P3.7,SETB P1.0 SJMP STATAR END
P1=0x0f; //发0扫描,列线输入 if ((P2 & 0x0f) != 0x0f) //有键按下 { delay(20); //延时去抖动 if ((P1&0x0f)!= 0x0f){ sccode = 0xef; //逐行扫描初值 while((sccode&0x01)!=
延时消抖,再读一次,如果还是为0,证明该键动作,貌似你还要坚持按键释放,那就再等待下一个状态,就是从0变1的过程,就执行按键操作,至于驱动LED,这个简单,
图为8051单片机扩展的矩阵式键盘接口,编程实现当k0按下并弹起后LED点亮,
假设矩阵键盘如上图,LED接P1.0,按键用S4 ORG 00H CLR P3.0 STATAR:JB P3.7,CLR P1.0 JNB P3.7,SETB P1.0 SJMP STATAR END
矩阵单片机怎么从矩阵键盘中提取一个按键来实现“按一下键切换一个LED灯亮”
void display();int b0=0x00, b1=0xc0,b2=0x30,b3=0x0c,b4=0x03;sbit S16 = P3^5; //接在P30口的按钮 sbit S15 = P3^4;sbit S14 = P3^6;sbit S13 = P3^7;//有按键控制时要加防抖动处理 void
先写矩阵读取,在写LED的工作模式,调用对应工作模式就好了
1:首先设定一个变量i,可以是从0到3循环的变化,2:再检测一个经过消抖处理的按键,按一下,即i+1 3:当i值为各个值时,执行相应的变换花样。流水灯参考程序 include include define uchar unsigned char uchar j,tmp
P1=0x0f; //发0扫描,列线输入 if ((P2 & 0x0f) != 0x0f) //有键按下 { delay(20); //延时去抖动 if ((P1&0x0f)!= 0x0f){ sccode = 0xef; //逐行扫描初值 while((sccode&0x01)!=
//0xfe = 1111 1110,//说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case 0xfd:P0=dofly_table[2];LED1=0;break;//调用表中的第三个//元素 0xa4 下标 0 才表示数组中的第一个元素case 0xfb:P
define uchar unsigned charconst tab[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d};const uchar led[]={0x01,0x01,0x04,0x08,0x10,0x20,0x40,0x80};void delay(){ uchar i;for(i=0;i<10;i++){;
用52单片机的4x4矩阵键盘的前八个键分别控制8个LED灯
八个灯接在单片机的P1口(P0,P2,P3,P4都一样)while(1){ delay(你想要延时的时间);P1=0xff;delay(你想要延时的时间);P1=0;} 注意led最好加驱动,不然单片机会坏的。
//0xfe = 1111 1110,//说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case 0xfd:P0=dofly_table[2];LED1=0;break;//调用表中的第三个//元素 0xa4 下标 0 才表示数组中的第一个元素case 0xfb:P
switch(P1){ case 0xfe:P0=0x01;break;case 0xfd:P0=0x02;break;case 0xfb:P0=0x04;break;case 0xf7:P0=0x08;break;case 0xef:P0=0x10;break;case 0xdf:P0=0x20;break;case 0xbf:P0=0x40;break;case 0x
八个按键可以用00-ff表达就是说如果按键为P2的话就可以P2=0x00此时无按键输出,0x01为第一个按键按下。但是要按照具体的外围情况来写 switch(local){ case 0:P2=0x01;P3=0x01;break;case 1:P2=0x02;P3=0x02;bre
void delay(unsigned int a){ unsigned int i,j;for(i=0;i
单片机中用矩阵键盘的8个按键分别控制8个LED,当按下时亮,松手时灭,用switch语句
为了去除按键抖动.因为机械是非常灵敏的,对于人来说,按键有两个状态 ,松开和按下,但是在两个即将触碰到的瞬间,电气设备会产生抖动结果就是设备感觉你非常快的按下松开按下松开.这可能造成你的软件错误.比如你按下按键,有一个变量就自增1,而抖动会让你感觉你按下了一次但是变量自增了N次. 延时是为了使机器在按键抖动的时候不去做任何响应从而去除按键抖动.而这个延时人是感觉不出来的.四个按键,定义如下: KEY1 BIT P3.0 KEY2 BIT P3.1 KEY3 BIT P3.2 KEY4 BIT P3.3 按键处理程序: ;----------------------------------- READ_KEY: JB KEY1, K2 CALL DELAY JB KEY1, K2 JNB KEY1, $ PUSH ACC INC 75H MOV A, 75H CJNE A, #10, ZINT01 MOV 75H, #0 ZINT01: POP ACC JMP K_EXIT ;--------------- K2: JB KEY2, K3 CALL DELAY JB KEY2, K3 JNB KEY2, $ PUSH ACC INC 76H MOV A, 76H CJNE A, #10, ZINT01 MOV 76H, #0 ZINT01: POP ACC JMP K_EXIT ;--------------- K3: JB KEY3, K4 CALL DELAY JB KEY3, K4 JNB KEY3, $ PUSH ACC DEC 75H MOV A, 75H CJNE A, #255, ZINT03 MOV 75H, #9 ZINT03: POP ACC JMP K_EXIT ;--------------- K4: JB KEY4, K_EXIT CALL DELAY JB KEY4, K_EXIT JNB KEY4, $ PUSH ACC DEC 76H MOV A, 76H CJNE A, #255, ZINT04 MOV 76H, #9 ZINT04: POP ACC K_EXIT: RET ;--------------- DELAY: DJNZ R7, $ DJNZ R7, $ RET ;-----------------------------------
#include #define uchar unsigned char 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 ((P1&0x0f)!= 0x0f) { sccode = 0xef; //逐行扫描初值 while((sccode&0x01)!=0) { P1=sccode; if((P1&0x0f)!=0x0f) { recode=(P1&0x0f)|0xf0; return((~sccode)+(~recode)); } else sccode=(sccode<<1)|0x01; } } } P0=0xff; return 0; //无键按下,返回0 } main() { unsigned char key; while(1) { key=kbscan(); switch(key) { case 0x11:P0=0xfe;break; case 0x12:P0=0xfd;break; case 0x14:P0=0xfb;break; case 0x18:P0=0xf7;break; //+ case 0x21:P0=0xef;break; case 0x22:P0=0xdf;break; case 0x24:P0=0xbf;break; case 0x28:P0=0x7f;break; //- default:break; } } }
[已完成!]电路图如下, #include #include unsigned char code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};void delay_ms(unsigned int ct) //延时{unsigned int t,i;for(i=0;i<ct;i++){t=115;while(--t);}} void main(void){// Write your code hereunsigned char ct=100;while (1) //主循环{switch(P1) //P1口作为独立按键输入端,检测端口电平并做如下判断{case 0xfe:P0=dofly_table[1];LED0=0;break;//0xfe = 1111 1110,//说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case 0xfd:P0=dofly_table[2];LED1=0;break;//调用表中的第三个//元素 0xa4 下标 0 才表示数组中的第一个元素case 0xfb:P0=table[3];LED2=0; break;case 0xf7:P0=table[4];LED3=0;break;case 0xef:P0=table[5];LED4=0;break;case 0xdf:P0=table[6];LED5=0;break;case 0xbf:P0=table[7];LED6=0;break;case 0x7f:P0=table[8];LED7=0;break;default:break; //如果都没按下,直接跳出}//主循环中添加其他需要一直工作的程序}} //如果帮到你的话,点一个赞吧!硬件电路工程师-帝国卫兵Tt
键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。 标准计算机键盘共104键,除26个字母键、符号键、数字键外,下面来介绍一下键盘常见按键的功能: 首先将电脑键盘分区: 一、功能键区: 1、ESC退出键:关闭当前窗口。 2、F1帮助键:打开当前应用程序的帮助窗口。 3、F2重命名:选中一个文件或文件夹点击F2快速重命名。 4、在桌面上按F3可打开搜索窗口。 5、F4打开浏览器地址栏列表。 6、F5刷新当前页面。 7、F6快速定位到地址栏。 8、F7在Windows中没有作用。 9、F8启动Windows系统时,显示启动菜单。 10、F9在Windows Media Player中减小音量 11、F10激活Windows或程序中的菜单、在Windows Media Player中加大音量 12、F11使当前资源管理器或浏览器变为全屏显示 13、F12在Word中可以快速打开另存为窗口 二、主键盘区: 1、Tab制表 2、Caps Lock大小写锁定 3、Shift上档 4、Ctrl控制 5、Ctrl右边的是窗口开始键 6、Alt换挡 7、右Ctrl左边的那个键相当于鼠标右键 8、此外还有字母键、数字键、符号键、空格键以及回车键 注: 1、下图区域的按键有两层,上层符号需按住Shift键来使用 2、Windows窗口键:打开开始菜单 3、Windows+D可以快速切换到桌面 三、编辑键区: 1、Print ScreenSysRq屏幕硬拷贝键(全屏截图键) 2、Scroll Lock滚动锁定键 3、Pause Break暂停或中断键 4、Insert插入字符开关键 5、Home起始键 6、Delete 删除 7、END 将光标移动到编辑窗口或非编辑窗口的第一行的最后字上 8、Page UP和Page Down:上下翻页 10、上下左右键 四、数字键符号键与主键盘区完全一致 1、NUM LOCK切换小键盘的数字键与方向键
if语句就可以了,但是感觉你这样每次按下的按键个数不一样,可能会有点混乱。应该能实现的。自学就自己搞吧,别人给了复制粘贴就可以了,呵呵。依据你给的按键顺序重点在判断第三个按键
我这里用的是按键,,不知道你说的开关是不是按键,,要不是我再重新编 #include #define uint unsigned int #define uchar unsigned char sbit led=P1^6 ; // 控制LED的口 sbit key=P1^0; // 按键状态检测口 void delay(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { uint a=0; key=1; led=1; if(key==0) { delay(5); if(key==0) a++; while(!key); delay(5); while(!key); } if(a==1) { while(key!=0) { led=0; delay(1000); led=1;} led=1;a=0; } else led=1; }
我有的的,很全的,51的板子有你想要的矩阵键盘,想要的话你得把你的邮箱给我啊
电路图做好了吗 按照你的图写吧 可以发给我