KEY=1; //按键输入端口电平置高 while (1) //主循环 { if(!KEY) //如果检测到低电平,说明按键按下 LED=0;else LED=1; //这里使用if判断,如果按键按下led点亮,否则熄灭 //上述4句可以用一句替代 LED=

while(1){ P1=0xfe; //点亮第一个LED for(i=200;i>0;i--)for(j=500;j>0;j--);P1=0xfd; //点亮第二个LED for(i=200;i>0;i--)for(j=500;j>0;j--);P1=0xfb; //点亮第三个LED for

1:首先设定一个变量i,可以是从0到3循环的变化,2:再检测一个经过消抖处理的按键,按一下,即i+1 3:当i值为各个值时,执行相应的变换花样。流水灯参考程序 include include define uchar unsigned char uchar j,tmp

一种是采用8行8列组成的按键就可以了,实际上是16个开关,但可以实现64个按键。具体的看看网上的4*4键盘是什么原理。基础要自己想。第二种是采用8255或8155扩展,具体的要自己去看去学。

单片机键盘显示电路设计的程序要求输入64个按键,8个LED显示

const uchar led[]={0x01,0x01,0x04,0x08,0x10,0x20,0x40,0x80};void delay(){ uchar i;for(i=0;i<10;i++){;} } void keyscan(){ uchar a,b,c,i;P3=0x0f;a=P3;delay();P3=0xf0;b=P3;delay

八个灯接在单片机的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语句

先写矩阵读取,在写LED的工作模式,调用对应工作模式就好了

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灯

用汇编写这个容易点 main: mov a,#0feh mov r0,#8 loop: mov p1,a acall delay rl a djnz r0,loop delay:mov r6,#0ffh loop1: mov r7,#01h djnz r7,djnz r6,loop1 ret end 好像是这样,延迟时间可能不

假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<>i;delay_ms(500);} } }

while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六

while(1){ for(i=0;i<7;i++){delay(100);LED = (LED<<1)|0x01;P3 = LED;} for(i=0;i<7;i++){delay(100);LED = (LED>>1)|0x80;P3 = LED;} } } 汇编语言 LEDEQU 30H ORG 0000H LJMP MAIN

3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。

while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);p0=0xff;DelayMS(150);

单片机用汇编做一个控制8个LED灯泡从左到右依次点亮,最后全部亮,再全部熄灭后重复前面的过程

#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
为了去除按键抖动.因为机械是非常灵敏的,对于人来说,按键有两个状态 ,松开和按下,但是在两个即将触碰到的瞬间,电气设备会产生抖动结果就是设备感觉你非常快的按下松开按下松开.这可能造成你的软件错误.比如你按下按键,有一个变量就自增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 ;-----------------------------------
07几班的兄弟
这个你找个例程就可以了。参考如下链接。 网页链接