个人网站怎么做引流,电脑培训学校,品牌网商城,工作服目的
按下K1键LED流水向左移动
按下K2键LED流水向右移动
一#xff0c;STC单片机模块 二#xff0c;独立按键
2.1 独立按键位置 2.2 独立按键电路图 这里要注意一个设计的bug
P3_1 引脚对应是K1
P3_0 引脚对应是K2 要实现按一下点亮、再按一下熄灭#xff0c;我们就需…目的
按下K1键LED流水向左移动
按下K2键LED流水向右移动
一STC单片机模块 二独立按键
2.1 独立按键位置 2.2 独立按键电路图 这里要注意一个设计的bug
P3_1 引脚对应是K1
P3_0 引脚对应是K2 要实现按一下点亮、再按一下熄灭我们就需要分析按键上的电压变化。 对于机械开关当机械触点断开、闭合时由于机械触点的弹性作用一个开关在闭合时不会马上稳定地接通在断开时也不会立即断开所以在开关闭合及断开的瞬间会伴随一连串的抖动 。如上图。
具体在程序上我们就需要按照这个图做相应的处理。 if(P3_10) //如果K1按键按下{Delay(15); //延时消抖while(P3_10); //松手检测Delay(15); //延时消抖 P2_0~P2_0; //LED1取反}
要实现左右移动分别控制 我们定义变量左移就自减1右移就自加1. if(P3_10) //如果K1按键按下{Delay_ms(15); //延时消抖while(P3_10); //松手检测 一直按着没松手Delay_ms(15); //延时消抖 LED_Num--; //变量减1if(LED_Num0) {LED_Num7; //当最左边一个灯亮后下一个是最右边一个灯亮}}if(P3_00) //如果K2按键按下{Delay_ms(15); //延时消抖while(P3_00); //松手检测 一直按着没松手Delay_ms(15); //延时消抖 LED_Num; //变量加1if(LED_Num8){LED_Num0; //当最右边一个灯亮后下一个是最左边一个灯亮}}
当在两头时我们要分别判定下并重新从头开始。
三创建Keil项目
详细参考51单片机STC89C52RC——创建Keil项目-CSDN博客
四代码
#include REGX52.H/*** 函 数延时函数 毫秒* 参 数ms 延时多少毫秒* 返 回 值无*/
void Delay_ms(int ms) //12.000MHz
{unsigned char data i, j;while(ms--){ i 2;j 239;do{while (--j);} while (--i);}
}/*** 函 数主函数* 参 数无* 返 回 值无*/
void main()
{int LED_Num0; //定义变量LED_Num 表示第几个LEDP20xFE; //上电后默认第一个LED D1点亮while(1){if(P3_10) //如果K1按键按下{Delay_ms(15); //延时消抖while(P3_10); //松手检测 一直按着没松手Delay_ms(15); //延时消抖 LED_Num--; //变量减1if(LED_Num0) {LED_Num7; //当最左边一个灯亮后下一个是最右边一个灯亮}}if(P3_00) //如果K2按键按下{Delay_ms(15); //延时消抖while(P3_00); //松手检测 一直按着没松手Delay_ms(15); //延时消抖 LED_Num; //变量加1if(LED_Num8){LED_Num0; //当最右边一个灯亮后下一个是最左边一个灯亮}}P2~(0x01LED_Num); //左移对应位后取反 设置LED的亮灭}
}五代码编译、下载到51单片机
代码编译请参考
《51单片机STC89C52RC——代码编译-CSDN博客》
代码下载请参考
《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》
六效果