用51单片机做一个3+4的计算电路,并用lcd1602显示出来
时间: 2024-03-10 07:48:00 浏览: 18
好的,这是一个简单的电路设计和编程任务。以下是一个基本的电路设计和代码示例:
电路设计:
- 将 3 和 4 连接到两个 8 段数码管上
- 将数码管的共阴极引脚连接到 51 单片机的引脚上
- 将 LCD1602 模块的 VSS 引脚连接到 GND
- 将 LCD1602 模块的 VDD 引脚连接到 5V
- 将 LCD1602 模块的 V0 引脚通过一个 10K 的电位器连接到 GND 和 5V 之间
- 将 LCD1602 模块的 RS 引脚连接到 51 单片机的 P1.0 引脚
- 将 LCD1602 模块的 RW 引脚连接到 51 单片机的 P1.1 引脚
- 将 LCD1602 模块的 E 引脚连接到 51 单片机的 P1.2 引脚
- 将 LCD1602 模块的 D4-D7 引脚连接到 51 单片机的 P2.4-P2.7 引脚
代码示例:
```c
#include <reg51.h>
#include <stdio.h>
// 定义数码管的引脚
sbit LED_A = P0^0;
sbit LED_B = P0^1;
sbit LED_C = P0^2;
sbit LED_D = P0^3;
sbit LED_E = P0^4;
sbit LED_F = P0^5;
sbit LED_G = P0^6;
sbit LED_DP = P0^7;
// 定义 LCD1602 的引脚
sbit LCD_RS = P1^0;
sbit LCD_RW = P1^1;
sbit LCD_E = P1^2;
sbit LCD_D4 = P2^4;
sbit LCD_D5 = P2^5;
sbit LCD_D6 = P2^6;
sbit LCD_D7 = P2^7;
// 定义函数
void delay(unsigned int t);
void write_lcd_command(unsigned char com);
void write_lcd_data(unsigned char dat);
void display_num(unsigned char num);
void display_add(unsigned char add);
void main() {
unsigned char num1 = 3;
unsigned char num2 = 4;
unsigned char add = num1 + num2;
// 初始化 LCD1602
write_lcd_command(0x38);
write_lcd_command(0x0c);
write_lcd_command(0x06);
write_lcd_command(0x01);
// 显示计算结果
display_num(num1);
display_num(num2);
write_lcd_data('+');
display_num(add);
while(1);
}
// 延时函数
void delay(unsigned int t) {
unsigned int i, j;
for(i = 0; i < t; i++) {
for(j = 0; j < 125; j++);
}
}
// 向 LCD1602 写入命令
void write_lcd_command(unsigned char com) {
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 1;
LCD_D4 = (com & 0x01);
LCD_D5 = (com & 0x02) >> 1;
LCD_D6 = (com & 0x04) >> 2;
LCD_D7 = (com & 0x08) >> 3;
LCD_E = 0;
delay(1);
}
// 向 LCD1602 写入数据
void write_lcd_data(unsigned char dat) {
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1;
LCD_D4 = (dat & 0x01);
LCD_D5 = (dat & 0x02) >> 1;
LCD_D6 = (dat & 0x04) >> 2;
LCD_D7 = (dat & 0x08) >> 3;
LCD_E = 0;
delay(1);
}
// 显示一个数字
void display_num(unsigned char num) {
switch(num) {
case 0:
LED_A = 0; LED_B = 0; LED_C = 0; LED_D = 0; LED_E = 0; LED_F = 0; LED_G = 1; LED_DP = 0;
break;
case 1:
LED_A = 1; LED_B = 0; LED_C = 0; LED_D = 1; LED_E = 1; LED_F = 1; LED_G = 1; LED_DP = 0;
break;
case 2:
LED_A = 0; LED_B = 0; LED_C = 1; LED_D = 0; LED_E = 0; LED_F = 1; LED_G = 0; LED_DP = 0;
break;
case 3:
LED_A = 0; LED_B = 0; LED_C = 0; LED_D = 0; LED_E = 1; LED_F = 1; LED_G = 0; LED_DP = 0;
break;
case 4:
LED_A = 1; LED_B = 0; LED_C = 0; LED_D = 1; LED_E = 1; LED_F = 0; LED_G = 0; LED_DP = 0;
break;
case 5:
LED_A = 0; LED_B = 1; LED_C = 0; LED_D = 0; LED_E = 1; LED_F = 0; LED_G = 0; LED_DP = 0;
break;
case 6:
LED_A = 0; LED_B = 1; LED_C = 0; LED_D = 0; LED_E = 0; LED_F = 0; LED_G = 0; LED_DP = 0;
break;
case 7:
LED_A = 0; LED_B = 0; LED_C = 0; LED_D = 1; LED_E = 1; LED_F = 1; LED_G = 1; LED_DP = 0;
break;
case 8:
LED_A = 0; LED_B = 0; LED_C = 0; LED_D = 0; LED_E = 0; LED_F = 0; LED_G = 0; LED_DP = 0;
break;
case 9:
LED_A = 0; LED_B = 0; LED_C = 0; LED_D = 0; LED_E = 1; LED_F = 0; LED_G = 0; LED_DP = 0;
break;
}
}
// 显示加号
void display_add(unsigned char add) {
LED_A = 0; LED_B = 0; LED_C = 1; LED_D = 1; LED_E = 1; LED_F = 1; LED_G = 1; LED_DP = 0;
}
```
注意:以上代码仅供参考,具体实现可能需要根据实际情况进行调整。