i;while(1) { led=0xfe; for(i=0;i<8;i++) //左到右点亮 { P0=led; led=(led<<1)
delay();LED_IO8= 0;delay();} //开始灯全灭 void LED_dengmie(void){ LED_IO1 = 1;LED_IO2 = 1;LED_IO3 = 1;LED_IO4 = 1;LED_IO5 = 1;LED_IO6= 1;LED_IO7= 1;LED_IO8= 1;} main(){
P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。
P1口接8个LED灯,P3口接4个按键K1~K4 ,用于控制流水灯的四种效果,仿真图如下。
用51单片机写程序,4个按键控制8个小灯切换四种灯光效果?
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语句
乘4矩阵键盘输入数码管显示四位数_数学_自然科学_并用数码管显示设定值,可以 通过按键来更换显示内容
要求没汁出4*4矩降键諡寸某一按键按下就在教碣管并示一へ教字。按键从左上角到右下角依次わ1,2,·,16。4(実强原理 按键模抉原理 键盏ね描的実现辻程如下:対チ4X4键盏,通常达接ゐ4行、4列,因此妥沢别按
那就选择数码管吧,假设矩阵键盘连P1口,数码管连P0口,上电后数码管显示0,然后3*3键盘控制显示1~9,程序c语言如下:/***扫描法监测键盘,显示按键数值。我的板子是4*4的,所以没调试,有不对的地方我再给你调我看
1、结构不同:动态数码管由7个或8个LED灯组成,可以显示1至8位的数字。4乘4矩形键盘由16个LED灯组成,可以显示0至9的数字和A至F的字母。2、显示方式不同:动态数码管的显示方式是通过控制每个LED灯的亮灭状态来显示数
动态数码管显示1-8和4×4矩形键盘显示
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灯
#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 ;-----------------------------------
你首先要确定你的电路。选择什么单片机和数码管,8个按键最简单8个IO口控制。一般简单的是用三极管驱动数码管。如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面试验,8个就可以类推)\r\n\r\n1、初始值为0:上电复位后,单片机驱动数码管显示0.(如果不会,百度里搜51控制数码管等关键字,特别多试验电路和程序。)\r\n2、按第一个键:原理就是按键中断,直接跳到中断程序里,中断程序就是显示12345678(程序里是二进制码,单片机只认识0和1)。\r\n3、数码管移动显示,其实就是data脚的数据给的不一样,这个地方注意延时,你可以尝试改变延时时间看看效果。\r\n4、同3;\r\n5、12345678和ABCDEFGH的二进制码不同而已;\r\n6、同5.\r\n7、数码管全亮就相当于给data脚全为高(或者为低),和电路有关。\r\n8、同7.\r\n9、点阵显示按键键号。(数码管有小数点,只是也是一个data脚而已)\r\n\r\n----------------------------------------------------------------------自己多去百度找找学学,对个技能还是有点用的。
要控制LED灯的亮度,应采用PWM方式,对实物控制可以实现,仿真效果出不来。