51单片机制作计算机1602显示,51单片机对LCD1602液晶显示器的控制
时间: 2023-08-15 17:07:06 浏览: 107
对于使用51单片机控制LCD1602液晶显示器,需要了解以下几个方面的知识:
1. 硬件连接:将LCD1602液晶显示器与51单片机连接,具体连接方式可以参考LCD1602液晶显示器的数据手册。
2. 通信协议:LCD1602液晶显示器使用的是并行通信协议,通信时需要向液晶显示器发送指令和数据。
3. 控制流程:51单片机控制LCD1602液晶显示器的流程主要包括初始化、设置光标位置、写入指令和数据等。
下面给出一个简单的示例代码,实现对LCD1602液晶显示器的控制:
```c
#include <reg51.h>
#define LCD_DATA P0 // 数据口
sbit RS = P2^0; // RS口
sbit RW = P2^1; // RW口
sbit EN = P2^2; // EN口
void delay(unsigned int time) // 延时函数
{
unsigned int i, j;
for(i = time; i > 0; i--)
{
for(j = 10; j > 0; j--);
}
}
void write_command(unsigned char command) // 写入指令
{
RW = 0; // 写模式
RS = 0; // 写入指令
LCD_DATA = command;
EN = 1;
delay(5);
EN = 0;
}
void write_data(unsigned char data) // 写入数据
{
RW = 0; // 写模式
RS = 1; // 写入数据
LCD_DATA = data;
EN = 1;
delay(5);
EN = 0;
}
void init_lcd() // 初始化LCD
{
write_command(0x38); // 设置8位数据总线,2行显示,5x7点阵字符
write_command(0x0c); // 显示开,光标不显示,光标闪烁不显示
write_command(0x06); // 光标右移,字符不移动
write_command(0x01); // 清屏
}
void set_cursor_pos(unsigned char row, unsigned char col) // 设置光标位置
{
unsigned char pos;
if(row == 1)
{
pos = 0x80 + col - 1;
}
else if(row == 2)
{
pos = 0xc0 + col - 1;
}
write_command(pos);
}
void main()
{
init_lcd(); // 初始化LCD
set_cursor_pos(1, 1); // 设置光标位置,第1行第1列
write_data('H'); // 写入字符'H'
write_data('e'); // 写入字符'e'
write_data('l'); // 写入字符'l'
write_data('l'); // 写入字符'l'
write_data('o'); // 写入字符'o'
set_cursor_pos(2, 1); // 设置光标位置,第2行第1列
write_data('W'); // 写入字符'W'
write_data('o'); // 写入字符'o'
write_data('r'); // 写入字符'r'
write_data('l'); // 写入字符'l'
write_data('d'); // 写入字符'd'
while(1);
}
```
在上述代码中,首先定义了硬件连接的端口,然后实现了写入指令和数据的函数,以及初始化LCD、设置光标位置和主函数。在主函数中,首先初始化LCD,然后设置光标位置,写入字符,最后进入死循环。这样就可以实现对LCD1602液晶显示器的简单控制了。
阅读全文