任务3-2 按键控制多种花样霓虹灯设计(课件)-《单片机技术与应用》同步教学(电子工业版)

2024-07-11
| 26页
| 52人阅读
| 2人下载
普通

内容正文:

任务3-2 按键控制多种花样霓虹灯设计 1 一、任务导入 任务要求 通过按键控制发光二极管显示不同的内容。 采用8个发光二极管模拟霓虹灯的显示,一个按键K控制8个发光二极管实现不同显示方式。当K没有按下时,8个LED全亮,当K按下时8个LED显示流水灯效果。 硬件电路 P0.0引脚通过上拉电阻1KΩ与+5V电源连接,当K没有按下时,P0.0引脚保持高电平,当K按下时,P0.0引脚接地,因此通过读取P0.0引脚的状态,就可以得知按键K是否被按下。 二、有弹性的按键 什么是按键开关呢? 6 按钮开关 常用按键符号 7 8 9 机械式按键开关有一个最大的特点,那就是它是有弹性的。 10 11 消除抖动方法 增加硬件电路 软件延时 12 三、程序设计 void main() //主函数 { unsigned char i,w; P1=0xff; //LED全灭 while(1) { if(K==0) //第一次检测到按键K按下 { delay(1200); //延时10ms左右去抖动 if(K==0) //再次检测到按键K按下 { w=0x01; //流水灯显示字初值为0x01 for(i=0;i<8;i++) { P1=~w; //显示字取反后,送P1口 delay(10000); //延时,一个灯显示时间 w<<=1; //显示字左移一位 } } } else P1=0x00; //没有按键按下,8个灯全部点亮 } } 选择语句 if (表达式) { 语句组1; } else { 语句组2; } void main() //主函数 { unsigned char i,w; P1=0xff; //LED全灭 while(1) { if(K==0) //第一次检测到按键K按下 { delay(1200); //延时10ms左右去抖动 if(K==0) //再次检测到按键K按下 { w=0x01; //流水灯显示字初值为0x01 for(i=0;i<8;i++) { P1=~w; //显示字取反后,送P1口 delay(10000); //延时,一个灯显示时间 w<<=1; //显示字左移一位 } } } else P1=0x00; //没有按键按下,8个灯全部点亮 } } 软件去抖流程 四、举一反三 没有按键按下时:8个LED全灭 当K1按下时:8个LED全亮 当K2按下时:高4位连接的LED点亮 当K3按下时:低4位连接的LED点亮 当K4按下时:8个LED交叉亮灭 用4个按键K1,K2,K3,K4控制花样霓虹灯的具体要求: 举一反三1 17 输入 : 按键按下, I/O引脚为0 按键弹起, I/O引脚为1 硬件设计 If else if Switch语句 switch语句 按键与开关的区别 软件设计思路 #include <reg51.h> //包含头文件reg51.h,定义了51单片机专用寄存器 #define TIME 1200 //定义符号常量TIME,代表常数1200,关于符号常量 sbit K1=P0^0; //定义位名称 sbit K2=P0^1; sbit K3=P0^2; sbit K4=P0^3; if(K1==0) //第一次检测到K1按下 { delay(TIME); //延时去抖动 if(K1==0)P1=0x00; //再次检测到K1按下,第一种模式,8个灯全亮 } else if(K2==0) //第一次检测到K2按下 { delay(TIME); //延时去抖动 if(K2==0)P1=0x55; //再次检测到K2按下,第二种模式,8个灯交叉亮 } else if(K3==0) //第一次检测到K3按下 { delay(TIME); //延时去抖动 if(K3==0)P1=0x0f; //再次检测到K3按下,第三种模式,高四位亮 } else if(K4==0) //第一次检测到K4按下 { delay(TIME); //延时去抖动 if(K4==0)P1=0xf0; //再次检测到K4按下,第四种模式,低四位亮 } if (表达式1) { 语句组1; } else if (表达式2) { 语句组2; } …… else if (表达式n) { 语句组n; } else { 语句组n+1; } 采用8个发光二极管模拟霓虹灯的显示,通过1个按键控制霓虹灯在四种显示模式之间切换,由P0口的P0.0引脚控制按键K。 当K第一次按下,显示第一种模式; 第二次按下,显示第二种模式; 第三次按下,显示第三种模式; 第四次按下,显示第四种模式, 第五次按下,又显示第一种模式。 举一反三2 程序设计思路 判断按键并累加次数 根据次数进行跳转 判断按键是否弹起 if(K==0) //第一次判断有键按下 { delay(1200); //延时消除抖动 if(K==0) //再次判断有键按下 { if(++i==5)i=1; //i增1,且增加到5后,再重新赋值1 } } 判断按键并累加次数 根据次数进行跳转 switch(i) //根据i的值显示不同模式 { case 1:P1=0x00;break; //i=1显示第1种模式 case 2:P1=0x55;break; //i=2显示第2种模式 case 3:P1=0x0f;break; //i=3显示第3种模式 case 4:P1=0xf0;break; //i=4显示第4种模式 default:break; } 判断按键是否弹起 while(!K); //等待K键释放,!为逻辑非操作 delay(1200); //延时消除抖动 感谢您的观看 Thanks for your attention.  26 $$

资源预览图

任务3-2  按键控制多种花样霓虹灯设计(课件)-《单片机技术与应用》同步教学(电子工业版)
1
任务3-2  按键控制多种花样霓虹灯设计(课件)-《单片机技术与应用》同步教学(电子工业版)
2
任务3-2  按键控制多种花样霓虹灯设计(课件)-《单片机技术与应用》同步教学(电子工业版)
3
任务3-2  按键控制多种花样霓虹灯设计(课件)-《单片机技术与应用》同步教学(电子工业版)
4
任务3-2  按键控制多种花样霓虹灯设计(课件)-《单片机技术与应用》同步教学(电子工业版)
5
任务3-2  按键控制多种花样霓虹灯设计(课件)-《单片机技术与应用》同步教学(电子工业版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。