找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 495|回复: 5
收起左侧

LCD1602液晶怎么往后退一格?

[复制链接]
ID:149043 发表于 2024-7-17 09:30 | 显示全部楼层 |阅读模式
LCD1602液晶显示问题
1602液晶怎么往后退一格,比如输入了数字''789’'想把''9''删除,就剩前两个,这个功能怎么实现?求大佬指点
回复

使用道具 举报

ID:404160 发表于 2024-7-17 12:06 | 显示全部楼层
当然可以,以下是用C51编程语言编写的示例代码,展示如何在1602 LCD上删除最后一个字符。假设你使用的是STC单片机,并且已经连接好了LCD模块:

### 硬件连接
假设1602 LCD连接如下(引脚定义可以根据实际硬件连接调整):
- RS -> P2.0
- RW -> P2.1
- E -> P2.2
- D4 -> P2.4
- D5 -> P2.5
- D6 -> P2.6
- D7 -> P2.7

### 示例代码

```c
#include <reg52.h>

#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_E  P2_2
#define LCD_DATA P2

void delay(unsigned int ms);
void LCD_command(unsigned char cmd);
void LCD_data(unsigned char dat);
void LCD_init(void);
void LCD_setCursor(unsigned char row, unsigned char col);
void LCD_clearLastChar(void);

void main() {
    LCD_init();
    LCD_setCursor(0, 0);
    LCD_data('7');
    LCD_data('8');
    LCD_data('9');
   
    delay(2000); // 延迟2秒
   
    LCD_clearLastChar(); // 删除最后一个字符

    while(1);
}

void delay(unsigned int ms) {
    unsigned int i, j;
    for(i = ms; i > 0; i--)
        for(j = 110; j > 0; j--);
}

void LCD_command(unsigned char cmd) {
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_DATA = (LCD_DATA & 0x0F) | (cmd & 0xF0); // 高四位
    LCD_E = 1;
    delay(1);
    LCD_E = 0;
    delay(1);
    LCD_DATA = (LCD_DATA & 0x0F) | (cmd << 4); // 低四位
    LCD_E = 1;
    delay(1);
    LCD_E = 0;
    delay(1);
}

void LCD_data(unsigned char dat) {
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_DATA = (LCD_DATA & 0x0F) | (dat & 0xF0); // 高四位
    LCD_E = 1;
    delay(1);
    LCD_E = 0;
    delay(1);
    LCD_DATA = (LCD_DATA & 0x0F) | (dat << 4); // 低四位
    LCD_E = 1;
    delay(1);
    LCD_E = 0;
    delay(1);
}

void LCD_init(void) {
    LCD_command(0x28); // 4位模式, 2行, 5x8点阵
    LCD_command(0x0C); // 显示开, 光标关, 不闪烁
    LCD_command(0x06); // 文字不动, 光标右移
    LCD_command(0x01); // 清屏
    delay(2);
}

void LCD_setCursor(unsigned char row, unsigned char col) {
    unsigned char addr;
    if(row == 0)
        addr = 0x80 + col;
    else
        addr = 0xC0 + col;
    LCD_command(addr);
}

void LCD_clearLastChar(void) {
    LCD_command(0x10); // 光标左移一位
    LCD_data(' ');     // 输出空格覆盖原字符
    LCD_command(0x10); // 光标再左移一位,回到空格处
}
```

### 说明
1. `delay` 函数用于产生延时,单位是毫秒。
2. `LCD_command` 函数发送命令到LCD。
3. `LCD_data` 函数发送数据到LCD。
4. `LCD_init` 函数初始化LCD。
5. `LCD_setCursor` 函数设置光标位置。
6. `LCD_clearLastChar` 函数删除最后一个字符,即先将光标左移一位,输出一个空格,再将光标左移到空格的位置。

### 注意事项
- 引脚定义和连接方式可以根据实际硬件连接进行调整。
- 确保在使用LCD前正确初始化。
- 这个代码假设你使用的是4位数据模式,如果你使用8位数据模式,需要调整相关代码。

希望这些能帮到你
回复

使用道具 举报

ID:619259 发表于 2024-7-17 13:18 | 显示全部楼层
不明白你的用意,这种功能用在什么场合?程序是可以实现的,只是意义在哪儿?
回复

使用道具 举报

ID:1109793 发表于 2024-7-17 13:31 | 显示全部楼层
是不显示9还是789变成78?789/10就是78了
回复

使用道具 举报

ID:277550 发表于 2024-7-17 13:32 | 显示全部楼层
光标移位、输出' '
回复

使用道具 举报

ID:69038 发表于 2024-7-17 13:44 | 显示全部楼层
让最后一位显示“ ”空白字符,然后光标后退一位就OK了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表