89C52单片机 写一个C语言程序,实现LCD1602显示带一位小数的三位数显示,能显示负数,画出程序流程图
时间: 2024-10-08 19:23:05 浏览: 46
在C语言中,为了在89C52单片机上配合LCD1602显示带一位小数的三位数以及支持负数显示,我们需要设置相关的寄存器来控制液晶屏,并编写主循环来处理用户的输入和显示更新。下面是一个简单的示例程序,包括流程图描述:
```c
#include <REGX.h> // LCD1602寄存器头文件
void lcd_init(); // 初始化LCD函数
void lcd_display(int num, int decimal); // 显示数字函数
char get_digit_from_keyboard(); // 获取键盘输入的函数
int main(void) {
lcd_init();
int num = 0;
while (true) {
// 1. 获取用户输入(假设是负数)
num = -get_digit_from_keyboard();
// 2. 检查输入是否合法(三位数加一位小数)
if (num >= -999 && num <= 999.99) {
// 3. 显示数字
lcd_display(num, 1);
} else {
// 4. 显示错误提示
lcd_gotoxy(0, 1); // 移动到第二行
lcd_putchar('-');
lcd_putstr("Invalid input");
}
}
return 0;
}
// 初始化LCD函数
void lcd_init() {
// 这里包含LCD1602的初始化命令,如SETDDRAMADDR寄存器设置地址等
// ... 具体操作根据实际的LCD1602规格文档进行
}
// 显示数字函数
void lcd_display(int num, int decimal) {
char str[10]; // 存储转换后的字符串
itoa_s(str, num, 10); // 将整数转为字符串,注意这里的s表示无缓冲区版本
// 从字符串左侧开始写入
for (int i = decimal; i < strlen(str); i++) {
lcd_putchar(str[i]);
}
lcd_gotoxy(0, 0); // 重置显示位置
}
// 获取键盘输入的函数(这里假设使用了外部键盘模块)
char get_digit_from_keyboard() {
// 读取键盘输入并转化为字符
// ... 这部分取决于你的具体硬件接口
return '0'; // 示例返回一个字符,实际需替换为获取的数字字符
}
```
**程序流程图**:
1. 初始化 LCD
2. 循环:
a. 获取用户输入
b. 检查输入有效性
c. 数字转换为字符串
d. 清除屏幕并移动光标至正确位置
e. 显示数字和小数点(如有)
f. 判断输入是否非法,给出错误信息
阅读全文