如何在 LCD 的不同屏幕上增加计数?
How to increment the count in different screens in LCD?
我有 2 个不同的 LCD 屏幕与一个 8051 微控制器相连。当按下按钮时,我想增加 LCD 上位于同一位置 (1,0) 的两个屏幕上的计数。使用三个按钮,一个用于将光标移动到该位置,另一个用于增加计数,另一个用于更改屏幕。但是当我按下第二个屏幕上的按钮时,它会增加 temp
值,但我希望增加 temp1
值。
如何使用同一个按钮增加第二个屏幕的数量?
在这里,我将第一个屏幕数增加为:
#include <stdio.h>
#include <string.h>
#include <stdint.h>
void display_screen1(void);
void display_screen2(void);
void change_screen(void);
void move_cursor(void);
void increment(void);
int set_cursor_position(uint_fast8_t row, uint_fast8_t col);
int temp = '2';
int temp1 = '5';
int first = 1;
int second = 0;
int count = 0;
unsigned char button0 = 0;
unsigned char button1 = 0;
unsigned char button2 = 0;
int set_cursor_position(uint_fast8_t row, uint_fast8_t col)
{
if (row)
{
col |= 0x40;
}
col |= 0x80;
lcd_cout(col);
return 0;
}
void display_screen1(void)
{
lcd_l2(0x80); //position on LCD (1,0)
lcd_dout(temp); //displaying on LCD
}
void display_screen2(void)
{
lcd_l2(0x80);
lcd_dout(temp1);
}
void change_screen(void)
{
if (button0 == 1)
{
if(count == 0) {
count++;
delay_msec(100);
display_screen1();
button0 = 0;
}
else if (count == 1) {
display_screen2();
count = 0;
button0 = 0;
}
}
void move_cursor(void)
{
if (button1 == 1)
{
if (second > 1 && second <= 6)
{
first = 1;
second = second + 1;
if (second > 6)
second = 2;
set_cursor_position(first, second);
}
button1 = 0;
}
}
void increment(void)
{
if (button2 == 1) //if button is pressed
{
temp++;
if (temp > 0x39)
temp = 0x30;
lcd_dout(temp);
}
set_cursor_position(1, 0);
button2 = 0;
}
第一
你应该需要一个变量来记录当前使用的是什么LCD。
否则,8051
无法在正确的 LCD 上增加计数。
所以您可以尝试在 void change_screen(void)
.
中添加一个变量
第二
在增加计数之前,8051
需要判断你使用的是哪款LCD。
所以需要在void increment(void)
中加入判断
概念如下:
enum{
LCD1,
LCD2
}LCD_NUM;
bool SwitchLCD_flag=false;
void change_screen(void)
{
if (ChangeLCD_button == 1)
{
....
// When pressed the button, switch the LCD_NUM.
SwitchLCD_flag = !SwitchLCD_flag;
switch(SwitchLCD_flag) {
case 0:
LCD_NUM = LCD1;
...
break;
case 1:
LCD_NUM = LCD2;
...
break;
}
}
}
第三
现在,8051
知道正在使用哪个 LCD。
所以可以在判断函数中写增加函数
概念如下:
void increment(void)
{
if (Increase_button == 1)
{
switch(LCD_NUM){
case LCD1:
LCD1_count++;
break;
case LCD2:
LCD2_count++;
break;
...
}
}
...
}
并建议大家在编程之前,可以画一个简单的流程图来理清代码的结构和各个函数之间的关系。
我有 2 个不同的 LCD 屏幕与一个 8051 微控制器相连。当按下按钮时,我想增加 LCD 上位于同一位置 (1,0) 的两个屏幕上的计数。使用三个按钮,一个用于将光标移动到该位置,另一个用于增加计数,另一个用于更改屏幕。但是当我按下第二个屏幕上的按钮时,它会增加 temp
值,但我希望增加 temp1
值。
如何使用同一个按钮增加第二个屏幕的数量?
在这里,我将第一个屏幕数增加为:
#include <stdio.h>
#include <string.h>
#include <stdint.h>
void display_screen1(void);
void display_screen2(void);
void change_screen(void);
void move_cursor(void);
void increment(void);
int set_cursor_position(uint_fast8_t row, uint_fast8_t col);
int temp = '2';
int temp1 = '5';
int first = 1;
int second = 0;
int count = 0;
unsigned char button0 = 0;
unsigned char button1 = 0;
unsigned char button2 = 0;
int set_cursor_position(uint_fast8_t row, uint_fast8_t col)
{
if (row)
{
col |= 0x40;
}
col |= 0x80;
lcd_cout(col);
return 0;
}
void display_screen1(void)
{
lcd_l2(0x80); //position on LCD (1,0)
lcd_dout(temp); //displaying on LCD
}
void display_screen2(void)
{
lcd_l2(0x80);
lcd_dout(temp1);
}
void change_screen(void)
{
if (button0 == 1)
{
if(count == 0) {
count++;
delay_msec(100);
display_screen1();
button0 = 0;
}
else if (count == 1) {
display_screen2();
count = 0;
button0 = 0;
}
}
void move_cursor(void)
{
if (button1 == 1)
{
if (second > 1 && second <= 6)
{
first = 1;
second = second + 1;
if (second > 6)
second = 2;
set_cursor_position(first, second);
}
button1 = 0;
}
}
void increment(void)
{
if (button2 == 1) //if button is pressed
{
temp++;
if (temp > 0x39)
temp = 0x30;
lcd_dout(temp);
}
set_cursor_position(1, 0);
button2 = 0;
}
第一
你应该需要一个变量来记录当前使用的是什么LCD。
否则,8051
无法在正确的 LCD 上增加计数。
所以您可以尝试在 void change_screen(void)
.
第二
在增加计数之前,8051
需要判断你使用的是哪款LCD。
所以需要在void increment(void)
概念如下:
enum{
LCD1,
LCD2
}LCD_NUM;
bool SwitchLCD_flag=false;
void change_screen(void)
{
if (ChangeLCD_button == 1)
{
....
// When pressed the button, switch the LCD_NUM.
SwitchLCD_flag = !SwitchLCD_flag;
switch(SwitchLCD_flag) {
case 0:
LCD_NUM = LCD1;
...
break;
case 1:
LCD_NUM = LCD2;
...
break;
}
}
}
第三
现在,8051
知道正在使用哪个 LCD。
所以可以在判断函数中写增加函数
概念如下:
void increment(void)
{
if (Increase_button == 1)
{
switch(LCD_NUM){
case LCD1:
LCD1_count++;
break;
case LCD2:
LCD2_count++;
break;
...
}
}
...
}
并建议大家在编程之前,可以画一个简单的流程图来理清代码的结构和各个函数之间的关系。