久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 439|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

大佬們看看,我找不到哪錯(cuò)了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1144486 發(fā)表于 2025-4-3 10:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
LCD1602.h(12): error C129: missing ';' before 'lcdQueue'

#include"delay.h"
#ifndef __LCD1602_H__
#define __LCD1602_H__
                    //添加延時(shí)函數(shù)頭文件
#define LCD_PINDATA P0          //數(shù)據(jù)端口定義

sbit RS  =  P1^4;                  //RS
sbit RW  =  P1^5;                  //RW
sbit E   =  P1^6;                  //E

// 初始化LCD隊(duì)列
LCD_Command lcdQueue[LCD_QUEUE_SIZE];
volatile bit lcdBusy = 0;
unsigned char lcdQueueHead = 0;
unsigned char lcdQueueTail = 0;
unsigned char lcdQueueCount = 0;

// 函數(shù)實(shí)現(xiàn)
void WriteCOMDATA(unsigned char dat, unsigned char cmd)
{
    // 如果隊(duì)列已滿,返回,防止死循環(huán)
    if(lcdQueueCount >= LCD_QUEUE_SIZE) return;

    // 添加到隊(duì)列
    lcdQueue[lcdQueueTail].data = dat;
    lcdQueue[lcdQueueTail].isCommand = cmd;
    lcdQueueTail = (lcdQueueTail + 1) % LCD_QUEUE_SIZE;
    lcdQueueCount++;
}

unsigned char CheckBusy(void) {
    LCD_PINDATA = 0xFF; // 設(shè)置數(shù)據(jù)端口為輸入模式
    RS = 0;              // 選擇指令寄存器
    RW = 1;              // 設(shè)置為讀模式
    E = 1;               // 使能高電平
    unsigned char busy = (LCD_PINDATA & 0x80); // 讀取忙標(biāo)志
    E = 0;               // 使能低電平
    return busy;
}

void LCD_Process(void)
{
    if(lcdQueueCount > 0 && !lcdBusy)
    {
        // 從隊(duì)列中取出下一個(gè)命令或數(shù)據(jù)
        LCD_Command cmd = lcdQueue[lcdQueueHead];
        lcdQueueHead = (lcdQueueHead + 1) % LCD_QUEUE_SIZE;
        lcdQueueCount--;

        lcdBusy = 1;

        // 發(fā)送命令或數(shù)據(jù)
        E = 0;
        RS = cmd.isCommand ? 0 : 1; // 命令模式或數(shù)據(jù)模式
        RW = 0; // 寫(xiě)模式
        LCD_PINDATA = cmd.data;
        Delay_us(1); // 短暫延時(shí),確保數(shù)據(jù)穩(wěn)定
        E = 1; // 使能高電平
        Delay_us(1); // 等待數(shù)據(jù)穩(wěn)定
        E = 0; // 使能低電平
        Delay_us(20); // 命令執(zhí)行時(shí)間(根據(jù)LCD數(shù)據(jù)手冊(cè)調(diào)整)

        lcdBusy = 0;
    }
}

void WriteCOMDATA(uchar LCD_DATA,uchar N)
{
        Delay(5);
        E=1;
        RW=0;
        RS=N;
        LCD_PINDATA=LCD_DATA;
        E=0;
}

void LCD_Init(void)
{
    WriteCOMDATA(0x01,0);
        Delay(500);
        WriteCOMDATA(0x38,0);
        Delay(10);
        WriteCOMDATA(0x06,0);
        Delay(10);
        WriteCOMDATA(0x0C,0);
        Delay(10);
}

void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)
{
        uchar i;
        if(Row==1)Row=0x80+Col;
        else Row=0xC0+Col;
        WriteCOMDATA(Row,0);
        for(i=Num;i!=0;i--)
        {       
                WriteCOMDATA(*pBuffer,1);       
                pBuffer++;
        }
}

#endif

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1109793 發(fā)表于 2025-4-3 12:32 | 只看該作者
LCD_Command定義在哪兒?
回復(fù)

使用道具 舉報(bào)

板凳
ID:1144486 發(fā)表于 2025-4-3 12:47 | 只看該作者
#ifndef __LCD1602_H__
#define __LCD1602_H__

