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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 478|回復: 3
打印 上一主題 下一主題
收起左側

各位大佬看看這個程序是啥問題,現在12864不顯示,硬件沒有問題 歡迎指導

[復制鏈接]
跳轉到指定樓層
樓主
ID:604763 發表于 2025-4-15 10:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
12864做顯示屏,串口顯示,定義P0.7,RS;P0.6,RW;P0.5,E;P0.4PSB;P0.3,RST。P1.0加熱繼電器,P1.1電機正轉,P1.2電機反轉,P1.3進水電磁閥,P1,4排水,P1.5門鎖,定義P3.2為程序鍵(短按切換清洗和燙染程序長按設置工作時間,電機旋轉時間,溫度,燙染是否排水),p3,3為加鍵,p3.2為減鍵,p3.5為啟動暫停鍵。p3.0,為水位開關鍵,p3.7接18b20溫度傳感器,程序可以選擇(燙染/清洗),燙染(進水,加熱,攪拌,排水)
清洗(進水,攪拌,排水)

設置的參數要保存

各位大佬看看這個程序是啥問題,現在12864不顯示,硬件沒有問題歡迎指導
; 定義 12864 引腳
sbit RS = P0^7;    ; 寄存器選擇引腳
sbit RW = P0^6;    ; 讀寫選擇引腳
sbit E = P0^5;     ; 使能引腳
sbit PSB = P0^4;   ; 并行/串行選擇引腳(設為并行)
sbit RST = P0^3;   ; 復位引腳

; 定義控制引腳
sbit Heating_Relay = P1^0;  ; 加熱繼電器
sbit Motor_Forward = P1^1;  ; 電機正轉
sbit Motor_Reverse = P1^2; ; 電機反轉
sbit Water_Intake = P1^3;  ; 進水電磁閥
sbit Water_Drain = P1^4;   ; 排水
sbit Door_Lock = P1^5;     ; 門鎖

; 定義按鍵引腳
sbit Program_Key = P3^2;   ; 程序鍵
sbit Inc_Key = P3^3;       ; 加鍵
sbit Dec_Key = P3^4;       ; 減鍵
sbit Start_Pause_Key = P3^5; ; 啟動暫停鍵
sbit Water_Level_Key = P3^0; ; 水位開關鍵

; 定義 18B20 引腳
sbit DS18B20 = P3^7;

; 定義狀態和參數變量
STATUS EQU 30H      ; 工作狀態,0:待機,1:清洗,2:燙染
WORK_TIME EQU 31H    ; 工作時間
MOTOR_TIME EQU 32H  ; 電機旋轉時間
TEMP_SET EQU 33H    ; 設置溫度
DRAIN_FLAG EQU 34H  ; 燙染是否排水標志,0:不排水,1:排水

; 12864 命令
CLEAR_SCREEN EQU 00H
RETURN_HOME EQU 02H
ENTRY_MODE_SET EQU 04H
DISPLAY_CONTROL EQU 08H
CURSOR_SHIFT EQU 10H
FUNCTION_SET EQU 30H
SET_CGRAM_ADDR EQU 40H
SET_DDRAM_ADDR EQU 80H

; 串口相關定義
SMOD EQU 87H
REN EQU 99H
TI EQU 99H
RI EQU 98H

; 初始化 12864
INIT_12864:
    SETB PSB        ; 并行模式
    CLR RST         ; 復位
    CALL DELAY
    SETB RST        ; 結束復位
    MOV A, #FUNCTION_SET
    CALL WRITE_COMMAND_12864
    MOV A, #DISPLAY_CONTROL + 04H ; 顯示開,光標關
    CALL WRITE_COMMAND_12864
    MOV A, #ENTRY_MODE_SET + 02H ; 增量模式,不移動光標
    CALL WRITE_COMMAND_12864
    MOV A, #CLEAR_SCREEN
    CALL WRITE_COMMAND_12864
    RET

; 向 12864 寫命令
WRITE_COMMAND_12864:
    CLR RS
    CLR RW
    MOV P0, A
    SETB E
    CALL DELAY
    CLR E
    RET

; 向 12864 寫數據
WRITE_DATA_12864:
    SETB RS
    CLR RW
    MOV P0, A
    SETB E
    CALL DELAY
    CLR E
    RET

