以下是使用一到三个51单片机完成以上功能的详细程序:\u000a\u000a1. 8位流水灯:\u000a使用一个51单片机,连接8个LED灯,通过依次点亮和熄灭LED灯来实现流水灯效果。\u000a\u000ac\u000a#include <reg51.h>\u000a\u000asbit LED1 = P1^0;\u000asbit LED2 = P1^1;\u000asbit LED3 = P1^2;\u000asbit LED4 = P1^3;\u000asbit LED5 = P1^4;\u000asbit LED6 = P1^5;\u000asbit LED7 = P1^6;\u000asbit LED8 = P1^7;\u000a\u000avoid delay(unsigned int ms) {\u000a unsigned int i, j;\u000a for(i = 0; i < ms; i++) {\u000a for(j = 0; j < 1000; j++);\u000a }\u000a}\u000a\u000avoid main() {\u000a while(1) {\u000a LED8 = 1;\u000a delay(500);\u000a LED8 = 0;\u000a LED7 = 1;\u000a delay(500);\u000a LED7 = 0;\u000a LED6 = 1;\u000a delay(500);\u000a LED6 = 0;\u000a LED5 = 1;\u000a delay(500);\u000a LED5 = 0;\u000a LED4 = 1;\u000a delay(500);\u000a LED4 = 0;\u000a LED3 = 1;\u000a delay(500);\u000a LED3 = 0;\u000a LED2 = 1;\u000a delay(500);\u000a LED2 = 0;\u000a LED1 = 1;\u000a delay(500);\u000a LED1 = 0;\u000a }\u000a}\u000a\u000a\u000a2. LCD1602液晶显示屏输出时钟:\u000a使用一个51单片机,连接LCD1602液晶显示屏,通过读取系统时间并将其显示在液晶显示屏上实现时钟功能。\u000a\u000ac\u000a#include <reg51.h>\u000a\u000asbit RS = P0^0;\u000asbit RW = P0^1;\u000asbit E = P0^2;\u000a#define DATA P2\u000a\u000avoid delay(unsigned int ms) {\u000a unsigned int i, j;\u000a for(i = 0; i < ms; i++) {\u000a for(j = 0; j < 1000; j++);\u000a }\u000a}\u000a\u000avoid LCD_Write_Cmd(unsigned char cmd) {\u000a RS = 0;\u000a RW = 0;\u000a DATA = cmd;\u000a E = 1;\u000a delay(1);\u000a E = 0;\u000a}\u000a\u000avoid LCD_Write_Data(unsigned char dat) {\u000a RS = 1;\u000a RW = 0;\u000a DATA = dat;\u000a E = 1;\u000a delay(1);\u000a E = 0;\u000a}\u000a\u000avoid LCD_Init() {\u000a LCD_Write_Cmd(0x38); // 8位数据线,2行显示,5*7点阵字符\u000a LCD_Write_Cmd(0x0C); // 显示开,光标关,不闪烁\u000a LCD_Write_Cmd(0x06); // 显示数据指针右移,不移动显示\u000a LCD_Write_Cmd(0x01); // 清屏\u000a}\u000a\u000avoid LCD_Display_Time(unsigned char hour, unsigned char min, unsigned char sec) {\u000a LCD_Write_Cmd(0x80); // 第一行第一列\u000a LCD_Write_Data(hour / 10 + '0'); // 显示十位数\u000a LCD_Write_Data(hour % 10 + '0'); // 显示个位数\u000a LCD_Write_Data(':');\u000a LCD_Write_Data(min / 10 + '0');\u000a LCD_Write_Data(min % 10 + '0');\u000a LCD_Write_Data(':');\u000a LCD_Write_Data(sec / 10 + '0');\u000a LCD_Write_Data(sec % 10 + '0');\u000a}\u000a\u000avoid main() {\u000a unsigned char hour = 0, min = 0, sec = 0;\u000a \u000a LCD_Init();\u000a \u000a while(1) {\u000a LCD_Display_Time(hour, min, sec);\u000a sec++;\u000a if(sec == 60) {\u000a sec = 0;\u000a min++;\u000a if(min == 60) {\u000a min = 0;\u000a hour++;\u000a if(hour == 24) {\u000a hour = 0;\u000a }\u000a }\u000a }\u000a delay(1000);\u000a }\u000a}\u000a\u000a\u000a3. 点亮的灯珠数量随外界音量提高而变多:\u000a使用两个51单片机,一个用于采集外界音量,另一个用于控制LED灯的点亮数量。\u000a\u000a首先,使用一个51单片机连接声音传感器,读取声音传感器的输出电压作为音量大小,并通过串口将音量发送给另一个51单片机。\u000a\u000ac\u000a#include <reg51.h>\u000a\u000asbit SDA = P2^0;\u000asbit SCL = P2^1;\u000a\u000avoid I2C_Start() {\u000a SDA = 1;\u000a SCL = 1;\u000a SDA = 0;\u000a SCL = 0;\u000a}\u000a\u000avoid I2C_Stop() {\u000a SDA = 0;\u000a SCL = 1;\u000a SDA = 1;\u000a}\u000a\u000abit I2C_Write(unsigned char dat) {\u000a unsigned char i;\u000abit ack;\u000a for(i = 0; i < 8; i++) {\u000a SDA = (dat & 0x80) >> 7;\u000a dat <<= 1;\u000a SCL = 1;\u000a SCL = 0;\u000a }\u000a SDA = 1;\u000a SCL = 1;\u000a ack = SDA;\u000a SCL = 0;\u000a return ack;\u000a}\u000a\u000aunsigned char ADC_Read() {\u000a unsigned char i, dat = 0;\u000a SDA = 1;\u000a for(i = 0; i < 8; i++) {\u000a dat <<= 1;\u000a SCL = 1;\u000a dat |= SDA;\u000a SCL = 0;\u000a }\u000a return dat;\u000a}\u000a\u000avoid main() {\u000a unsigned char volume;\u000a \u000a while(1) {\u000a I2C_Start();\u000a I2C_Write(0x90);\u000a volume = ADC_Read();\u000a I2C_Stop();\u000a \u000a // 将音量通过串口发送给另一个51单片机\u000a // ...\u000a }\u000a}\u000a\u000a\u000a然后,使用另一个51单片机连接LED灯,通过串口接收音量数据,并根据音量数据点亮相应数量的LED灯。\u000a\u000ac\u000a#include <reg51.h>\u000a\u000asbit LED1 = P1^0;\u000asbit LED2 = P1^1;\u000asbit LED3 = P1^2;\u000asbit LED4 = P1^3;\u000asbit LED5 = P1^4;\u000asbit LED6 = P1^5;\u000asbit LED7 = P1^6;\u000asbit LED8 = P1^7;\u000a\u000avoid delay(unsigned int ms) {\u000a unsigned int i, j;\u000a for(i = 0; i < ms; i++) {\u000a for(j = 0; j < 1000; j++);\u000a }\u000a}\u000a\u000avoid main() {\u000a // 通过串口接收音量数据\u000a // ...\u000a \u000a while(1) {\u000a // 根据音量数据点亮相应数量的LED灯\u000a // ...\u000a }\u000a}\u000a\u000a\u000a以上是使用一到三个51单片机完成以上功能的详细程序。请根据实际情况进行适当调整和修改。

51单片机实现流水灯、LCD时钟和音量控制LED亮度:详细程序及代码

原文地址: https://www.cveoy.top/t/topic/pAvb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录