#include "delay.h"                    //添加延時(shí)函數(shù)頭文件
#include <reg52.h>           // 確保包含單片機(jī)相關(guān)的頭文件

// 添加 uchar 類(lèi)型定義
typedef unsigned char uchar;

// 數(shù)據(jù)端口定義
#define LCD_PINDATA P0          //數(shù)據(jù)端口定義

// 控制端口定義
sbit RS  =  P1^4;                  //RS
sbit RW  =  P1^5;                  //RW
sbit E   =  P1^6;                  //E

// 添加隊(duì)列長(zhǎng)度定義
#define LCD_QUEUE_SIZE 32

// 結(jié)構(gòu)體定義
typedef struct {
    unsigned char data;
    unsigned char isCommand;
} LCD_Command;

// 初始化LCD隊(duì)列
LCD_Command lcdQueue[LCD_QUEUE_SIZE];
volatile bit lcdBusy = 0;
unsigned char lcdQueueHead = 0;
unsigned char lcdQueueTail = 0;
unsigned char lcdQueueCount = 0;

// 函數(shù)聲明
void WriteCOMDATA(unsigned char dat, unsigned char cmd);
unsigned char CheckBusy(void);
void LCD_Process(void);
void WriteChar(uchar Row, uchar Col, uchar Num, uchar *pBuffer);
void LCD_Init(void);

// 函數(shù)實(shí)現(xiàn)
void WriteCOMDATA(unsigned char dat, unsigned char cmd)
{
    // 如果隊(duì)列已滿,返回,防止死循環(huán)
    if(lcdQueueCount >= LCD_QUEUE_SIZE) return;

    // 添加到隊(duì)列
    lcdQueue[lcdQueueTail].data = dat;
    lcdQueue[lcdQueueTail].isCommand = cmd;
    lcdQueueTail = (lcdQueueTail + 1) % LCD_QUEUE_SIZE;
    lcdQueueCount++;
}

unsigned char CheckBusy(void) {
    LCD_PINDATA = 0xFF; // 設(shè)置數(shù)據(jù)端口為輸入模式
    RS = 0;              // 選擇指令寄存器
    RW = 1;              // 設(shè)置為讀模式
    E = 1;               // 使能高電平
    unsigned char busy = (LCD_PINDATA & 0x80); // 讀取忙標(biāo)志
    E = 0;               // 使能低電平
    return busy;
}

void LCD_Process(void)
{
    if(lcdQueueCount > 0 && !lcdBusy)
    {
        // 從隊(duì)列中取出下一個(gè)命令或數(shù)據(jù)
        LCD_Command cmd = lcdQueue[lcdQueueHead];
        lcdQueueHead = (lcdQueueHead + 1) % LCD_QUEUE_SIZE;
        lcdQueueCount--;

        lcdBusy = 1;

        // 發(fā)送命令或數(shù)據(jù)
        E = 0;
        RS = cmd.isCommand ? 0 : 1; // 命令模式或數(shù)據(jù)模式
        RW = 0; // 寫(xiě)模式
        LCD_PINDATA = cmd.data;
        Delay_us(1); // 短暫延時(shí),確保數(shù)據(jù)穩(wěn)定
        E = 1; // 使能高電平
        Delay_us(1); // 等待數(shù)據(jù)穩(wěn)定
        E = 0; // 使能低電平
        Delay_us(20); // 命令執(zhí)行時(shí)間(根據(jù)LCD數(shù)據(jù)手冊(cè)調(diào)整)

        lcdBusy = 0;
    }
}

void LCD_Init(void)
{
    Delay_ms(20); // 上電延時(shí),確保LCD穩(wěn)定
    WriteCOMDATA(0x38, 1); // 功能設(shè)置:8位模式,雙行顯示
    Delay_ms(5);
    WriteCOMDATA(0x38, 1); // 重復(fù)發(fā)送確保初始化成功
    Delay_ms(1);
    WriteCOMDATA(0x0C, 1); // 顯示開(kāi),光標(biāo)關(guān)
    Delay_ms(1);
    WriteCOMDATA(0x06, 1); // 光標(biāo)右移
    Delay_ms(1);
    WriteCOMDATA(0x01, 1); // 清屏
    Delay_ms(2); // 清屏需要較長(zhǎng)延時(shí)
}