; 初始化串口
INIT_UART:
    MOV SCON, #50H  ; 工作方式 1,8 位異步,允許接收
    MOV TMOD, #20H  ; 定時器 1 工作方式 2
    MOV TH1, #0FDH  ; 波特率 9600
    MOV TL1, #0FDH
    SETB TR1
    SETB EA
    SETB ES
    RET

; 讀取 18B20 溫度(簡化,實際需復雜時序)
READ_DS18B20:
    ; 此處省略 18B20 讀取時序代碼
    RET

; 模擬 EEPROM 保存參數(實際可使用外部 EEPROM)
SAVE_PARAMETERS:
    MOV DPTR, #PARAM_ADDR
    MOV A, WORK_TIME
    MOVX @DPTR, A
    INC DPTR
    MOV A, MOTOR_TIME
    MOVX @DPTR, A
    INC DPTR
    MOV A, TEMP_SET
    MOVX @DPTR, A
    INC DPTR
    MOV A, DRAIN_FLAG
    MOVX @DPTR, A
    RET

; 模擬 EEPROM 讀取參數(實際可使用外部 EEPROM)
LOAD_PARAMETERS:
    MOV DPTR, #PARAM_ADDR
    MOVX A, @DPTR
    MOV WORK_TIME, A
    INC DPTR
    MOVX A, @DPTR
    MOV MOTOR_TIME, A
    INC DPTR
    MOVX A, @DPTR
    MOV TEMP_SET, A
    INC DPTR
    MOVX A, @DPTR
    MOV DRAIN_FLAG, A
    RET

; 按鍵掃描及處理
KEY_SCAN:
    MOV A, P3
    ANL A, #0FCH  ; 屏蔽無關位
    CJNE A, #0FCH, KEY_PRESSED
    RET

KEY_PRESSED:
    CALL DELAY
    MOV A, P3
    ANL A, #0FCH
    CJNE A, #0FCH, KEY_HANDLING
    RET

KEY_HANDLING:
    JB Program_Key, CHECK_OTHER_KEYS
    LCALL DELAY_LONG  ; 檢測長按
    MOV A, P3
    ANL A, #0FCH
    CJNE A, #0FCH, LONG_PRESS_PROGRAM_KEY
    SHORT_PRESS_PROGRAM_KEY:
        MOV A, STATUS
        CJNE A, #0, CHECK_STATUS_1
        MOV STATUS, #1  ; 切換到清洗
        SJMP KEY_EXIT
CHECK_STATUS_1:
        CJNE A, #1, CHECK_STATUS_2
        MOV STATUS, #2  ; 切換到燙染
        SJMP KEY_EXIT
CHECK_STATUS_2:
        MOV STATUS, #0  ; 切換到待機
        SJMP KEY_EXIT
    LONG_PRESS_PROGRAM_KEY:
        ; 進入參數設置模式,此處省略具體設置代碼
        SJMP KEY_EXIT

CHECK_OTHER_KEYS:
    JB Inc_Key, CHECK_DEC_KEY
    ; 加鍵處理
    MOV A, WORK_TIME
    ADD A, #1
    MOV WORK_TIME, A
    SJMP KEY_EXIT
CHECK_DEC_KEY:
    JB Dec_Key, CHECK_START_PAUSE_KEY
    ; 減鍵處理
    MOV A, WORK_TIME
    CLR C
    SUBB A, #1
    MOV WORK_TIME, A
    SJMP KEY_EXIT
CHECK_START_PAUSE_KEY:
    JB Start_Pause_Key, CHECK_WATER_LEVEL_KEY
    ; 啟動暫停鍵處理
    SJMP KEY_EXIT
CHECK_WATER_LEVEL_KEY:
    JB Water_Level_Key, KEY_EXIT
    ; 水位開關鍵處理
    SJMP KEY_EXIT

KEY_EXIT:
    RET

; 主程序
MAIN:
    CALL INIT_12864
    CALL INIT_UART
    CALL LOAD_PARAMETERS

MAIN_LOOP:
    CALL KEY_SCAN
    MOV A, STATUS
    CJNE A, #0, CHECK_WORK_STATUS
    ; 待機狀態
    SJMP MAIN_LOOP

