做景观要用的植物网站,实业公司网站模板,公司建立网站的好处,wordpress如何去除分类文章目录 前言一、5.3开关检测1.1没按键按下的1.2有按键按下的 二、改进1.改进 三、独立键盘3.1为什么要取反3.2 实用的按键 总结 前言
提示#xff1a;这里可以添加本文要记录的大概内容#xff1a;
课程需要#xff1a; 提示#xff1a;以下是本篇文章正文内容#xf… 文章目录 前言一、5.3开关检测1.1没按键按下的1.2有按键按下的 二、改进1.改进 三、独立键盘3.1为什么要取反3.2 实用的按键 总结 前言
提示这里可以添加本文要记录的大概内容
课程需要 提示以下是本篇文章正文内容下面案例可供参考
一、5.3开关检测 unsigned char temp; /*定义临时变量temp*/P10xff; /* P1口低4位置1作为输入;高4位置1发光二极管熄灭*/temp P10xf0; /*读P1口并屏蔽低4位送临时变量temp */temp temp 4; /* temp的内容右移4位P1口高4位状态移至低4位*/P1 temp; /* 临时变量值写入P1口输出*/
// P1 0XF0|(P14); /* 临时变量值写入P1口输出*/delay( );1.1没按键按下的
1111 1111 P1: 1111 1111
1111 0000 temp1111 0000
0000 1111 temp 0000 1111
0000 1111 P1: 0000 1111
delay( ); 1.2有按键按下的
xxxx 0000 -1111 中的可能
1111 1111 P1: 1111 1111
xxxx 0000 1111 0000 tempxxxx 0000
0000 xxxx temp 0000 xxxx
0000 xxxx P1: 0000 xxxx
delay( ); 二、改进
改进的思路 1.改进
代码如下示例
P1 0XF0|(P14); /* 临时变量值写入P1口输出*/在这里插入代码片三、独立键盘 有按键按下读回来就是0 反之 读回来就是1
3.1为什么要取反 #includereg51.h
void key_scan(void)
{ unsigned char keyval do{P10xff; // P1口为输入keyvalP1; //从P1口读入键盘状态keyval~ keyval; //键盘状态求反switch(keyval){case 1: ……; //处理按下的k1键“……”为处理程序 break; //跳出switch语句case 2: ……; //处理按下的k2键break; //跳出switch语句case 4: ……; //处理按下的k3键break; //跳出switch语句case 8: ……; //处理按下的k4键break; //跳出switch语句case 16: ……; //处理按下的k5键break; //跳出switch语句case 32: ……; //处理按下的k6键break; //跳出switch语句case 64: ……; //处理按下的k7键break; //跳出switch语句case 128: ……; //处理按下的k8键break; //跳出switch语句default:break; //无按下键处理 }} while(1);
}3.2 实用的按键 while (1){if(key00){led00; num; }else{ led01; }if(num0){ //灯1P30X00;}else if(num1){//灯2P30X01;}else if(num2){//灯3P30X02;}}
问题1num 没有清0 255 才自己变0很久手动清0 while (1){if(key00){led00; num; }else{ led01; }if(num0){ //灯1P30X00;}else if(num1){//灯2P30X01;}else if(num2){//灯3P30X02;}else{num0;}}
问题2按键还是不灵 while (1){if(key00) { delay();//按键消抖if(key00){while(key00);led00; num; }else{led01; }}if(num0){ //灯1P30X00;}else if(num1){//灯2P30X01;}else if(num2){//灯3P30X02;}else{num0;}}问题3 按键松开灯不灭 led00; //将灯一直到循环上面while(key00); #include reg51.hsbit led0 P1^0;
sbit key0 P2^0;unsigned char num0;
#define uchar unsigned charvoid delay( )
{ uchar i,j;for(i0; i255; i)for(j0; j255; j);
}/*1111 1111
1111 00001111 0000 temp1110 0000
1111 0000
1110 0000 temp0000 1110 temp40000 1110 P1temp1111 0000 1111 1110 P1temp1111 1111 P10XFF*/void main( ) /*主函数*/
{while (1){if(key00) { delay();//按键消抖if(key00){led00; //将灯一直到循环上面while(key00); num; }}else{led01; }if(num0){ //灯1P30X00;}else if(num1){//灯2P30X01;}else if(num2){//灯3P30X02;}else{num0;}}
}
总结
例5-3 程序优化过程每一个程序没一步如果你不清晰就一步步带数字进去计算看状态。一定要根据电路图来。 增加了独立键盘一个按键控制 3种灯的状态自己可以用来测试一个按键控制多个流水灯的状态需要注意松手按键检测会导致程序阻塞阻塞可能会引起一系列问题。具体问题要具体分析。