void WriteChar(uchar Row, uchar Col, uchar Num, uchar *pBuffer)
{
    uchar address;
    if(Row == 1)
        address = 0x80 + Col;
    else
        address = 0xC0 + Col;
    WriteCOMDATA(address, 1); // 設(shè)置光標(biāo)位置
    for(uchar i = 0; i < Num; i++)
    {
        WriteCOMDATA(*pBuffer++, 0); // 寫(xiě)入數(shù)據(jù)
    }
}

#endif
回復(fù)

使用道具 舉報(bào)

地板
ID:1144486 發(fā)表于 2025-4-3 12:48 | 只看該作者
xiaobendan001 發(fā)表于 2025-4-3 12:32
LCD_Command定義在哪兒?

// 結(jié)構(gòu)體定義
typedef struct {
    unsigned char data;
    unsigned char isCommand;
} LCD_Command;                  這個(gè)可以嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:1144486 發(fā)表于 2025-4-3 12:48 | 只看該作者
這個(gè)可以嗎// 結(jié)構(gòu)體定義 typedef struct {     unsigned char data;     unsigned char isCommand; } LCD_Command;
回復(fù)

使用道具 舉報(bào)

6#
ID:1144486 發(fā)表于 2025-4-3 12:51 | 只看該作者
后面定義后面加了// 結(jié)構(gòu)體定義
typedef struct {
    unsigned char data;
    unsigned char isCommand;
} LCD_Command;
回復(fù)

使用道具 舉報(bào)

7#
ID:1144486 發(fā)表于 2025-4-3 12:58 | 只看該作者
xiaobendan001 發(fā)表于 2025-4-3 12:32
LCD_Command定義在哪兒?

這個(gè)算嗎

#include <reg52.h>           // 確保包含單片機(jī)相關(guān)的頭文件

// 添加 uchar 類(lèi)型定義
unsigned char data;
unsigned char isCommand;
unsigned char LCD_Command

// 數(shù)據(jù)端口定義
#define LCD_PINDATA P0          //數(shù)據(jù)端口定義
回復(fù)

使用道具 舉報(bào)

8#
ID:879809 發(fā)表于 2025-4-3 13:35 | 只看該作者
沒(méi)貼全,把完整文件傳上來(lái)。
回復(fù)

使用道具 舉報(bào)

9#
ID:1121801 發(fā)表于 2025-4-3 13:37 | 只看該作者
變量lcdQueue定義缺少;號(hào),查一下定義變量的語(yǔ)句啊
回復(fù)

使用道具 舉報(bào)

