以下是使用一到三个51单片机完成上述功能的详细程序和电路图。\n\n1. 8位流水灯:\n电路图如下:\n\n\n VCC\n │\n R1\n │\n ──┬─────────────┐\n │ │\nP0.0 ────┼──────┬───────┼─────── ...\n │ │ │\nP0.1 ────┘ │ │\n │ │\nP0.2 ───────────┘ │\n │\nP0.3 ───────────────────┘\n\n\n程序如下:\n\nc\n#include <reg51.h>\n\nsbit LED0 = P0^0;\nsbit LED1 = P0^1;\nsbit LED2 = P0^2;\nsbit LED3 = P0^3;\n\nvoid delay(unsigned int count) {\n unsigned int i, j;\n for(i = 0; i < count; i++)\n for(j = 0; j < 120; j++);\n}\n\nvoid main() {\n while(1) {\n LED0 = 0;\n LED1 = 1;\n LED2 = 1;\n LED3 = 1;\n delay(500);\n \n LED0 = 1;\n LED1 = 0;\n LED2 = 1;\n LED3 = 1;\n delay(500);\n \n LED0 = 1;\n LED1 = 1;\n LED2 = 0;\n LED3 = 1;\n delay(500);\n \n LED0 = 1;\n LED1 = 1;\n LED2 = 1;\n LED3 = 0;\n delay(500);\n }\n}\n\n\n2. LCD1602液晶显示屏输出时钟:\n电路图如下:\n\n\n VCC\n │\n R1\n │\n ──┬─────────────────────────────┐\n │ │\nP2.0 ──┼──┬──┬──┬──┬──┬──┬──┬──┬──┬──┼── ...\n │ │ │ │ │ │ │ │ │ │ │\nP1.0 ──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼── ...\n │ │ │ │ │ │ │ │ │ │ │\nP1.1 ──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼── ...\n │ │ │ │ │ │ │ │ │ │ │\nP1.2 ──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼── ...\n │ │ │ │ │ │ │ │ │ │ │\nP1.3 ──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼── ...\n │ │ │ │ │ │ │ │ │ │ │\nP1.4 ──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼── ...\n │ │ │ │ │ │ │ │ │ │ │\nP1.5 ──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼── ...\n │ │ │ │ │ │ │ │ │ │ │\nP1.6 ──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴── ...\n │ │ │ │ │ │ │ │ │ │ │\n GND GND GND GND GND GND GND GND\n\n\n程序如下:\n\nc\n#include <reg51.h>\n\n#define LCD_DATA P1\nsbit RS = P2^0;\nsbit EN = P2^1;\n\nvoid delay(unsigned int count) {\n unsigned int i, j;\n for(i = 0; i < count; i++)\n for(j = 0; j < 120; j++);\n}\n\nvoid lcd_command(unsigned char command) {\n RS = 0;\n LCD_DATA = command;\n EN = 1;\n delay(1);\n EN = 0;\n delay(1);\n}\n\nvoid lcd_data(unsigned char data) {\n RS = 1;\n LCD_DATA = data;\n EN = 1;\n delay(1);\n EN = 0;\n delay(1);\n}\n\nvoid lcd_init() {\n lcd_command(0x38); // 8位数据接口,2行显示,5x7点阵字符\n lcd_command(0x0C); // 显示开,光标不闪烁\n lcd_command(0x06); // 光标右移,字符不移动\n lcd_command(0x01); // 清除显示,光标回到起始位置\n}\n\nvoid lcd_display_time(unsigned char hour, unsigned char min, unsigned char sec) {\n lcd_command(0x80); // 光标移到第一行第一个字符位置\n lcd_data(hour / 10 + '0');\n lcd_data(hour % 10 + '0');\n lcd_data(':');\n lcd_data(min / 10 + '0');\n lcd_data(min % 10 + '0');\n lcd_data(':');\n lcd_data(sec / 10 + '0');\n lcd_data(sec % 10 + '0');\n}\n\nvoid main() {\n unsigned char hour = 0, min = 0, sec = 0;\n \n lcd_init();\n \n while(1) {\n lcd_display_time(hour, min, sec);\n \n sec++;\n if(sec == 60) {\n sec = 0;\n min++;\n }\n if(min == 60) {\n min = 0;\n hour++;\n }\n if(hour == 24)\n hour = 0;\n \n delay(1000);\n }\n}\n\n\n3. 点亮的灯珠数量随外界音量提高而变多:\n电路图如下:\n\n\n VCC\n │\n R1\n │\n ──┬─────────────────────────────────────────────────┐\n │ │\nP0.0 ─────┼──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┼─── ...\n │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │\nP0.1 ─────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼─── ...\n │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │\nP0.2 ─────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼─── ...\n │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │\nP0.3 ─────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼─── ...\n │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │\n ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴\n GND GND GND GND GND GND GND GND GND GND GND GND GND GND\n\n\n程序如下:\n\nc\n#include <reg51.h>\n\nsbit LED0 = P0^0;\nsbit LED1 = P0^1;\nsbit LED2 = P0^2;\nsbit LED3 = P0^3;\n\nvoid delay(unsigned int count) {\n unsigned int i, j;\n for(i = 0; i < count; i++)\n for(j = 0; j < 120; j++);\n}\n\nvoid main() {\n while(1) {\n if(P1 > 100) { // 假设P1口连接的是音量传感器,当P1口电平大于100时,点亮所有LED灯\n LED0 = 1;\n LED1 = 1;\n LED2 = 1;\n LED3 = 1;\n }\n else if(P1 > 50) { // 当P1口电平大于50时,点亮前三个LED灯\n LED0 = 1;\n LED1 = 1;\n LED2 = 1;\n LED3 = 0;\n }\n else if(P1 > 20) { // 当P1口电平大于20时,点亮前两个LED灯\n LED0 = 1;\n LED1 = 1;\n LED2 = 0;\n LED3 = 0;\n }\n else { // 当P1口电平小于等于20时,只点亮第一个LED灯\n LED0 = 1;\n LED1 = 0;\n LED2 = 0;\n LED3 = 0;\n }\n }\n}\n\n\n以上是使用一到三个51单片机完成1.8位流水灯、2.LCD1602液晶显示屏输出时钟和3.点亮的灯珠数量随外界音量提高而变多的详细程序和电路图。请注意根据具体的开发板或电路进行相应的引脚连接和配置。


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

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