初始化1602的程序用c写
时间: 2023-09-28 22:13:45 浏览: 39
下面是一个用C语言写的LCD1602液晶显示屏初始化程序,适用于常见的16x2字符型液晶屏,该程序使用的是8位数据总线模式,使用AVR单片机进行控制。
```
#include <avr/io.h>
#include <util/delay.h>
#define LCD_DATA_PORT PORTB // LCD数据总线接口
#define LCD_DATA_DIR DDRB // LCD数据总线方向寄存器
#define LCD_CTRL_PORT PORTD // LCD控制线接口
#define LCD_CTRL_DIR DDRD // LCD控制线方向寄存器
#define LCD_RS_PIN PD0 // LCD寄存器选择线
#define LCD_RW_PIN PD1 // LCD读写选择线
#define LCD_E_PIN PD2 // LCD使能线
void lcd_init() {
// 设置LCD总线接口为输出模式,控制线接口为输出模式
LCD_DATA_DIR = 0xFF;
LCD_CTRL_DIR |= (1 << LCD_RS_PIN) | (1 << LCD_RW_PIN) | (1 << LCD_E_PIN);
// 初始化时序
LCD_CTRL_PORT &= ~(1 << LCD_RS_PIN); // RS=0,选择指令寄存器
LCD_CTRL_PORT &= ~(1 << LCD_RW_PIN); // RW=0,写入模式
LCD_CTRL_PORT &= ~(1 << LCD_E_PIN); // E=0,禁用液晶屏
_delay_ms(20); // 等待一段时间
// 发送初始化指令
lcd_write_cmd(0x38); // 设置8位数据总线,2行显示,5x7点阵字符
lcd_write_cmd(0x0C); // 关闭光标显示,开启显示,光标不闪烁
lcd_write_cmd(0x01); // 清屏
_delay_ms(2); // 等待一段时间
lcd_write_cmd(0x06); // 光标右移,不移动屏幕
}
void lcd_write_cmd(uint8_t cmd) {
LCD_CTRL_PORT &= ~(1 << LCD_RS_PIN); // RS=0,选择指令寄存器
LCD_CTRL_PORT &= ~(1 << LCD_RW_PIN); // RW=0,写入模式
LCD_DATA_PORT = cmd; // 写入指令
LCD_CTRL_PORT |= (1 << LCD_E_PIN); // E=1,启用液晶屏
_delay_us(1); // 等待一段时间
LCD_CTRL_PORT &= ~(1 << LCD_E_PIN); // E=0,禁用液晶屏
_delay_us(50); // 等待一段时间
}
void lcd_write_data(uint8_t data) {
LCD_CTRL_PORT |= (1 << LCD_RS_PIN); // RS=1,选择数据寄存器
LCD_CTRL_PORT &= ~(1 << LCD_RW_PIN); // RW=0,写入模式
LCD_DATA_PORT = data; // 写入数据
LCD_CTRL_PORT |= (1 << LCD_E_PIN); // E=1,启用液晶屏
_delay_us(1); // 等待一段时间
LCD_CTRL_PORT &= ~(1 << LCD_E_PIN); // E=0,禁用液晶屏
_delay_us(50); // 等待一段时间
}
void lcd_clear() {
lcd_write_cmd(0x01); // 清屏
_delay_ms(2); // 等待一段时间
}
void lcd_putc(char c) {
lcd_write_data(c); // 写入字符
}
void lcd_puts(const char *s) {
while (*s) {
lcd_putc(*s++); // 逐个写入字符
}
}
```
在程序中,需要根据具体的硬件接口进行修改,比如LCD_DATA_PORT和LCD_DATA_DIR需要修改为实际使用的控制数据线的寄存器和方向寄存器。需要注意的是,该程序中使用了_delay_ms()和_delay_us()函数,需要根据自己的时钟频率进行调整。