2.单片机 LED 控制及流转制作
作者:互联网
目录
本专栏所有引脚及端口 代码及注解 选择的是 BST-V51 单片机
需结合具体的单片机原理图进行分析
接下来的本专栏都选择该单片机及其原理图分析来进行操作
2.0 延时函数制作单灯闪烁
1 #include <STC89C5xRC.H> 2 #include <DELAYMS.H> 3 void main(){ 4 P10 = 0; 5 //P1 = 0xfe; //1111 1110 6 while(1){ 7 delay_ms(500); 8 P10 = ~P10; 9 } 10 }
对延时函数进行封装
DELAYMS.H
1 #ifndef _DELAYMS_H_ 2 #define _DELAYMS_H_ 3 #include <INTRINS.H> 4 // xms 代表需要延时的毫秒数 5 void delay_ms(unsigned int xms) //@11.0592MHz 6 { 7 unsigned char i, j; 8 while(xms--){ 9 _nop_(); 10 i = 2; 11 j = 199; 12 do 13 { 14 while (--j); 15 } while (--i); 16 //每执行一次 1ms 17 } 18 } 19 #endif
2.1 独立按键控制 LED 亮灭
按键 K1-K4 对应 P34-P37 号引脚
另一端接地 为 0
#include <STC89C5xRC.H> int main(){ //P10 = 0; while(1){ if(P34 == 0){ P10 = 0; }else{ P10 = 1; } } }
2.2 独立按键控制 LED 状态
消除按键抖动
delay_ms(20);
while(P34 == 0);
delay_ms(20);
int main(){ while(1){ delay_ms(100); if(P34 == 0){ delay_ms(20); //延时 20,开关按下消抖 while(P34 == 0); //检测 P34=0 时,继续循环上面的语句,否则跳出这个语句执行下一个语句 delay_ms(20);//延时 20ms,开关松开消抖 //按下亮 再按下熄灭 P11 = ~P11; P15 = ~P15; } } }
2.3 独立按键控制 LED 二进制转换
int main(){ unsigned char num = 0; //占 8 位 while(1){ if(P34 == 0){ delay_ms(20); while(P34 == 0); //消除抖动 delay_ms(20); //防抖 num++; P1 = ~num; } if(P1 == 0x00){ P1 = 0xff; } //如果 led 全亮 num=1111 1111 ;P1=0000 0000 //num+1=0000 0000 } }
2.4 独立按键控制 LED 移位
按位左移<< 往左移位 低位补 0;
按位右移<< 往右移位 高位补 0;
按位与& 同为 1 时为 1 其余为 0;
按位或| 有 1 即为 1 全为 0 时才为 0;
按位异或^ 不同时为 1 相同时为 0;
按位取反~
1 int main(){ 2 unsigned int num = 0x01; //num=0000 0001 3 int i; 4 while(1){ 5 6 7 //按位左移<< 往左移位 低位补 0; 8 if(P34 == 0){ 9 delay_ms(20); 10 while(P34 == 0); //消除防抖 11 delay_ms(20); 12 13 P1 = ~num; //取反即得低电平的 led 14 num = num << 1; 15 if(P1 >= 0xff){ //P1 = 1111 1111 16 num = 0x01; 17 } 18 } 19 //按位右移<< 往右移位 高位补 0; 20 if(P35 == 0){ 21 delay_ms(20); 22 while(P35 == 0); //消除防抖 23 delay_ms(20); 24 25 P1 = ~num; 26 num = num >> 1; 27 if(P1 == 0xff ||P1 == 0x00){ 28 num = 0x80; 29 } 30 } 31 32 33 //顺序左移流水灯 34 if(P36 == 0){ 35 delay_ms(20); 36 while(P36 == 0); //消除防抖 37 delay_ms(20); 38 39 P1 = ~num; 40 for(i = 0;i < 8;i++){ 41 P1 = ~num; 42 delay_ms(90); 43 num = num << 1; 44 if(P1 >= 0xff){ 45 num = 0x01; 46 } 47 } 48 49 50 } 51 } 52 }
转载于: https://zhuanlan.zhihu.com/p/508384193
我目前是一名计算机专业的学生,我会不断地在各大平台分享我的所学,让知识得到共享,希望大家多多关注,一起从学习计算机基础直到计算机的深入式学习,让我们共同进步吧。
标签:P1,LED,流转,delay,单片机,while,num,ms 来源: https://www.cnblogs.com/xiaoxie001/p/16215673.html