653、基于51单片机的流水灯(独立按键,数码管,串口控制)

完整资料或定制滴滴我(有偿)见文末。

目录

一、设计功能

二、proteus仿真

三、原理图

四、程序源码

五、资料包括


一、设计功能

1、单片机型号:STC89C52/51、AT89C52/51、AT89S52/51等等都可通用。

2、使用8155扩展51单片机总线,实现4种流水灯效果。

3、通过按键实现多种效果,效果1:普通流水灯,效果2:从两边向中间移动,效果3:3灯走马,效果4:红色流水,内外移动

4、利用4个按键切换4种流水灯效果,外加一个暂停键。按下暂停键流水灯暂停,再次按下继续流水灯。

二、proteus仿真

三、原理图

四、程序源码

五、资料包括

需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网盘下载地址及提取码。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。下面是一个简单的C语言程序示例,通过单片机的UART串口控制流水灯数码管。 ```c #include <reg52.h> #include <intrins.h> #define BAUDRATE 9600 sbit LATCH = P1^0; // 74HC595锁存器控制引脚 sbit SRCLK = P1^1; // 74HC595移位寄存器时钟引脚 sbit RCLK = P1^2; // 74HC595锁存器时钟引脚 sbit SER = P1^3; // 74HC595串行数据输入引脚 unsigned char disp_buf[4] = {0xFF, 0xFF, 0xFF, 0xFF}; // 数码管显示缓存 void delay(unsigned int t) { while(t--); } void init_uart() { TMOD |= 0x20; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; ES = 1; EA = 1; } void uart_isr() interrupt 4 { if(RI) { char c = SBUF; switch(c) { case '0': P0 = 0xFF; break; case '1': P0 = 0xFE; break; case '2': P0 = 0xFC; break; case '3': P0 = 0xF8; break; case '4': P0 = 0xF0; break; case '5': P0 = 0xE0; break; case '6': P0 = 0xC0; break; case '7': P0 = 0x80; break; case 'a': disp_buf[0] = 0x3F; disp_buf[1] = 0x06; disp_buf[2] = 0x5B; disp_buf[3] = 0x4F; break; case 'b': disp_buf[0] = 0x7C; disp_buf[1] = 0x5E; disp_buf[2] = 0x5E; disp_buf[3] = 0x3C; break; case 'c': disp_buf[0] = 0x3D; disp_buf[1] = 0x42; disp_buf[2] = 0x42; disp_buf[3] = 0x3D; break; case 'd': disp_buf[0] = 0x7C; disp_buf[1] = 0x42; disp_buf[2] = 0x42; disp_buf[3] = 0x3C; break; default: break; } RI = 0; } } void shift_byte(unsigned char byte) { unsigned char i; for(i = 0; i < 8; i++) { SRCLK = 0; SER = byte & 0x80; byte <<= 1; SRCLK = 1; } } void update_disp() { unsigned char i; for(i = 0; i < 4; i++) { LATCH = 0; shift_byte(disp_buf[i]); LATCH = 1; RCLK = 0; RCLK = 1; } } void main() { init_uart(); while(1) { update_disp(); delay(5000); disp_buf[0] = _crol_(disp_buf[0], 1); disp_buf[1] = _crol_(disp_buf[1], 1); disp_buf[2] = _crol_(disp_buf[2], 1); disp_buf[3] = _crol_(disp_buf[3], 1); } } ``` 在上述程序中,通过单片机的UART串口接收PC端发送的指令,并根据指令控制流水灯数码管的显示。指令格式为一个字符,取值范围为0~7和a~d,表示流水灯数码管的不同状态。例如,当接收到字符'0'时,流水灯关闭;当接收到字符'1'时,流水灯从左往右移动一个灯;当接收到字符'a'时,数码管显示"abcd",以此类推。 其中,74HC595是一个串行输入并行输出的移位寄存器。通过向74HC595的串行输入引脚SER输入数据,然后通过SRCLK和RCLK两个时钟引脚控制锁存器的移位和锁存操作,从而实现对多个LED灯或数码管控制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值