1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【51单片机】独立按键 每个按键不同功能 数码管数值的加减 控制流水灯模式 包含按

【51单片机】独立按键 每个按键不同功能 数码管数值的加减 控制流水灯模式 包含按

时间:2019-06-07 21:06:56

相关推荐

【51单片机】独立按键 每个按键不同功能 数码管数值的加减 控制流水灯模式 包含按

实验内容:

利用所学的单片机知识及电路知识编程实现单片机 I/O 口检测按键输入电平。

1.选中 8 位数码管的其中 1 位数码管,当独立按键 1 每按下一次,数码管加一(按下期间加 1),范围为 0—F;

2.选中 8 位数码管的另 1 位数码管,当独立按键 2 每按下一次,数码管减一(松手之后减 1),范围为 F—0;

3.按下独立按键 3 期间,流水灯以 600ms 的速度流动;

4.按下独立按键 4,松手之后,8 个 LED 灯作一次花样循环。

按键一效果图:

按键二效果图

按键三效果图:

按键四效果图:

代码如下:

#include <REGX51.H>#include <intrins.h>int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管编码int num=0;//全局变量 ,代表当前数码管显示的段码void Delay(unsigned int xms){unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}}void xianshi(int p){P2_2=1;P2_3=1;P2_4=1; //位选选中第第一位P0=table[p]; //段选,输出段码}void leddemo1(){//流水灯模式1int i;P0=0x00;//关闭数码管段选for(i=0;i<8;i++){P2=_crol_(0xfe,i);Delay(600);}P2=0xff;}void leddemo2(){//流水灯模式2P0=0x00;//关闭数码管段选P2=0x7e;Delay(600); P2=0xbd;Delay(600);P2=0xdb;Delay(600);P2=0xe7; Delay(600);P2=0xc3; Delay(600);P2=0xb1; Delay(600);P2=0x00; Delay(600);P2=0x18; Delay(600);P2=0x3c; Delay(600);P2=0x7e; Delay(600);P2=0x00; Delay(600);P2=0x00; Delay(600);P2=0xff; Delay(600);P2=0x00; Delay(600);P2=0xff; Delay(600);P2=0x00; Delay(600);P2=0x81; Delay(600);P2=0xc3; Delay(600);P2=0xe7; Delay(600);P2=0xff; Delay(600);}void key(){//独立按键扫描 if(P3_1==0){Delay(20);if(P3_1==0){while(P3_1==0){//按下不松手 累加num++;if(num>15)//判断数码是否超出显示范围num=0; Delay(300);xianshi(num);}}}if(P3_0==0){Delay(20);if(P3_0==0){num--;while(P3_0==0);Delay(20);if(num<0)//判断数码是否超出显示范围num=15;xianshi(num);}}if(P3_2==0){Delay(20);if(P3_2==0){while(P3_2==0);leddemo1();Delay(20);}}if(P3_3==0){Delay(20);if(P3_3==0){while(P3_3==0);leddemo2();Delay(20);}} } void main(){P0=0x00;while(1)key(); }

【51单片机】独立按键 每个按键不同功能 数码管数值的加减 控制流水灯模式 包含按键消抖 数码显示 流水灯

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。