能幫忙檢查與解釋程式碼嗎QQ |
答題得分者是:penguin5
|
jocky2001
一般會員 發表:3 回覆:5 積分:1 註冊:2005-05-23 發送簡訊給我 |
這是一個8051英文LCD字幕機
跟廠商購買來滴 專題 的程式碼 但專題還是要知道每個程式的功用
我們是初學者不怎麼懂 圖書館借書也是一知半懂 英文也不太好
之前有大大幫我們解釋過一小部份 我們利用那一部份 解釋一些了
但還是有一些不知道 希望各位大大能幫幫忙QQ 或是有解釋錯的能方便糾正一下QQ
; 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處執行程式 LINE2: MOV A,#0C0H 游標出現,不閃爍 CALL WCOM 寫資料到 IR 暫存器 CALL CLR_LINE 清除一行之顯示 MOV A,#0C0H 游標出現,不閃爍 CALL WCOM 寫資料到 IR 暫存器 FILL: CLR A 清除累加器 MOVC A,@A DPTR 程式記憶體的資料移入累加器 CJNE A,#0,LC1 假如是A.不是0.就跳到LC1 RET 從副程式返回 LC1: CALL WDATA 寫data到DR暫存器 輸出空白字元至LCD INC DPTR 資料指標器加一 JMP FILL 跳到FILL處執行程式 RET 從副程式返回 ;--------------------------- CLR_LINE: MOV R0,#24 共作24次 C1: MOV A,#' ' 載入空白字元至LCD CALL WDATA 寫資料到 DR 暫存器,輸出空白字元至LCD DJNZ R0,C1 是否已作 24次 RET 從副程式返回 ;------------------------------- DE: MOV R7, #5 這邊不知如何解釋 DJNZ R7,$ 這邊不知如何解釋 RET 從副程式返回 ;-------------------- EN1: SETB EN 這邊不知如何解釋 CALL DE 這邊不知如何解釋 CLR EN 關閉LCD致能 CALL DE RET 從副程式返回 ;------------------- INIT_LCD: MOV P0, #30H 這邊不知如何解釋 CALL EN1 這邊不知如何解釋 MOV P0, #30H CALL EN1 MOV P0, #30H CALL EN1 MOV P0, #20H 這邊不知如何解釋 CALL EN1 CALL INIT_LCD1 呼叫LCD1之初始程式 RET 從副程式返回 ;---------------------- WCOM: ; WRITE HI 4 BIT 這邊不知如何解釋 MOV P0, A 累加器內容移至暫存器 CLR RS ; SET COMMAND 這邊不知如何解釋 CALL EN1 RLC A 累加器與C一起向左旋轉 RLC A 累加器與C一起向左旋轉 RLC A 累加器與C一起向左旋轉 RLC A 累加器與C一起向左旋轉 ; WRITE LO 4 BIT 這邊不知如何解釋 MOV P0, A 這邊不知如何解釋 CLR RS ; SET COMMAND CALL EN1 RET 從副程式返回 ;-------------------------------------- WDATA: ; WRITE HI 4 BIT MOV P0, A 累加器內容移至暫存器 SETB RS ; SET DATA 這邊不知如何解釋 CALL EN1 RLC A 累加器與C一起向左旋轉 RLC A 累加器與C一起向左旋轉 RLC A 累加器與C一起向左旋轉 RLC A 累加器與C一起向左旋轉 ; WRITE LO 4 BIT MOV P0, A 累加器內容移至暫存器 SETB RS ; SET DATA CALL EN1 RET 從副程式返回 ;-------------------------------------- ; DELAY R5*10 ms 這區域都不懂 DELAY: MOV R6,#50 D1: MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET 從副程式返回 ;-------------------------------- LED_BL: 這區域都不懂 MOV R4,#4 LE1: CPL WLED MOV R5,#5 CALL DELAY DJNZ R4,LE1 RET 從副程式返回 ;------------------------------------ LMESS1: DB "ELC LCD 16 MESS.",0 這兩行代表是? LMESS2: DB "I/O 4 BIT.......",0 ;---------------------------------------------------------- ; KEY PAD: TYPE A 這裡是鍵盤的什麼? ; F E D C ; B 3 6 9 ; A 2 5 8 ; 0 1 4 7 TABLE_DIG: DB 0FH, 0BH, 0AH, 00H DB 0EH, 03H, 02H, 01H DB 0DH, 06H, 05H, 04H DB 0CH, 09H, 08H, 07H ;--------------------------------------------------------- ; R0 : BUF PT NO USE 這裡是各代表什麼? ; R1 : COUNT 1 ; R2 : COUNT 2 ; R3 : SCAN SIGNAL ; R4 : COUNT KEY_NO ;------------------ SCAN: 什麼意思? ;**************************** MOV R3, #0FEH ; LOAD INITIAL SCAN SIGNAL 這區好多看不懂 MOV R4, #0 ; KEY NO COUNT MOV R1, #4 ; COUNT TIMES CLR PSW.5 ; NO KEY ON ;...................................... L1: 這區域都不懂 ; SEND OUT SCAN SIGNAL VIA P2.0~P2.3 MOV A, R3 MOV P2,A ;********************************* ; DELAY A WHILE ....... 這區域都不懂 MOV R5, #1 CALL DELAY ; READ I/P DATA FROM P2.4~P2.7 MOV A,P2 ANL A,#0F0H ; GET HIGH 4 BIT EX:1110XXXX ; CHECK KEY PRESSED ? MOV R2,#4 ; COUNT 2 ;................................. L2: JB ACC.4, N1 ; NO KEYED MOV KEY_NO, R4 SETB PSW.5 ; KEY PRESS...... N1: INC R4 ; KEY NO RR A ; CHECK KEY NO DJNZ R2, L2 ; CHANGE SCAN CODE EX:XXXX1101 MOV A, R3 RL A 累加器向左旋轉 MOV R3, A DJNZ R1, L1 ;.................................... ; SET FKEY 這區域都不懂 BACK: JNB PSW.5, NO_KEY SETB FKEY RET 從副程式返回 NO_KEY: CLR FKEY ; NO KEY PRESSED......... RET 從副程式返回 ;------------------------------------------------------------------------ ; RETURN A: DIGIT NO 這區域都不懂 KEY_SCAN: CLR FKEY CALL SCAN ; IF(KEY_ON) WAIT KEY_OFF JB FKEY, K20 ; NO KEY ON WAIT KEY IN.............. CLR FKEY RET 從副程式返回 ; HAVE KEY IN......... K20: CALL BZ ;************************ K21: CALL SCAN JB FKEY, K21 ; ; KEY INDEX TO DIGIT NO. MOV A,KEY_NO MOV DPTR, #TABLE_DIG MOVC A,@A DPTR :程式記憶體的資料移入累加器 SETB FKEY RET 從副程式返回 ;------------------------------------------------------- BZ: 這區域都不懂 MOV R6,#0 B1: CALL DEX CPL SPK DJNZ R6,B1 MOV R5,#5 CALL DELAY RET 從副程式返回 ;-------------------- DEX: MOV R7,#180 DE1: NOP DJNZ R7,DE1 RET 從副程式返回 ;------------------------------------------------------------ ME1: DB "IO51 LEARN PROJE",0 這區域都不懂 ME2: DB "MULTI FUNCTION..",0 M0: DB "IO51 PROJECT 16.",0 M1: DB "SPECIAL DESIGN..",0 M2: DB "PTDO TIME COUNT.",0 M3: DB "PCL CLCOK SEG..",0 M4: DB "PCLL CLCOK LCD..",0 M5: DB "PPA PASSWORD...",0 M6: DB "PIRH IR HOME REL",0 M7: DB "PIRK IR KEY MUSI",0 M8: DB "PTE DS1821 RELA",0 M9: DB "PBOX MUSIC BOX..",0 MA: DB "PAD A/D SHOW...",0 MB: DB "POR 8015 ORGAN.",0 MC: DB "PELC LCD 16 MESS",0 MD: DB "PCLC CHINESE LCD",0 ME: DB "PSP SPEECH DEMO",0 MF: DB "PVC VOICE CONTR",0 ;------------------------------- MOP: MOP是? MOV A,#2 ; LINE2 顯示在LCD第二行 CALL LCD_PRINT 顯示訊息2(LMESS2)於LCD第二行 CALL LED_BL LED 表示程式開始執行 MOV R5,#60 CALL DELAY RET 從副程式返回 ;------------------------- ; I/P: A: KEY NO 這區域有些不懂 MKOP: CJNE A,#0, A0 MOV DPTR,#M0 CALL MOP RET 從副程式返回 A0: CJNE A,#1, A1 若累加器不等於1就跳至A1 MOV DPTR,#M1 CALL MOP RET 從副程式返回 A1: CJNE A,#2, A2 若累加器不等於2就跳至A2 MOV DPTR,#M2 CALL MOP RET 從副程式返回 A2: CJNE A,#3, A3 若累加器不等於3就跳至A3 MOV DPTR,#M3 CALL MOP RET 從副程式返回 A3: CJNE A,#4, A4 若累加器不等於4就跳至A4 MOV DPTR,#M4 CALL MOP RET 從副程式返回 A4: CJNE A,#5, A5 若累加器不等於5就跳至A5 MOV DPTR,#M5 CALL MOP RET 從副程式返回 A5: CJNE A,#6, A6 若累加器不等於6就跳至A6 MOV DPTR,#M6 CALL MOP RET 從副程式返回 A6: CJNE A,#7, A7 若累加器不等於7就跳至A7 MOV DPTR,#M7 CALL MOP RET 從副程式返回 A7: CJNE A,#8, A8 若累加器不等於8就跳至A8 MOV DPTR,#M8 CALL MOP RET 從副程式返回 A8: CJNE A,#9, A9 若累加器不等於9就跳至A9 MOV DPTR,#M9 CALL MOP RET A9: CJNE A,#0AH, A10 若累加器不等於10就跳至A10 MOV DPTR,#MA CALL MOP RET 從副程式返回 A10: CJNE A,#0BH, A11 若累加器不等於11就跳至A11 MOV DPTR,#MB CALL MOP RET 從副程式返回 A11: CJNE A,#0CH, A12 若累加器不等於12就跳至A12 MOV DPTR,#MC CALL MOP RET 從副程式返回 A12: CJNE A,#0DH, A13 若累加器不等於13就跳至A13 MOV DPTR,#MD CALL MOP RET 從副程式返回 A13: CJNE A,#0EH, A14 若累加器不等於14就跳至A14 MOV DPTR,#ME CALL MOP RET 從副程式返回 A14: CJNE A,#0FH, A15 若累加器不等於15就跳至A15 MOV DPTR,#MF CALL MOP RET 從副程式返回 A15: RET 從副程式返回 ;--------------------------------------- RUN: 這區域有些不懂 MOV DPTR,#ME1 ME1移至資料指標 MOV A,#2 ; LINE2 顯示在LCD第二行 CALL LCD_PRINT :顯示訊息2(ME1)於LCD第二行 MOV R5,#40 CALL DELAY CALL LED_BL LED閃動 表示程式開始執行 CALL KEY_SCAN JNB FKEY, RUN1 CALL MKOP JMP RUN 跳至RUN處執行程式 ;............................... RUN1: 這區域有些不懂 MOV DPTR,#ME2 ME2移至資料指標 MOV A,#2 ; LINE2 顯示在LCD第二行 CALL LCD_PRINT 顯示訊息2(ME2)於LCD第二行 MOV R5,#40 CALL DELAY CALL LED_BL :LED閃動 表示程式開始執行 CALL KEY_SCAN JNB FKEY, RUN CALL MKOP JMP RUN 跳至RUN處行程式 ;---------------------- END對不起 新手疑問太多哩QQ |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
你應該先把8051指令集
跟LCM指令集先看過 真的看不懂
書上沒寫的再來問 程式怪怪的 沒有定義RW是怎麼回事
寫LCM前不用先檢查忙碌旗標的
SET_LCD: ;把LMESS1跟LMESS2的字元顯示在LCM DE: ; 就是Dealy EN1: ;把LCM指令送出 WCOM: ;寫LCM指令 分兩次寫 先寫高位元 再寫低位元 RLC A做4次 就是左移4次 把低位元搬到高位元 WCOM: ;寫LCM資料 DELAY: ;Delay也看不懂 太誇張了 LED_BL: ;LED閃兩下呀 LMESS1: LMESS2: ;第一次要顯示的字元 TABLE_DIG: ;鍵盤掃描的對照表 ; R0 : BUF PT NO USE ;R0沒有用到 SCAN: ;鍵盤掃描 P2.0~P2.3是掃描線 ; DELAY A WHILE ;延遲一下 你的英文太差了! MOVC A,@A DPTR :程式記憶體的資料移入累加器 ;這叫查表XD BZ: ;蜂鳴器叫 ME1: ME2: M0:~MF: ;都是LCM要顯示的訊息啦!看的我暈頭轉向的XD ------------------- 美好的事物 稍縱即逝 發表人 - 阿信 於 2005/06/04 13:48:09 |
jocky2001
一般會員 發表:3 回覆:5 積分:1 註冊:2005-05-23 發送簡訊給我 |
; KEY PAD: TYPE A 這裡是鍵盤的什麼? ; F E D C ; B 3 6 9 ; A 2 5 8 ; 0 1 4 7 TABLE_DIG: DB 0FH, 0BH, 0AH, 00H DB 0EH, 03H, 02H, 01H DB 0DH, 06H, 05H, 04H DB 0CH, 09H, 08H, 07H A0: CJNE A,#1, A1 若累加器不等於1就跳至A1 [這樣翻對嗎?] MOV DPTR,#M1 M1移至資料指標(還是什麼?) [這樣翻對嗎?] CALL MOP 這句話我不懂 呼叫什麼@@? RET 從副程式返回 FKEY EQU 20H.0 ; KEY PRESSED : 這邊是定義? KEY_NO EQU 30H ; KEY NO : 這邊是定義?這裡是鍵盤的對照 那請問這邊 DB後面 那些 OFH.OBH 各是啥米? A0 那段翻對嗎? 還有R0~跟R7 都是都代表什麼呀>" |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言:剛好是16個對應的碼.Ex:鍵盤輸入F,51就會抓到0FH.鍵盤輸入0,51就會抓到0CH 程式不是買的嗎?應該通通ok了ㄚ....你還有啥問題?? 找買的廠商ㄚ....還是你們有改過了? 程式po的不整齊,又有點長... 實在不好看...註解沒對齊,也沒加分號; KEY PAD: TYPE A 這裡是鍵盤的什麼? ; F E D C ; B 3 6 9 ; A 2 5 8 ; 0 1 4 7 TABLE_DIG: DB 0FH, 0BH, 0AH, 00H DB 0EH, 03H, 02H, 01H DB 0DH, 06H, 05H, 04H DB 0CH, 09H, 08H, 07H 這裡是鍵盤的對照 那請問這邊 DB後面 那些 OFH.OBH 各是啥米?
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
jocky2001
一般會員 發表:3 回覆:5 積分:1 註冊:2005-05-23 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言:手邊有51相關書籍嗎?沒有的話去買一本. 請先把51指令集搞懂,再來問問題吧!A0: CJNE A,#1, A1 若累加器不等於1就跳至A1 [這樣翻對嗎?] MOV DPTR,#M1 M1移至資料指標(還是什麼?) [這樣翻對嗎?] CALL MOP 這句話我不懂 呼叫什麼@@? RET 從副程式返回
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
jocky2001
一般會員 發表:3 回覆:5 積分:1 註冊:2005-05-23 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 輸是 有 但有些翻很久還是找不到 像call mop 這句就沒有!call 總有吧,沒說明嗎?有吧!!一定也寫一些你沒看過的 call delay... call display.... 它只是呼叫副程式...副程式名稱就寫在後面....請詳細看過...... 還有,可以翻翻後面的範例,看看有用到這個指令時人家是怎麼用的.. 發表人 - ㊣ 於 2005/06/04 15:05:38
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
jocky2001
一般會員 發表:3 回覆:5 積分:1 註冊:2005-05-23 發送簡訊給我 |
|
jocky2001
一般會員 發表:3 回覆:5 積分:1 註冊:2005-05-23 發送簡訊給我 |
|
penguin5
資深會員 發表:116 回覆:317 積分:431 註冊:2004-05-09 發送簡訊給我 |
此專題名稱為PELC 英文 LCD 字幕機 http://vic.seeder.net/io\pelc.txt 作 者: 偉克多微電腦工作室→ 陳 站長
建議直接詢問 偉克多微電腦工作室→ 陳 站長 偉克多微電腦工作室 網 址 : http://vic.seeder.net/
技術諮詢 電子郵件 : ufvicwen@ms2.hinet.net PELC 英文 LCD 字幕機 使用說明: 1.DIY 使用者請參考電路圖將專題板零件組裝起來。
2.準備一 5V 電源。
3.經由 2 PIN 電線接至 J1 VCC 接點,紅色 5V,黑色 GND。
4.打開電源,工作 LED D3 閃爍,表示開機正常。 5.基本功能 :
* 動態顯示英文訊息展示
* 英文 LCD 模組內含黃色 LED 背光板,黑暗中仍清晰可見
* 英文 LCD 模組(16X2) 顯示方式 :雙行,每行 16 個英文字或是 ASCII編碼
* 8051 程式中直接輸入英文,便可直接顯示英文字 6.4X4 按鍵組顯示 16 段文字,壓電喇叭同時發出嗶聲 7.可以自行修改內部文字訊息,輕易建立 8051 LCD 英文訊息平台 -------------------------------------------------------------
8051 專題製作 DIY 產品程式設計
控制程式是以 8051 組合語言寫成,以 KEIL 組譯器組譯 相關檔案如下:
□ PELC.ASM : 8051 組合語言原始程式
□ PELC.TSK : 2 進位可執行檔
□ PELC.TXT : 使用說明
□ X.BAT : 快速組譯、連結、載入檔案、燒錄、直接模擬的批次檔
□ EPM89.EXE : 89CXX 燒錄模擬程式 □ XK.BAT : 快速組譯、連結、RS232 載入檔案、直接模擬的批次檔
□ PLO.EXE : LO51 (ISP 8051)載入控制程式 XK.BAT 及 PLO.EXE 需搭配 LO51 晶片,將 89C51 換為 LO51 晶片,由串列埠下載
64KB 程式 程式修改:
1.使用 LO51 晶片,由串列埠下載 64KB 程式
2.使用 EPM89 89CXX 燒錄模擬器 -----------------------------------------------------------------------------
1.使用 LO51 晶片,由串列埠下載 64KB 程式---專題製作在家做不必跑實驗室!!!
SW ON RESET 下載 64KB 程式/ SW OFF RESET 執行程式碼
操作簡單: XK PELC
-----------------------------------------------------------------------------
2.使用 EPM89 89CXX 燒錄模擬器---學生專題製作的利器!!!
燒錄後可以直接模擬 40 PIN 8051 單晶片
不必取下IC,免拆排線馬上進行模擬,操作簡單免學習,節省您寶貴的時間 取下 89C51,將 40 PIN 排線連至 8051 控制板上的 40 PIN IC 座
操作簡單: X PELC
直接測試 OK 後,取下 89C51,放入8051 控制板上便可獨立操作!方便省時!
-------------------------------------------------------- 發表人 - penguin5 於 2005/06/05 09:25:16
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |