新手看不懂8051程式碼>"<! |
答題得分者是:penguin5
|
jocky2001
一般會員 發表:3 回覆:5 積分:1 註冊:2005-05-23 發送簡訊給我 |
這是LCD英文字幕機 的程式碼
一些註解地方不知道正不正確
何不懂地方希望有大大能解答>"<
; PELC.ASM IO51 LCD 16 MESSAGE ; ASM: KEIL ;------------------------------- ; LCD ..... RS EQU P0.0 :定義LCD的RS接腳 EN EQU P0.1 :定義LCD的EN接腳 SPK EQU P3.4 :定義LCD的SPK接腳 WLED EQU P3.7 :定義LCD的WLED接腳 FKEY EQU 20H.0 ; KEY PRESSED :這邊不知如何註解 KEY_NO EQU 30H ; KEY NO :這邊不知如何註解 ;----------------------------- ORG 0H :起始位址為0H JMP BEGIN :跳至BEGIN處重新開始 ;----------------------------- BEGIN: CLR EN ; LCD OFF :這邊不知如何註解 CALL LED_BL :這邊不知如何註解 CALL SET_LCD :呼叫LCD作業模式 CALL BZ :這邊不知如何註解 CALL BZ :這邊不知如何註解 JMP RUN :跳至RUN處重新開始 :.......................................... SET_LCD: :設定LCD作業模式 CLR EN ; en=0 :這邊不知如何註解 CALL INIT_LCD :呼叫LCD之規劃程式 MOV R5,#10 :延時0.1秒鐘 CALL DELAY MOV DPTR,#LMESS1 :LMESS1移至資料指標 MOV A,#1 ; LINE1 :這邊不知如何註解 CALL LCD_PRINT :這邊不知如何註解 MOV DPTR,#LMESS2 :LMESS2移至資料指標 MOV A,#2 ; LINE2 :這邊不知如何註解 CALL LCD_PRINT :這邊不知如何註解 RET ;--------------------------------- INIT_LCD1: :這個區域不知如何解釋 MOV A,#28H CALL WCOM MOV A,#0CH CALL WCOM MOV A,#0EH CALL WCOM MOV A,#01H CALL WCOM RET ;--------------------------------- CLR_LINE1: :這個區域不知如何解釋 MOV A,#80H CALL WCOM MOV R0,#24 CL: MOV A,#' ' CALL WDATA DJNZ R0,CL RET ;------------------------------- ; A=LINE 1 OR 2 :這個區域不知如何解釋 ; DPTR = MESSAGE POINTER LCD_PRINT: CJNE A,#1,LINE2 LINE1: MOV A,#80H CALL WCOM CALL CLR_LINE MOV A,#80H CALL WCOM JMP FILL希望各位大大能為小弟我解答^^" |
penguin5
資深會員 發表:116 回覆:317 積分:431 註冊:2004-05-09 發送簡訊給我 |
; PELC.ASM IO51 LCD 16 MESSAGE ; ASM: KEIL ;------------------------------- ; LCD ..... RS EQU P0.0 :定義LCD的RS接腳 EN EQU P0.1 :定義LCD的EN接腳 SPK EQU P3.4 :壓電蜂鳴器的接腳定義 WLED EQU P3.7 :工作指示燈的接腳定義 FKEY EQU 20H.0 ; KEY PRESSED :應該是按鍵接腳定義(程式沒有全部貼出) KEY_NO EQU 30H ; KEY NO :應該是按鍵接腳定義(程式沒有全部貼出) ;----------------------------- ORG 0H :程式碼由位置0開始 JMP BEGIN :跳至BEGIN處開始執行程式 ;----------------------------- BEGIN: CLR EN ; LCD OFF :關閉LCD致能 CALL LED_BL :LED閃動 表示程式開始執行 CALL SET_LCD :LCD初始化,並顯示 CALL BZ :壓電蜂鳴器發出聱音 CALL BZ :壓電蜂鳴器發出聱音 JMP RUN :跳至RUN處執行程式 :.......................................... SET_LCD: :設定LCD作業模式 CLR EN ; en=0 :關閉LCD致能 CALL INIT_LCD :呼叫LCD之初始程式 MOV R5,#10 :延時0.1秒鐘 CALL DELAY MOV DPTR,#LMESS1 :LMESS1移至資料指標 MOV A,#1 ; LINE1 :顯示在LCD第一行 CALL LCD_PRINT :顯示訊息1(LMESS1)於LCD第一行 MOV DPTR,#LMESS2 :LMESS2移至資料指標 MOV A,#2 ; LINE2 :顯示在LCD第二行 CALL LCD_PRINT :顯示訊息2(LMESS2)於LCD第二行 RET ;--------------------------------- INIT_LCD1: :I/O初始化LCD MOV A,#28H 雙列顯示,字型為5X7 CALL WCOM 寫資料到 IR 暫存器 MOV A,#0CH 游標出現,不閃爍 CALL WCOM 寫資料到 IR 暫存器 MOV A,#0EH 每次向右移一位,顯示幕不移動 CALL WCOM 寫資料到 IR 暫存器 MOV A,#01H 清除LCD顯示幕 CALL WCOM 寫資料到 IR 暫存器 RET ;--------------------------------- CLR_LINE1: :清除LCD的第一行字元 MOV A,#80H 設定第一行位置 CALL WCOM 寫資料到 IR 暫存器 MOV R0,#24 共作24次 CL: MOV A,#' ' 載入空白字元至LCD CALL WDATA 寫資料到 DR 暫存器,輸出空白字元至LCD DJNZ R0,CL 是否已作 24次 RET ;------------------------------- ; A=LINE 1 OR 2 : 在LCD的第一行或第二行印出字元 ; DPTR = MESSAGE POINTER 欲顯示字串之資料放置處 LCD_PRINT: CJNE A,#1,LINE2 假如A,不是1,就跳到LINE2 LINE1: MOV A,#80H 在LCD的第一行印出字元 CALL WCOM 寫資料到 IR 暫存器 CALL CLR_LINE 清除一行之顯示 MOV A,#80H LCD的第一行 CALL WCOM 寫資料到 IR 暫存器,輸出字元至LCD JMP FILL 跳到FILL處執行程式歡迎參觀 麗嘉研究室 http://myweb.hinet.net/home4/penguin5/ 發表人 - penguin5 於 2005/05/31 22:13:27 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |