c51单片机LCD静态显示两行代码
时间: 2024-01-16 13:01:50 浏览: 82
以下是一个简单的C51单片机LCD静态显示两行的示例代码:
```c
#include <reg52.h>
// LCD控制口和数据口定义,这里以P0口为例
#define LCD_CTRL P0
#define LCD_DATA P0
// LCD指令定义
#define LCD_CLEAR 0x01
#define LCD_HOME 0x02
#define LCD_MODE_2_LINES 0x38
#define LCD_SET_DDRAM 0x80
// LCD初始化函数
void lcd_init()
{
// 设置控制口和数据口为输出
LCD_CTRL = 0x00;
LCD_DATA = 0x00;
P0M1 = 0x00;
P0M0 = 0xFF;
// 等待LCD上电稳定
delay_ms(15);
// 发送初始化指令
LCD_CTRL = 0x30;
delay_ms(5);
LCD_CTRL = 0x30;
delay_ms(1);
LCD_CTRL = 0x30;
delay_ms(1);
// 设置8位数据模式、2行、5x7点阵显示模式
lcd_write_cmd(LCD_MODE_2_LINES);
// 清屏,将光标移动到起始位置
lcd_write_cmd(LCD_CLEAR);
lcd_write_cmd(LCD_HOME);
}
// LCD写指令函数
void lcd_write_cmd(unsigned char cmd)
{
LCD_CTRL = 0x00; // RS=0,选择指令寄存器
LCD_DATA = cmd;
LCD_CTRL = 0x80; // EN=1,写入数据
delay_ms(1);
LCD_CTRL = 0x00; // EN=0,清空数据
}
// LCD写数据函数
void lcd_write_data(unsigned char data)
{
LCD_CTRL = 0x01; // RS=1,选择数据寄存器
LCD_DATA = data;
LCD_CTRL = 0x81; // EN=1,写入数据
delay_ms(1);
LCD_CTRL = 0x01; // EN=0,清空数据
}
// LCD静态显示两行函数
void lcd_static_display()
{
// 写入第一行字符
lcd_write_cmd(LCD_SET_DDRAM | 0x00); // 设置光标位置为第一行起始位置
lcd_write_data('H');
lcd_write_data('e');
lcd_write_data('l');
lcd_write_data('l');
lcd_write_data('o');
lcd_write_data(',');
lcd_write_data(' ');
lcd_write_data('W');
lcd_write_data('o');
lcd_write_data('r');
lcd_write_data('l');
lcd_write_data('d');
lcd_write_data('!');
// 写入第二行字符
lcd_write_cmd(LCD_SET_DDRAM | 0x40); // 设置光标位置为第二行起始位置
lcd_write_data('T');
lcd_write_data('h');
lcd_write_data('i');
lcd_write_data('s');
lcd_write_data(' ');
lcd_write_data('i');
lcd_write_data('s');
lcd_write_data(' ');
lcd_write_data('t');
lcd_write_data('w');
lcd_write_data('o');
lcd_write_data(' ');
lcd_write_data('l');
lcd_write_data('i');
lcd_write_data('n');
lcd_write_data('e');
}
// 主函数
void main()
{
lcd_init(); // 初始化LCD
lcd_static_display(); // LCD静态显示两行
while(1); // 循环等待
}
```
注意,上述代码中的`delay_ms()`函数需要根据实际需要进行实现,可以使用定时器或者空循环等方式来实现。另外,具体的控制口和数据口定义需要根据实际硬件连接情况进行修改。
阅读全文