if(keyAdd==0) { mSet++; WriteAddress(0x48); delay_1602(5); WriteData(mSet/10+0x30); delay_1602(5); WriteData(mSet%10+0x30); while(!keyAdd); } if(keyDec==0) { mSet--; WriteAddress(0x48); delay_1602(5); WriteData(mSet/10+0x30); delay_1602(5); WriteData(mSet%10+0x30); delay_1602(5); while(!keyDec); } 具体解释下
时间: 2024-01-06 10:04:45 浏览: 180
这段代码是一个简单的计数器程序,用于通过按键增加或减少一个变量mSet的值,并将其显示在LCD屏幕上。其中,keyAdd和keyDec分别是两个按键的输入信号,当按键被按下时,相应的输入信号会变为0。具体解释如下:
- if(keyAdd==0):如果按键keyAdd被按下,则执行以下代码块。
- mSet++:将变量mSet的值增加1。
- WriteAddress(0x48):设置LCD屏幕的光标位置为第一行第8列,用于显示计数器的数值。
- WriteData(mSet/10+0x30):将mSet的十位数转换为ASCII码,并写入LCD屏幕。
- WriteData(mSet%10+0x30):将mSet的个位数转换为ASCII码,并写入LCD屏幕。
- while(!keyAdd):等待按键keyAdd释放,即等待按键被松开。
类似地,if(keyDec==0)则表示如果按键keyDec被按下,则执行以下代码块,其中mSet--表示将变量mSet的值减少1。其余部分与if(keyAdd==0)的代码块相同。
相关问题
#include "reg52.h" #include "LCD1602.h" #include "LCD1602.c" #include "ADC0832.h" #define uchar unsigned char #define uint unsigned int sbit relay=P1^6; sbit keyAdd=P3^2; sbit keyDec=P3^3; uchar str[]="Curret:00%"; uchar strV[]=" Set:50%"; void delay_ms(uint xms); void main() { uchar i; uchar mCurrent; uchar mSet=50; LcdInt(); Write_com(0x01); //ÇåÆÁ delay_1602(5); WriteAddress(0x03); delay_1602(5); for(i=0;i<11;i++) { WriteData(str[i]); delay_1602(5); } WriteAddress(0x40); delay_1602(5); for(i=0;i<11;i++) { WriteData(strV[i]); delay_1602(5); } while(1) { if(keyAdd==0) { mSet++; WriteAddress(0x48); delay_1602(5); WriteData(mSet/10+0x30); delay_1602(5); WriteData(mSet%10+0x30); while(!keyAdd); } if(keyDec==0) { mSet--; WriteAddress(0x48); delay_1602(5); WriteData(mSet/10+0x30); delay_1602(5); WriteData(mSet%10+0x30); delay_1602(5); while(!keyDec); } mCurrent=ADC0832()*99/255; WriteAddress(0x08); WriteData(mCurrent/10+0x30); WriteData(mCurrent%10+0x30); if(mCurrent<mSet) relay=0; else relay=1; delay_ms(200); } } void delay_ms(uint xms) { uint i,j; for(i=0;i<xms;i++) for(j=0;j<121;j++); }怎么改写显示屏上的数字
要改写显示屏上的数字,需要先确定要改写的数字所在的位置。这个代码中,当前电流值和设定电流值分别在第一行第四个字符和第二行第七个字符的位置。我们可以通过修改这些位置来改写数字。
比如,如果要改写第一行的电流值为“99”,可以将下面这行代码:
```
WriteAddress(0x08);
```
改为:
```
WriteAddress(0x09); // 第一行第五个字符
```
然后在接下来的两行代码中添加:
```
WriteData('9');
WriteData('9');
```
这样就可以将电流值改为“99”了。其他数字同理,只需要修改对应的位置和数字即可。
#include “reg52.h” #include “LCD1602.h” #include “LCD1602.c” #include “ADC0832.h” #define uchar 无符号字符 #define uint 无符号 int sbit relay=P1^6;sbit keyAdd=P3^2;位键Dec=P3^3;uchar str[]=“Curret:00%”;uchar strV[]=“ Set:50%”;void delay_ms(uint xms);void main() { uchar i; uchar mCurrent; uchar mSet=50;LcdInt();Write_com(0x01);ÇåÆÁ delay_1602(5);写入地址(0x03);delay_1602(5);for(i=0;i<11;i++) { WriteData(str[i]); delay_1602(5); }写入地址(0x40);delay_1602(5);for(i=0;i<11;i++) { WriteData(strV[i]); delay_1602(5); } while(1) { if(keyAdd==0) { mSet++;写入地址(0x48);delay_1602(5);WriteData(mSet/10+0x30);delay_1602(5);WriteData(mSet%10+0x30);而(!keyAdd);} if(keyDec==0) { mSet--;写入地址(0x48);delay_1602(5);WriteData(mSet/10+0x30);delay_1602(5);WriteData(mSet%10+0x30);delay_1602(5);而(!keyDec);} mCurrent=ADC0832()*99/255;写入地址(0x08);写入数据(mCurrent/10+0x30);WriteData(mCurrent%10+0x30);if(mCurrent<mSet) 继电器=0;否则中继=1;delay_ms(200);} } void delay_ms(uint xms) { uint i,j; for(i=0;i<xms;i++) for(j=0;j<121;j++); }怎么把set这个改为ok
你需要在代码中将所有的 "mSet" 替换为 "ok",并且需要修改字符串数组 strV[] 为 " Ok:50%"。同时,你还需要修改按键的提示信息为 "Press OK to increase, Press DEC to decrease". 具体的修改如下所示:
```
#include “reg52.h”
#include “LCD1602.h”
#include “LCD1602.c”
#include “ADC0832.h”
#define uchar unsigned char
#define uint unsigned int
sbit relay=P1^6;
sbit keyAdd=P3^2;
sbit keyDec=P3^3;
uchar str[]=“Current:00%”;
uchar strV[]=“Ok:50%”;
void delay_ms(uint xms);
void main()
{
uchar i;
uchar mCurrent;
uchar ok=50;
LcdInit();
Write_com(0x01);
delay_1602(5);
WriteData(0x03);
delay_1602(5);
for(i=0;i<11;i++)
{
WriteData(str[i]);
delay_1602(5);
}
WriteData(0x40);
delay_1602(5);
for(i=0;i<11;i++)
{
WriteData(strV[i]);
delay_1602(5);
}
while(1)
{
if(keyAdd==0)
{
ok++;
WriteData(0x48);
delay_1602(5);
WriteData(ok/10+0x30);
delay_1602(5);
WriteData(ok%10+0x30);
while(!keyAdd);
}
if(keyDec==0)
{
ok--;
WriteData(0x48);
delay_1602(5);
WriteData(ok/10+0x30);
delay_1602(5);
WriteData(ok%10+0x30);
delay_1602(5);
while(!keyDec);
}
mCurrent=ADC0832()*99/255;
WriteData(0x08);
WriteData(mCurrent/10+0x30);
WriteData(mCurrent%10+0x30);
if(mCurrent<ok)
relay=0;
else
relay=1;
delay_ms(200);
}
}
void delay_ms(uint xms)
{
uint i,j;
for(i=0;i<xms;i++)
for(j=0;j<121;j++);
}
```
阅读全文