通过51单片机驱动LCD1602液晶显示屏,控制循环显示一行的英文字符缩写和学生学号。
时间: 2023-12-10 09:40:55 浏览: 79
首先,需要连接好51单片机和LCD1602液晶显示屏。然后,可以通过以下步骤来控制循环显示英文字符缩写和学生学号:
1. 定义需要显示的字符缩写和学号数组,如下所示:
```c
unsigned char code abbr[5][4] = {"CPU", "RAM", "ROM", "ADC", "DAC"};
unsigned char code studentNo[9] = {"12345678"};
```
2. 初始化LCD1602液晶显示屏,使其处于可写状态,显示光标关闭,显示清屏,并设置光标移动方向为从左到右。
```c
void initLCD() {
LCD_WriteCmd(0x38); // 设置16*2显示,5*7点阵,8位数据接口
LCD_WriteCmd(0x0c); // 显示开,光标关闭,光标闪烁关闭
LCD_WriteCmd(0x01); // 显示清屏
LCD_WriteCmd(0x06); // 光标移动方向:从左到右
}
```
3. 编写一个循环函数,在其中不断显示字符缩写和学生学号。具体实现如下:
```c
void loop() {
int i = 0;
while (1) {
// 显示字符缩写
LCD_WriteCmd(0x80); // 设置光标位置为第一行第一列
for (i = 0; i < 5; i++) {
LCD_WriteData(abbr[i][0]);
LCD_WriteData(abbr[i][1]);
LCD_WriteData(abbr[i][2]);
delayms(500); // 等待0.5秒
LCD_WriteCmd(0x01); // 显示清屏
delayms(500); // 等待0.5秒
}
// 显示学生学号
LCD_WriteCmd(0x80); // 设置光标位置为第一行第一列
for (i = 0; i < 8; i++) {
LCD_WriteData(studentNo[i]);
delayms(500); // 等待0.5秒
}
LCD_WriteCmd(0x01); // 显示清屏
delayms(500); // 等待0.5秒
}
}
```
4. 最后,可以在主函数中调用初始化函数和循环函数,如下所示:
```c
void main() {
initLCD();
loop();
}
```
完整的代码如下:
```c
#include <reg52.h>
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
#define LCD_DATA P0
void delayms(unsigned int time) {
unsigned int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 110; j++) {
}
}
}
void LCD_WriteCmd(unsigned char cmd) {
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
LCD_EN = 1;
delayms(5);
LCD_EN = 0;
}
void LCD_WriteData(unsigned char dat) {
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = dat;
LCD_EN = 1;
delayms(5);
LCD_EN = 0;
}
void initLCD() {
LCD_WriteCmd(0x38); // 设置16*2显示,5*7点阵,8位数据接口
LCD_WriteCmd(0x0c); // 显示开,光标关闭,光标闪烁关闭
LCD_WriteCmd(0x01); // 显示清屏
LCD_WriteCmd(0x06); // 光标移动方向:从左到右
}
void loop() {
int i = 0;
unsigned char code abbr[5][4] = {"CPU", "RAM", "ROM", "ADC", "DAC"};
unsigned char code studentNo[9] = {"12345678"};
while (1) {
// 显示字符缩写
LCD_WriteCmd(0x80); // 设置光标位置为第一行第一列
for (i = 0; i < 5; i++) {
LCD_WriteData(abbr[i][0]);
LCD_WriteData(abbr[i][1]);
LCD_WriteData(abbr[i][2]);
delayms(500); // 等待0.5秒
LCD_WriteCmd(0x01); // 显示清屏
delayms(500); // 等待0.5秒
}
// 显示学生学号
LCD_WriteCmd(0x80); // 设置光标位置为第一行第一列
for (i = 0; i < 8; i++) {
LCD_WriteData(studentNo[i]);
delayms(500); // 等待0.5秒
}
LCD_WriteCmd(0x01); // 显示清屏
delayms(500); // 等待0.5秒
}
}
void main() {
initLCD();
loop();
}
```
阅读全文