如何在 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;
            ...
        }
    }
    ...
}

并建议大家在编程之前,可以画一个简单的流程图来理清代码的结构和各个函数之间的关系。