如图各位巨佬们 我接起来就是几个大白块 我是纯才开始学我想问问各位巨佬应该怎么硬件连接一下 我是根据网上一个图连的可我不知道自己连的问题出在哪 求指点
2条回答 默认 最新
- 张小兔爱钱钱 2023-06-12 08:50关注
烧程序了没有
#define RS BIT0 // RS引脚定义为P1.0 #define EN BIT1 // EN引脚定义为P1.1 #define D4 BIT4 // D4引脚定义为P1.4 #define D5 BIT5 // D5引脚定义为P1.5 #define D6 BIT6 // D6引脚定义为P1.6 #define D7 BIT7 // D7引脚定义为P1.7 #define LCD_ADDR 0x27 // PCF8574的I2C地址 #define LCD_ROWS 2 // LCD1602屏幕行数 #define LCD_COLS 16 // LCD1602屏幕列数 #define LCD_CLEAR 0x01 // 清屏命令 #define LCD_HOME 0x02 // 光标回到起始位置 #define LCD_ENTRY 0x06 // 从左到右写字符,不移动光标 #define LCD_ON 0x0C // 打开显示,关闭光标 #define LCD_OFF 0x08 // 关闭显示,关闭光标 void i2c_init() { UCB0CTL1 |= UCSWRST; // 进入软件复位状态 UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // 主模式,I2C模式,同步通讯 UCB0CTL1 = UCSSEL_2 + UCSWRST; // SMCLK时钟源,保持软件复位状态 UCB0BR0 = 20; // 时钟分频,用于产生低速I2C时钟 UCB0BR1 = 0; P1SEL |= BIT6 + BIT7; // P1.6和P1.7设置为I2C专用引脚 P1SEL2 |= BIT6 + BIT7; UCB0CTL1 &= ~UCSWRST; // 取消软件复位状态,启动I2C硬件 } void lcd_send_cmd(unsigned char cmd) { // 向LCD1602发送命令函数 unsigned char data1, data2; data1 = cmd & 0xF0; // 先送高4位数据 data2 = (cmd << 4) & 0xF0; // 再送低4位数据(数据线在D4~D7上) i2c_start(); i2c_write_byte(LCD_ADDR); // 发送设备地址 i2c_write_byte(data1 | 0x04); // 高4位数据加RS=0、RW=0、E=1写入I/O扩展芯片 i2c_write_byte(data1); // 高4位数据加RS=0、RW=0、E=0写入I/O扩展芯片 i2c_write_byte(data2 | 0x04); // 低4位数据加RS=0、RW=0、E=1写入I/O扩展芯片 i2c_write_byte(data2); // 低4位数据加RS=0、RW=0、E=0写入I/O扩展芯片 i2c_stop(); } void lcd_send_data(unsigned char data) { // 向LCD1602发送数据函数 unsigned char data1, data2; data1 = data & 0xF0; // 先送高4位数据 data2 = (data << 4) & 0xF0; // 再送低4位数据(数据线在D4~D7上) i2c_start(); i2c_write_byte(LCD_ADDR); // 发送设备地址 i2c_write_byte(data1 | 0x05); // 高4位数据加RS=1、RW=0、E=1写入I/O扩展芯片 i2c_write_byte(data1 | 0x01); // 高4位数据加RS=1、RW=0、E=0写入I/O扩展芯片 i2c_write_byte(data2 | 0x05); // 低4位数据加RS=1、RW=0、E=1写入I/O扩展芯片 i2c_write_byte(data2 | 0x01); // 低4位数据加RS=1、RW=0、E=0写入I/O扩展芯片 i2c_stop(); } void lcd_init() { // LCD1602初始化函数 lcd_send_cmd(0x33); // 初始化 lcd_send_cmd(0x32); lcd_send_cmd(0x28); // 设置为2行16列显示 lcd_send_cmd(LCD_ENTRY); // 显示不移动,写字符时往右移动 lcd_send_cmd(LCD_ON); // 打开显示,关闭光标 lcd_send_cmd(LCD_CLEAR); // 清屏 lcd_send_cmd(LCD_HOME); // 光标返回起始位置 } int main() { unsigned char text[] = "Hello world!"; // 待显示的字符串 int i; WDTCTL = WDTPW + WDTHOLD; // 停用看门狗 i2c_init(); // 初始化I2C总线和PCF8574 lcd_init(); // 初始化LCD1602 for (i = 0; i < sizeof(text) - 1; i++) { // 向LCD1602逐个字符地写入待显示的字符串 lcd_send_data(text[i]); } while(1); }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 请教如何关于Msg文件解析
- ¥200 sqlite3数据库设置用户名和密码
- ¥15 AutoDL无法使用docker install吗?
- ¥15 cups交叉编译后移植到tina sdk的t113,只需要实现usb驱动打印机,打印pdf文件
- ¥30 关于#wireshark#的问题:需要网络应用流量数据集需要做长度序列的实验,需要与应用产生的会话的数据包的长度,如视频类或者聊天类软件
- ¥15 根据上述描述表示泥浆密度沿着管路的长度方向在不断变化,如何来表示泥浆密度随管路的变化(标签-matlab|关键词-流计算)
- ¥21 matlab可以把图像数据转换为小波分析吗
- ¥60 基于香农编码的图像压缩算法实现
- ¥15 matlabGUI绘制一个函数与其导数的图像
- ¥20 大数据采集用Python爬取猫眼电影数据