- 使用到的设备以及软件
- 今天的学习内容
- 控制LED进行二进制的显示
- 控制LED进行移位
- 心得体会
记录学习单片机的过程 使用到的设备以及软件
普中科技的嵌入式开发实验仪,keil uvision5,普中isp(用来程序下载),stc-isp(用来生成对应的需要的代码)
今天的学习内容独立按键控制LED显示二进制的显示以及控制LED移位
#includevoid Delay(unsigned int xms) //@12.000MHz { unsigned char i, j; while(xms--){ i = 2; j = 239; do { while (--j); } while (--i); } } void main(){ unsigned char LEDNum=0; while(1){ if(P3_3==0) { Delay(20); while(P3_3==0); Delay(20); LEDNum++; P2=~LEDNum; } } }
- 注意到unsigned char LEDNum的作用:
- 假设没有这个值,那么P2的位置(即所有的灯都会亮起),或者说该亮的地方没亮,但是不该亮的地方全都亮了
- 然后就需要我们进行按位取反
- 但是按位取反之后1111 1111溢出(因为进行P2++导致了溢出)就回变成 0000 0000,然后使用~进行按位取反之后又变成了1111 1111,至始至终没有改变,所以就需要使用到LEDNum这一个值进行一个代换
练习按位左移<<
0000 0001 0x01<<0
0000 0010 0x01<<1
0000 0100 0x01<<2
最后得到这样的代码:
#includeunsigned char LEDNum=0; void Delay(unsigned int xms) //@12.000MHz { unsigned char i, j; while(xms--){ i = 2; j = 239; do { while (--j); } while (--i); } } void main(){ while(1){ if(P3_1==0) { Delay(20); while(P3_1==0); Delay(20); LEDNum++; if(LEDNum>=8) { LEDNum=0; } P2=~(0x01< 对P2进行初始化并按位取反:
#includeunsigned char LEDNum=0; void Delay(unsigned int xms) //@12.000MHz { unsigned char i, j; while(xms--){ i = 2; j = 239; do { while (--j); } while (--i); } } void main(){ P2=~0x01; while(1){ if(P3_1==0) { Delay(20); while(P3_1==0); Delay(20); LEDNum++; if(LEDNum>=8) { LEDNum=0; } P2=~(0x01< 再进行按键的不同处理方式得到:
#includeunsigned char LEDNum=0; void Delay(unsigned int xms) //@12.000MHz { unsigned char i, j; while(xms--){ i = 2; j = 239; do { while (--j); } while (--i); } } void main(){ P2=~0x01; while(1){ if(P3_1==0) { Delay(20); while(P3_1==0); Delay(20); LEDNum++; if(LEDNum>=8) { LEDNum=0; } P2=~(0x01< Delay(20); while(P3_0==0); Delay(20); if(LEDNum==0) LEDNum=7; else LEDNum--; P2=~(0x01< 最终实现的就是按动P3_0进行右移(注意,这里是因为按位取反然后变成了LED的右移),
心得体会在写完一个函数程序之后我们要尝试去调用它,然后看 其是否符合我们想要的要求



