在用51单片机时出现一个问题,设置按键用来切换lcd的显示界面 现在可以显示内容 就是按键设置的时候只能切换一个界面是怎么回事呢?
以下是代码:
LcdWriteCom(0x01);
LCDWrite_String(0, 0, "Set PH L:");
while(state==1)
{
if(K1==0)
{
state++;
while(K1==0);
}
if(K2==0)
{
war=war+1;
if(war>=14)
war=14;
while(K2==0);
}
if(K3==0)
{
war=war-1;
if(war<=1)
war=1;
while(K3==0);
}
LcdWriteCom(0xC0+6);
LcdWriteData('0'+war/10%10);
LcdWriteData('0'+war%10);
}
LcdWriteCom(0x01);
LCDWrite_String(0, 0, "Set PH H:");
while(state==2)
{
if(K1==0)
{
state=3;
while(K1==0);
}
if(K2==0)
{
war2=war2+1;
if(war2>=14)
war2=14;
while(K2==0);
}
if(K3==0)
{
war2=war2-1;
if(war2<=1)
war2=1;
while(K3==0);
}
LcdWriteCom(0xC0+6);
LcdWriteData('0'+war2/10%10);
LcdWriteData('0'+war2%10);
}
结合ChatGPT部分内容参考给出建议:
你的代码中只有两个状态(state==1和state==2),因此只能切换两个界面。要实现切换多个界面,需要增加状态的数量,并在每个状态下设置不同的显示内容和按键响应。以下是一个示例代码,其中有三个状态(state==1、state==2和state==3),分别对应不同的显示内容和按键响应:
LcdWriteCom(0x01);
LCDWrite_String(0, 0, "Set PH L:");
while(state==1)
{
if(K1==0)
{
state++;
while(K1==0);
}
if(K2==0)
{
war=war+1;
if(war>=14)
war=14;
while(K2==0);
}
if(K3==0)
{
war=war-1;
if(war<=1)
war=1;
while(K3==0);
}
LcdWriteCom(0xC0+6);
LcdWriteData('0'+war/10%10);
LcdWriteData('0'+war%10);
}
LcdWriteCom(0x01);
LCDWrite_String(0, 0, "Set PH H:");
while(state==2)
{
if(K1==0)
{
state++;
while(K1==0);
}
if(K2==0)
{
war2=war2+1;
if(war2>=14)
war2=14;
while(K2==0);
}
if(K3==0)
{
war2=war2-1;
if(war2<=1)
war2=1;
while(K3==0);
}
LcdWriteCom(0xC0+6);
LcdWriteData('0'+war2/10%10);
LcdWriteData('0'+war2%10);
}
LcdWriteCom(0x01);
LCDWrite_String(0, 0, "Set PH T:");
while(state==3)
{
if(K1==0)
{
state=1;
while(K1==0);
}
if(K2==0)
{
war3=war3+1;
if(war3>=14)
war3=14;
while(K2==0);
}
if(K3==0)
{
war3=war3-1;
if(war3<=1)
war3=1;
while(K3==0);
}
LcdWriteCom(0xC0+6);
LcdWriteData('0'+war3/10%10);
LcdWriteData('0'+war3%10);
}
在这个示例代码中,增加了一个状态(state==3),并在该状态下设置了不同的显示内容和按键响应。当按下K1键时,状态会从state==3切换到state==1,从而实现了多个界面的切换。你可以根据需要增加更多的状态和相应的显示内容和按键响应。
不太明白只能切换一个界面是什么意思。
是界面1切换到界面2,界面2切不回来界面1吗?如果想要从界面2切换回界面1,则需要把state=3改完state=1;
另外多个条件可以用Switch语句来判断条件,增强代码的可读性。
本节所要实现的功能是:在 LCD1602
液晶上显示字符信息。
程序框架如下:
编写公共文件
打开public.c
,代码如下:
#include "public.h"
/*
函 数 名 : delay_10us
函数功能 : 延时函数,ten_us=1 时,大约延时 10us
输 入 : ten_us
输 出 : 无
*/
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
/*
函 数 名 : delay_ms
函数功能 : ms 延时函数,ms=1 时,大约延时 1ms
输 入 : ten_us
输 出 : 无
*/
void delay_ms(u16 ms)
{
u16 i,j;
for (i=ms;i>0;i--)
{
for (j=110;j>0;j--);
}
}
其头文件public.h
为
/*
头文件作用如下:包含头文件,定义全局变量,声明函数
*/
#ifndef _public_H
#define _public_H
#include "reg52.h"
//对系统默认数据类型进行重定义
typedef unsigned char u8;
typedef unsigned int u16;
//函数声明
void delay_10us(u16 ten_us);
void delay_ms(u16 ms);
#endif
编写 LCD1602 显示函数
编写主函数
#include "public.h"
/*
函 数 名 : delay_10us
函数功能 : 延时函数,ten_us=1 时,大约延时 10us
输 入 : ten_us
输 出 : 无
*/
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
/*
函 数 名 : delay_ms
函数功能 : ms 延时函数,ms=1 时,大约延时 1ms
输 入 : ten_us
输 出 : 无
*/
void delay_ms(u16 ms)
{
u16 i,j;
for (i=ms;i>0;i--)
{
for (j=110;j>0;j--);
}
}