STC89C52R单片机驱动LCD1602显示字符串的代码
时间: 2023-09-17 13:06:18 浏览: 226
### 回答1:
以下是STC89C52R单片机驱动LCD1602显示字符串的代码:
#include <reg52.h>
#include <intrins.h>
#define LCD1602_DB P
sbit LCD1602_RS = P2^;
sbit LCD1602_RW = P2^1;
sbit LCD1602_E = P2^2;
void delay(unsigned int i)
{
while(i--);
}
void LCD1602_WriteCommand(unsigned char command)
{
LCD1602_RS = ;
LCD1602_RW = ;
LCD1602_E = ;
_nop_();
LCD1602_DB = command;
delay(5);
LCD1602_E = 1;
_nop_();
LCD1602_E = ;
}
void LCD1602_WriteData(unsigned char data)
{
LCD1602_RS = 1;
LCD1602_RW = ;
LCD1602_E = ;
_nop_();
LCD1602_DB = data;
delay(5);
LCD1602_E = 1;
_nop_();
LCD1602_E = ;
}
void LCD1602_Init()
{
LCD1602_WriteCommand(x38);
LCD1602_WriteCommand(xc);
LCD1602_WriteCommand(x06);
LCD1602_WriteCommand(x01);
}
void LCD1602_DisplayString(unsigned char x, unsigned char y, unsigned char *s)
{
unsigned char i;
if(x < 16)
{
if(y == )
{
LCD1602_WriteCommand(x80 + x);
}
else
{
LCD1602_WriteCommand(x80 + x40 + x);
}
}
for(i = ; s[i] != '\'; i++)
{
LCD1602_WriteData(s[i]);
}
}
void main()
{
LCD1602_Init();
LCD1602_DisplayString(, , "Hello, World!");
while(1);
}
### 回答2:
STC89C52R单片机驱动LCD1602显示字符串的代码如下:
```c
#include <reg52.h>
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_DATA P0
sbit LCD1602 = P3^7;
void DelayMs(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 110; j++);
}
}
void LcdWriteCmd(unsigned char cmd) {
LCD_RS = 0; // 设置为命令模式
LCD_RW = 0; // 设置为写入模式
LCD_DATA = cmd; // 写入命令
LCD_EN = 1; // 产生上升沿
DelayMs(1); // 延时1ms
LCD_EN = 0; // 产生下降沿
}
void LcdWriteData(unsigned char dat) {
LCD_RS = 1; // 设置为数据模式
LCD_RW = 0; // 设置为写入模式
LCD_DATA = dat; // 写入数据
LCD_EN = 1; // 产生上升沿
DelayMs(1); // 延时1ms
LCD_EN = 0; // 产生下降沿
}
void LcdInit() {
LcdWriteCmd(0x38); // 设置LCD为两行显示模式,5x7点阵
LcdWriteCmd(0x0C); // 开启显示,不显示光标
LcdWriteCmd(0x06); // 光标移动方式设置
LcdWriteCmd(0x01); // 清屏
}
void LcdDisplayString(unsigned char X, unsigned char Y, unsigned char *s) {
unsigned char i;
if (X < 16) {
X = X + 0x80;
} else {
X = X + 0xc0 - 16;
}
LcdWriteCmd(X); // 设置显示位置
DelayMs(1);
LcdWriteCmd(0x80 + Y); // 设置行位置
DelayMs(1);
i = 0;
while (s[i] != '\0') {
LcdWriteData(s[i]); // 逐个显示字符
i++;
}
}
void main() {
LcdInit(); // 初始化LCD
while (1) {
LcdDisplayString(0, 0, "Hello, World!"); // 在第一行显示字符串
LcdDisplayString(0, 1, "STC89C52R MCU"); // 在第二行显示字符串
}
}
```
这段代码通过STC89C52R单片机的引脚和LCD1602进行连接,并利用相应的命令和数据信号驱动LCD1602显示字符串。其中,通过`LcdWriteCmd`函数对LCD发送命令,通过`LcdWriteData`函数对LCD发送数据,通过`LcdInit`函数进行初始化设置,通过`LcdDisplayString`函数实现在指定位置显示字符串。在`main`函数中循环调用`LcdDisplayString`函数,可以实现连续多次显示不同的字符串。
阅读全文