CHECK_WORK_STATUS:
    CJNE A, #1, CHECK_TANG_RAN
    ; 清洗程序
    SETB Water_Intake
    CALL DELAY
    CLR Water_Intake
    SETB Motor_Forward
    CALL DELAY
    CLR Motor_Forward
    SETB Water_Drain
    CALL DELAY
    CLR Water_Drain
    SJMP MAIN_LOOP

CHECK_TANG_RAN:
    ; 燙染程序
    SETB Water_Intake
    CALL DELAY
    CLR Water_Intake
    SETB Heating_Relay
    CALL DELAY
    CLR Heating_Relay
    SETB Motor_Forward
    CALL DELAY
    CLR Motor_Forward
    JB DRAIN_FLAG, DRAIN_TANG_RAN
    SJMP MAIN_LOOP
DRAIN_TANG_RAN:
    SETB Water_Drain
    CALL DELAY
    CLR Water_Drain
    SJMP MAIN_LOOP

; 簡單延時函數
DELAY:
    MOV R5, #250
DELAY_LOOP1:
    MOV R6, #250
DELAY_LOOP2:
    MOV R7, #250
DELAY_LOOP3:
    DJNZ R7, DELAY_LOOP3
    DJNZ R6, DELAY_LOOP2
    DJNZ R5, DELAY_LOOP1
    RET

; 較長時間延時函數
DELAY_LONG:
    MOV R4, #100
DELAY_LONG_LOOP1:
    MOV R5, #250
DELAY_LONG_LOOP2:
    MOV R6, #250
DELAY_LONG_LOOP3:
    MOV R7, #250
DELAY_LONG_LOOP4:
    DJNZ R7, DELAY_LONG_LOOP4
    DJNZ R6, DELAY_LONG_LOOP3
    DJNZ R5, DELAY_LONG_LOOP2
    DJNZ R4, DELAY_LONG_LOOP1
    RET

; 串口中斷服務程序
SERIAL_ISR:
    PUSH ACC
    PUSH PSW
    JNB RI, SEND_DATA
    ; 接收數據處理
    CLR RI
    SJMP SERIAL_EXIT
SEND_DATA:
    ; 發送數據處理
    CLR TI
SERIAL_EXIT:
    POP PSW
    POP ACC
    RETI

; 模擬 EEPROM 地址
PARAM_ADDR EQU 4000H

END



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

使用道具 舉報

沙發
ID:592807 發表于 2025-4-15 11:34 | 只看該作者
匯編語言啊,抱歉不會。用匯編寫代碼就要有自己解決問題的覺悟,匯編你操作的是寄存器地址,我們沒空去看你單片機的的地址。
回復

使用道具 舉報

板凳
ID:604763 發表于 2025-4-15 20:48 | 只看該作者
黃youhui 發表于 2025-4-15 11:34
匯編語言啊,抱歉不會。用匯編寫代碼就要有自己解決問題的覺悟,匯編你操作的是寄存器地址,我們沒空去看你 ...

好的,我明天用c寫個試試
回復

使用道具 舉報

地板
ID:275826 發表于 2025-4-16 10:16 | 只看該作者
兩個子程序,寫命令和寫數據都錯誤,用串行顯示,不是這樣寫
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品视频99在线观看免费 | 欧美精品综合在线 | 久草日韩 | 男女视频在线观看免费 | 99精品一区| 国产一区二区久久 | 国产一区二区三区视频在线观看 | 亚洲美女在线视频 | 成人国产精品入口免费视频 | 国产一区二区三区久久久久久久久 | 一级毛片在线播放 | 国产日韩欧美一区 | 久久99久久 | 91麻豆久久久 | 91资源在线观看 | 国产精品视频区 | 在线看av的网址 | 午夜激情在线视频 | 中国91av | 欧美日韩在线一区 | 美国黄色一级片 | 看片地址| 精品国产久 | 久久高清亚洲 | 亚洲一区成人 | 91精品国产综合久久久久蜜臀 | 日韩中文在线观看 | 好姑娘影视在线观看高清 | 久久久久久国产精品免费免费 | 久久天天综合 | 欧美一级视频免费看 | 国产偷录叫床高潮录音 | 亚洲成av人影片在线观看 | 免费视频一区二区 | 国产在线一区二区三区 | 精品国产视频 | 精品亚洲一区二区 | 欧美片网站免费 | 在线观看第一页 | 欧美一区二区三区在线观看视频 | 国产精品96久久久久久 |