51单片机串口流水灯
时间: 2023-07-23 07:07:58 浏览: 122
流水灯_51单片机_at89c51_
串口流水灯是一种利用串口通信控制LED灯按照一定的规律闪烁的电路。下面是51单片机串口流水灯的实现步骤:
1. 确定串口通信参数,包括波特率、数据位、停止位、校验位等。
2. 初始化串口,使其能够正常工作。
3. 初始化LED灯的IO口,将其设置为输出。
4. 接收串口数据,当接收到数据时,根据数据的不同,控制LED灯的亮灭。
5. 通过定时器中断控制LED灯的流水灯效果。
下面是具体的代码实现:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void UART_init()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
}
void UART_send(uchar dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void LED_flow(uchar dat)
{
uchar i,j;
for(i=0;i<8;i++)
{
P0 = table[i];
delay(200);
}
for(j=0;j<dat;j++)
{
for(i=0;i<8;i++)
{
P0 = table[i];
delay(200);
}
}
}
void main()
{
uchar dat;
UART_init();
while(1)
{
if(RI)
{
dat = SBUF;
RI = 0;
LED_flow(dat);
}
}
}
void UART_irq() interrupt 4
{
uchar dat;
if(RI)
{
dat = SBUF;
RI = 0;
LED_flow(dat);
}
}
```
在上述代码中,我们使用了单片机的串口通信模块和定时器中断来控制LED灯的流水灯效果。当单片机接收到串口数据时,将数据传递给LED_flow函数,该函数将数据作为参数,控制LED灯按照一定的规律闪烁。同时,定时器中断控制LED灯的流水灯效果,使其能够呈现出连续闪烁的效果。
阅读全文