日期::2023-05-23作者:网友整理人气:
采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。下面来看详细程序:
#include
#define uchar unsigned char
#define uintunsigned int
//N毫秒的延时函数
delay_ms(uint ms) {uint i,j;for(i=ms;i0;i--)for(j=114;j0;j--);return 0;}
void main(){uchar a,i;while(1){a=0xfe; //点亮第一位LED灯for(i=0;i8;i++){P1=a;a=a1; //左移一位a=a|0x01; //左移一位后与0x01相或,保证左移后最低位为1 delay_ms(500); }}}
分别为串口输出法、独立引脚输出法和扫描脉冲输出法。
1、 串口输出法:通过串口输出控制寄存器的值来控制流水灯的亮灭,每次改变寄存器的值,就可以实现流水灯亮起或熄灭,这种方法简朴易懂,也易于把握。
2、 独立引脚输出法:通过单片机的不同引脚输出来控制流水灯的亮灭,每个引脚都与一组 LED 灯相连,控制每个引脚的状态就可以实现流水灯的效果,这种方法的实现需要对引脚的控制有一定的了解。
3、 扫描脉冲输出法:通过利用定时器的输出或中断来实现流水灯的效果,具有较高的精度和稳定性,但需要对定时器的控制有一定的了解。
这三种实现方法各有优缺点,可以根据实际需求和个人能力选择。
假设P0.0接k1,P0.1接k2,k1或k2闭合时,P0.0或P0.1为低电平0,断开时为高电平1;P2口的8位接8个发光二极管的阳极,发光二极管的阴极通过下拉电阻接地,要点亮相应的二极管,需要P2口对应引脚输出高电平1;按下k1时,P2口初值设为00000001B,这样点亮最右边一个LED,用一段延时程序使得点亮稳定后,使P2口数值依次左移1位,这样8个二极管可以依次点亮,即流水灯左移;按下k2时,P2口初值设为10000000B,这样点亮最左边一个LED,用一段延时程序使得点亮稳定后,使P2口数值依次右移1位,这样8个二极管可以依次点亮,即流水灯右移。
本流水灯系统使用AT89C51单片机来实现流水灯的控制的设计原理是:P1的八个接口P1.0~P1.7,都通过限流电阻的连接着LED灯的阳极,所有LED灯的阴极的连接在0V,要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为高电平就可以了。