③、同理,循环下去
上面我们已经学会了如何点亮发光管,那么如何让发光管晾一段时间后熄灭呢?我们写下如下延时函数:
1 void delay(uint ms)
2 {
3 uint i;
4 for(; ms 》 0; ms --)
5 {
6 for(i = 114; i 》 0; i --)
7 {
8 }
9 }
10 }
我们只要在点亮一个发光管后调用这个延时函数,当执行完延时函数后,我们再将发光管熄灭就可以了。
我们来分析每一个不同发光管被点亮时的情况:
1.第一个发光管被点亮,此时单片机P1口的各位电平状态为:11111110;
2.第二个发光管被点亮,此时单片机P1口的各位电平状态为:11111101;
3.第三个发光管被点亮,此时单片机P1口的各位电平状态为:11111011;
4.第四个发光管被点亮,此时单片机P1口的各位电平状态为:11110111;
5.第五个发光管被点亮,此时单片机P1口的各位电平状态为:11101111;
6.第六个发光管被点亮,此时单片机P1口的各位电平状态为:11011111;
7.第七个发光管被点亮,此时单片机P1口的各位电平状态为:10111111;
8.第八个发光管被点亮,此时单片机P1口的各位电平状态为:01111111;
从P1口电平状态变化可以得到如下规律:下一次的电平值是上一次电平值循环左移一位得到的。
我们可以用头文件intrins.h中的循环左移函数_crol_来实现。
下面为流水灯完整代码:
1 #include
2 #include
3 #define uint unsigned int
4 void delay(uint);
5
6 void main()
7 {
8 P1 = 0xfe;
9
10 while(1)
11 {
12 delay(500);
13 P1 = _crol_(P1,1);
14 }
15 }
16
17 void delay(uint ms)
18 {
19 uint i;
20
21 for(; ms 》 0; ms --)
22 {
23 for(i = 114; i 》 0; i--)
24 {
25
26 }
27 }
28 }
责任编辑;zl
关于控制,MCU就介绍完了,您有什么想法可以联系小编。