while(tp_dev.sta & TP_PRES_DOWN) { tp_dev.scan(0); } 表示等待用户释放触摸屏。这个是怎么实现的
时间: 2023-07-16 21:11:39 浏览: 170
这段代码通常用于等待用户释放触摸屏,以确保获取到的坐标值是用户最终的触摸位置。在该代码中,`tp_dev.sta & TP_PRES_DOWN` 表示检测到触摸屏被按下,即触摸屏处于按下状态。`tp_dev.scan(0)` 是触摸屏扫描函数,其作用是获取当前触摸屏的坐标值,并将其存储在相应的变量中。当用户释放触摸屏时,`tp_dev.sta & TP_PRES_DOWN` 的值将变为0,跳出循环。因此,这段代码的作用是等待用户释放触摸屏,以确保获取到的坐标值是用户最终的触摸位置。
相关问题
while (1) { tp_dev.scan(0); if (tp_dev.sta & TP_PRES_DOWN) { //触摸屏被按下 if (tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { if (i < 5) { password[i++] = '1'; } while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放 tp_dev.scan(0); } } else if (tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { if (i < 5) { password[i++] = '2'; } while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放 tp_dev.scan(0); } } else if (tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { if (i < 5) { password[i++] = '3'; } while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放 tp_dev.scan(0); } } else if (tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { if (i < 5) { password[i++] = '4'; } while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放 tp_dev.scan(0); } } else if (tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { if (i > 0) { password[--i] = '\0'; } while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放 tp_dev.scan(0); } } else if (tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { if (i == 4) { break; //退出密码输入循环 } else { Show_Hz16(300,250,"提示信息:用户名或密码错误",RED,WHITE); } while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放 tp_dev.scan(0); } } //显示部分 LCD_ShowString(400,150,400,24,24,password); } }详细解释这个代码
这段代码是一个密码输入的程序。通过触摸屏幕获取用户的输入,将输入存储到一个字符数组中,最多输入5个字符。当用户输入完成时,程序会退出输入循环。
具体解释如下:
1. `while (1)` 是一个死循环,表示程序会一直运行直到被人为中断。
2. `tp_dev.scan(0);` 用来扫描触摸屏的状态。
3. `if (tp_dev.sta & TP_PRES_DOWN)` 表示触摸屏被按下。
4. `if (tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480)` 表示触摸点在第一个按键(数字1)上。
5. `if (i < 5) { password[i++] = '1'; }` 表示在密码数组中添加一个字符 '1',并将下标 i 加 1。
6. `while(tp_dev.sta & TP_PRES_DOWN) { tp_dev.scan(0); }` 表示等待用户释放触摸屏。
7. 代码中的其他 if 语句和 while 循环类似,用来判断用户输入的数字并将其添加到密码数组中。
8. `if (i == 4)` 表示当用户输入了四个字符时,退出密码输入循环。
9. `Show_Hz16(300,250,"提示信息:用户名或密码错误",RED,WHITE);` 用来在屏幕上显示提示信息。
10. `LCD_ShowString(400,150,400,24,24,password);` 用来在屏幕上显示用户输入的密码。
总之,这段代码实现了一个简单的密码输入功能。需要注意的是,这段代码只是一个片段,可能需要结合其他部分的代码才能正常运行。
修改这个函数,要实现防止连续点按 while (1) { tp_dev.scan(0); if (tp_dev.sta & TP_PRES_DOWN) { //触摸屏被按下 if (tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '1'; } } else if (tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '2'; } } else if (tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] ='3'; } } else if (tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '4'; } } else if (tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i > 0) { password[--i] = '\0'; } } else if (tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i == 4) { break; //退出密码输入循环 } else { Show_Hz16(300,250,"提示信息:用户名或密码错误",RED,WHITE); } } //显示部分 LCD_ShowString(400,150,400,24,24,password); } }
while (1) {
tp_dev.scan(0);
if (tp_dev.sta & TP_PRES_DOWN) { //触摸屏被按下
if (tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '1';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '2';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '3';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '4';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i > 0) {
password[--i] = '\0';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i == 4) {
break; //退出密码输入循环
} else {
Show_Hz16(300,250,"提示信息:用户名或密码错误",RED,WHITE);
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
}
//显示部分
LCD_ShowString(400,150,400,24,24,password);
}
}
在每个按键输入后,加入一个 while 循环等待触摸屏释放。这样可以防止连续点按导致密码输入错误。
阅读全文