10#
ID:1109793 發(fā)表于 2025-4-3 15:00 | 只看該作者
竊格瓦拉101 發(fā)表于 2025-4-3 12:51
后面定義后面加了// 結(jié)構(gòu)體定義
typedef struct {
    unsigned char data;

這個(gè)要加在前邊吧
回復(fù)

使用道具 舉報(bào)

11#
ID:1144486 發(fā)表于 2025-4-3 16:06 | 只看該作者
#ifndef __LCD1602_H__
#define __LCD1602_H__

#include <reg52.h>

// ===== 必須添加的延時(shí)函數(shù)原型聲明 =====
void Delay_us(unsigned int us);  // 微秒級(jí)延時(shí)聲明
void Delay_ms(unsigned int ms);  // 毫秒級(jí)延時(shí)聲明

// ========== 硬件接口定義 ==========
#define LCD_PINDATA P0
#define LCD_QUEUE_SIZE 32

// 控制端口定義
sbit RS  = P1^4;
sbit RW  = P1^5;
sbit E   = P1^6;

// ========== 全局變量定義 ==========
unsigned char lcdData[LCD_QUEUE_SIZE];
unsigned char lcdCmd[LCD_QUEUE_SIZE];
volatile bit lcdBusy = 0;
unsigned char lcdQueueHead = 0;
unsigned char lcdQueueTail = 0;
unsigned char lcdQueueCount = 0;

// ========== 函數(shù)聲明 ==========
void WriteCOMDATA(unsigned char dat, unsigned char cmd);
unsigned char CheckBusy(void);
void LCD_Process(void);
void WriteChar(unsigned char Row, unsigned char Col, unsigned char Num, unsigned char *pBuffer);
void LCD_Init(void);

// ========== 函數(shù)實(shí)現(xiàn) ==========
void WriteCOMDATA(unsigned char dat, unsigned char cmd)
{
    if(lcdQueueCount >= LCD_QUEUE_SIZE) return;
    lcdData[lcdQueueTail] = dat;
    lcdCmd[lcdQueueTail] = cmd;
    lcdQueueTail = (lcdQueueTail + 1) % LCD_QUEUE_SIZE;
    lcdQueueCount++;
}

unsigned char CheckBusy(void)
{
    unsigned char busy;
    LCD_PINDATA = 0xFF;  // 設(shè)置輸入模式
    RS = 0;  // 命令模式
    RW = 1;  // 讀操作
    E = 1;   // 使能高電平
    busy = (LCD_PINDATA & 0x80);  // 讀取忙標(biāo)志
    E = 0;   // 使能低電平
    return busy;
}

void LCD_Process(void)
{
    if(lcdQueueCount > 0 && !lcdBusy)
    {
        unsigned char cmd = lcdCmd[lcdQueueHead];
        unsigned char dat = lcdData[lcdQueueHead];
        lcdQueueHead = (lcdQueueHead + 1) % LCD_QUEUE_SIZE;
        lcdQueueCount--;

        lcdBusy = 1;
        E = 0;
        RS = (cmd == 1) ? 1 : 0;  // cmd=1:數(shù)據(jù)模式, cmd=0:命令模式
        RW = 0;  // 寫(xiě)操作
        LCD_PINDATA = dat;
        Delay_us(1);  // 等待信號(hào)穩(wěn)定
        E = 1;        // 產(chǎn)生使能脈沖
        Delay_us(1);
        E = 0;
        Delay_us(40);  // 確保命令執(zhí)行時(shí)間

        lcdBusy = 0;
    }
}

void LCD_Init(void)
{
    Delay_ms(20);  // LCD上電穩(wěn)定時(shí)間
    WriteCOMDATA(0x38, 0);  // 功能設(shè)置:8位,2行,5x8點(diǎn)陣
    Delay_ms(5);
    WriteCOMDATA(0x0C, 0);  // 顯示開(kāi),光標(biāo)關(guān)
    Delay_ms(5);
    WriteCOMDATA(0x06, 0);  // 光標(biāo)右移
    Delay_ms(5);
    WriteCOMDATA(0x01, 0);  // 清屏
    Delay_ms(2);
}

void WriteChar(unsigned char Row, unsigned char Col, unsigned char Num, unsigned char *pBuffer)
{
    unsigned char address;
    // 計(jì)算DDRAM地址
    address = (Row == 1) ? (0x80 + Col) : (0xC0 + Col);
    WriteCOMDATA(address, 0);  // 發(fā)送地址命令
    while(Num--)
    {
        WriteCOMDATA(*pBuffer++, 1);  // 發(fā)送字符數(shù)據(jù)
    }
}

#endif // __LCD1602_H__
回復(fù)

使用道具 舉報(bào)

12#
ID:1144486 發(fā)表于 2025-4-3 16:07 | 只看該作者
cyi8 發(fā)表于 2025-4-3 13:37
變量lcdQueue定義缺少;號(hào),查一下定義變量的語(yǔ)句啊

看著好像沒(méi)出什么毛病
回復(fù)

使用道具 舉報(bào)

13#
ID:1144486 發(fā)表于 2025-4-3 16:18 | 只看該作者
main.c(352): error C249: 'DATA': SEGMENT TOO LARGE  
,是不是要用什么結(jié)構(gòu)體來(lái)一鍵定義全局變量
程序:#include <reg52.h>
#include "LCD1602.h"
#include "dht11.h"
#include "adc0832.h"
#include "delay.h"
#include <math.h>
#include <stdio.h>

// 硬件接口定義
sbit BUZZER = P1^3;      // 蜂鳴器連接P1^3
sbit LED1 = P2^0;        // LED1 連接P2^0
sbit LED2 = P2^1;        // LED2 連接P2^1
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;

// 矩陣鍵盤(pán)定義
#define ROWS 4
#define COLS 4
sbit ROW1 = P3^0;
sbit ROW2 = P3^1;
sbit ROW3 = P3^2;
sbit ROW4 = P3^3;
sbit COL1 = P3^4;
sbit COL2 = P3^5;
sbit COL3 = P3^6;
sbit COL4 = P3^7;

// 函數(shù)聲明
void InitUART(void);
void UART_send_byte(char dat);
void UART_send_string(unsigned char *buf);
void check_thresholds(void);
void check_alarms(void);
void update_display(void);
void set_parameters(void);
unsigned char get_key(void);
void LCD_Process(void);
unsigned char scan_key(void);  // 添加函數(shù)原型

// 全局變量
unsigned char keymap[ROWS][COLS] = {
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'}
};

char disp1[16] = "PM2.5:0000ug/m3 ";
char disp2[16] = "T :00C    RH:00%";

unsigned char Rx_buf[4], Rxnum = 0;
int T1L = 15, T1H = 35, R1L = 30, R1H = 80;
double PM, pm1 = 0.0, pm2 = 0.0;
int PMVAL = 0, HPM = 200, PM_count = 0, pm1_count = 0;
unsigned char T1_data = 0, R1_data = 0, T2_data = 0, R2_data = 0; // 溫度、濕度變量
unsigned char shezhi_flag = 1, Mode_flag = 1, n = 1; // 設(shè)置變量
unsigned char buzzer_flag = 0, count = 0, buzzer_time = 9; // 蜂鳴器報(bào)警變量
unsigned long Mode_count = 0;

// 主函數(shù)
void main(void)
{
    // 初始化代碼
    InitUART(); // 初始化串口
    LCD_Init();
    WriteChar(1, 0, 16, "PM2.5:0000ug/m3 "); // 在第一行顯示‘PM2.5:0000ug/m3 ’
    WriteChar(2, 0, 16, "T :00C    RH:00%"); // 在第二行顯示‘T :00C    RH:00%’

    while(1)
    {
        unsigned char key;  // 變量聲明移至代碼塊開(kāi)始

        // 讀取傳感器數(shù)據(jù)
        T1_data = Read_TRH(0, 0); // 溫度
        disp2[3] = T1_data / 10 + '0'; // 十位
        disp2[4] = T1_data % 10 + '0'; // 個(gè)位

        R1_data = Read_TRH(1, 0); // 濕度
        disp2[13] = R1_data / 10 + '0'; // 十位
        disp2[14] = R1_data % 10 + '0'; // 個(gè)位

        // PM2.5 數(shù)據(jù)處理
        pm1 += read_data(1);
        if(++PM_count >= 20)
        {
            PM_count = 0;
            pm1 /= 20.0;
            pm2 += pm1;
            pm1 = 0.0;
            if(++pm1_count >= 5)
            {
                pm1_count = 0;
                PM = pm2 / 5.0;
                PM = (PM * 50.0 / 255.0) - 4.0;
                PM /= 5.0;
                PM *= 1000.0;
                PMVAL = (int)PM;
                PMVAL += 235;
                PMVAL /= 9;
                if(PMVAL >= 9999) PMVAL = 9999;
                // PM2.5 顯示
                WriteCOMDATA(0x86, 0);
                if(PMVAL < 0)
                {
                    WriteCOMDATA('0', 1);
                    PMVAL = abs(PMVAL);
                }
                else
                {
                    WriteCOMDATA((PMVAL / 1000 % 10 + '0'), 1);
                    WriteCOMDATA((PMVAL / 100 % 10 + '0'), 1);
                    WriteCOMDATA((PMVAL / 10 % 10 + '0'), 1);
                    WriteCOMDATA((PMVAL % 10 + '0'), 1);
                }
                pm1 = pm2 = 0.0;
            }
        }

        // 報(bào)警檢測(cè)
        check_thresholds();
        check_alarms();

        // 更新顯示
        update_display();

        // 設(shè)置模式處理
        if(Mode_flag == 0)
        {
            set_parameters();
        }

        // 處理LCD隊(duì)列
        LCD_Process();

        // 按鍵處理
        key = get_key();
        if(key)
        {
            switch(key)
            {
                case '1':
                    T1L = (T1L < T1H - 1) ? T1L + 1 : T1H - 1;
                    break;
                case '2':
                    T1L = (T1L > 0) ? T1L - 1 : 0;
                    break;
                case '3':
                    T1H = (T1H < 99) ? T1H + 1 : 99;
                    break;
                case 'A':
                    T1H = (T1H > T1L + 1) ? T1H - 1 : T1L + 1;
                    break;
                case '4':
                    R1L = (R1L < R1H - 1) ? R1L + 1 : R1H - 1;
                    break;
                case '5':
                    R1L = (R1L > 0) ? R1L - 1 : 0;
                    break;
                case '6':
                    R1H = (R1H < 99) ? R1H + 1 : 99;
                    break;
                case 'B':
                    R1H = (R1H > R1L + 1) ? R1H - 1 : R1L + 1;
                    break;
                case '7':
                    HPM = (HPM < 9999) ? HPM + 1 : 9999;
                    break;
                case '8':
                    HPM = (HPM > 0) ? HPM - 1 : 0;
                    break;
                case '9':
                    HPM = (HPM < 9999) ? HPM + 1 : 9999;
                    break;
                case 'C':
                    HPM = (HPM > 0) ? HPM - 1 : 0;
                    break;
                case '*':
                    shezhi_flag = (shezhi_flag + 1) % 4;
                    break;
                case '0':
                    shezhi_flag = 0;
                    break;
                case '#':
                    shezhi_flag = 0;
                    break;
                case 'D':
                    Mode_flag = !Mode_flag;
                    break;
                default:
                    break;
            }
        }
    }
}

// 獲取按鍵函數(shù)(添加消抖機(jī)制)
unsigned char get_key(void)
{
    static unsigned char last_key = 0;
    unsigned char new_key = scan_key();
    if(new_key != 0 && new_key == last_key)
    {
        Delay_ms(10);  // 消抖延時(shí)
        if(new_key == scan_key()) return new_key;
    }
    last_key = new_key;
    return 0;
}

// 掃描按鍵函數(shù)(修正行列掃描邏輯)
unsigned char scan_key(void)
{
    unsigned char row, col;
    for(row = 0; row < ROWS; row++)
    {
        // 行掃描
        switch(row)
        {
            case 0: COL1 = 0; COL2 = COL3 = COL4 = 1; break;
            case 1: COL2 = 0; COL1 = COL3 = COL4 = 1; break;
            case 2: COL3 = 0; COL1 = COL2 = COL4 = 1; break;
            case 3: COL4 = 0; COL1 = COL2 = COL3 = 1; break;
        }
        Delay_ms(2); // 消抖延時(shí)

        for(col = 0; col < COLS; col++)
        {
            if(!ROW1 && col == 0) return keymap[row][col];
            else if(!ROW2 && col == 1) return keymap[row][col];
            else if(!ROW3 && col == 2) return keymap[row][col];
            else if(!ROW4 && col == 3) return keymap[row][col];
        }

        // 恢復(fù)列狀態(tài)
        COL1 = COL2 = COL3 = COL4 = 1;
    }
    return 0; // 無(wú)按鍵按下
}

// 閾值檢測(cè)函數(shù)
void check_thresholds(void)
{
    LED1 = (T1_data > T1H) ? 1 : 0;
    LED2 = (T1_data < T1L) ? 1 : 0;
    LED3 = (R1_data > R1H) ? 1 : 0;
    LED4 = (R1_data < R1L) ? 1 : 0;
    LED5 = (PMVAL > HPM) ? 1 : 0;
}

// 報(bào)警檢測(cè)函數(shù)
void check_alarms(void)
{
    static unsigned char alarm_cnt = 0;
    if(T1_data > T1H || T1_data < T1L ||
       R1_data > R1H || R1_data < R1L ||
       PMVAL > HPM){
        BUZZER = 0; // 低電平觸發(fā)蜂鳴器
        alarm_cnt = 50; // 持續(xù)報(bào)警時(shí)間
    }
    else if(alarm_cnt > 0){
        BUZZER = (alarm_cnt-- % 2); // 間歇報(bào)警
    }
    else{
        BUZZER = 1; // 關(guān)閉蜂鳴器
    }
}

// 顯示更新函數(shù)
void update_display(void)
{
    char buf[16];
    if(Mode_flag)
    {
        // 實(shí)時(shí)數(shù)據(jù)顯示
        sprintf(buf, "T:%02d RH:%02d", T1_data, R1_data);
        WriteChar(2, 0, 16, buf);
    }
    else
    {
        // 參數(shù)設(shè)置顯示
        char disp_set[16];
        switch(shezhi_flag)
        {
            case 1: sprintf(disp_set, "T_SET:%02d-%02d ", T1L, T1H); break;
            case 2: sprintf(disp_set, "H_SET:%02d-%02d ", R1L, R1H); break;
            case 3: sprintf(disp_set, "PM_SET:%04d ", HPM); break;
            default: sprintf(disp_set, "SET MODE      "); break;
        }
        WriteChar(2, 0, 16, disp_set);
    }
}

// 參數(shù)設(shè)置函數(shù)
void set_parameters(void)
{
    unsigned char key = get_key();
    if(key)
    {
        switch(key)
        {
            case '1':
                T1L = (T1L < T1H - 1) ? T1L + 1 : T1H - 1;
                break;
            case '2':
                T1L = (T1L > 0) ? T1L - 1 : 0;
                break;
            case '3':
                T1H = (T1H < 99) ? T1H + 1 : 99;
                break;
            case 'A':
                T1H = (T1H > T1L + 1) ? T1H - 1 : T1L + 1;
                break;
            case '4':
                R1L = (R1L < R1H - 1) ? R1L + 1 : R1H - 1;
                break;
            case '5':
                R1L = (R1L > 0) ? R1L - 1 : 0;
                break;
            case '6':
                R1H = (R1H < 99) ? R1H + 1 : 99;
                break;
            case 'B':
                R1H = (R1H > R1L + 1) ? R1H - 1 : R1L + 1;
                break;
            case '7':
                HPM = (HPM < 9999) ? HPM + 1 : 9999;
                break;
            case '8':
                HPM = (HPM > 0) ? HPM - 1 : 0;
                break;
            case '9':
                HPM = (HPM < 9999) ? HPM + 1 : 9999;
                break;
            case 'C':
                HPM = (HPM > 0) ? HPM - 1 : 0;
                break;
            case '*':
                shezhi_flag = (shezhi_flag + 1) % 4;
                break;
            case '0':
            case '#':
                shezhi_flag = 0;
                break;
            case 'D':
                Mode_flag = !Mode_flag;
                break;
            default:
                break;
        }
    }
}
回復(fù)

使用道具 舉報(bào)

14#
ID:1146851 發(fā)表于 2025-4-3 17:20 | 只看該作者
在使用 LCD_Command 定義數(shù)組 lcdQueue 之前,先定義 LCD_Command 結(jié)構(gòu)體類(lèi)型。
回復(fù)

使用道具 舉報(bào)

15#
ID:1109793 發(fā)表于 2025-4-4 08:31 | 只看該作者
竊格瓦拉101 發(fā)表于 2025-4-3 16:18
main.c(352): error C249: 'DATA': SEGMENT TOO LARGE  
,是不是要用什么結(jié)構(gòu)體來(lái)一鍵定義全局變量 ...

翻譯一下提示內(nèi)容嘛
大概是代碼使用超了DATA容量了,比如你可以把unsigned char keymap[ROWS][COLS] 改成unsigned char code keymap[ROWS][COLS]
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品在线播放 | 视频一区中文字幕 | 国产精品免费大片 | av资源网站 | 男女免费网站 | 国际精品久久 | 成人永久免费视频 | 成人免费视频一区 | 亚洲成av人片在线观看 | 精品国产一区二区三区成人影院 | caoporn地址 | 久久久蜜桃一区二区人 | 久草电影网 | 日韩一区二区在线免费观看 | 国产精品久久av | 2019天天干夜夜操 | 日日操日日干 | 中文字幕中文字幕 | 一区二区三区久久久 | 免费av电影网站 | 久久综合激情 | 99福利视频导航 | 精品国产乱码久久久久久88av | v片网站 | 九色91视频 | 大象一区| 欧美日韩成人影院 | 一区二区av| 情侣av| 欧美一级电影免费 | 日韩欧美亚洲 | 欧美在线一区二区三区 | 二区中文字幕 | 欧美激情精品久久久久久免费 | 久久伊人精品 | 91高清免费观看 | 欧美成人一级 | 午夜视频免费在线观看 | 97久久精品午夜一区二区 | 国产精品视频一二三区 | 亚洲高清av在线 |