程式是否打錯了(LCD模組介面) |
缺席
|
基電之神
一般會員 發表:1 回覆:0 積分:0 註冊:2005-06-21 發送簡訊給我 |
各為大大能幫我看看程式哪裡出錯了.小弟試過很多次都無法編譯成功
MACDELIM ;-------------------------------------------------------------------- PRINTF6_LCD MACRO STRING ;印出字串到LCD,格式('STRING'),從游標處開始 PUSH DPH PUSH DPL MOV DPTR,#$TRRR# CALL STRING1_LCD JMP $OVER# $TRRR# DB ($OVER#-$-1),STRING $OVER# POP DPL POP DPH ENDM ;-------------------------------------------------------------------- XY_LCD MACRO X,Y ;LCD 游標停在第X列第Y 1個位置 PUSH ACC MOV A,#COLUMN_|X| |Y CALL COMMAND_LCD POP ACC ENDM ;-------------------------------------------------------------------- XY_PRINTF_LCD MACRO X,Y,STRING ;設定游標位置,印出字串到LCD XY_LCD X,Y PRINTF6_LCD (STRING) ENDM ;-------------------------------------------------------------------- COLUMN_1 EQU 80H ;LCD 第一列第一個位置 COLUMN_2 EQU C0H ;LCD 第二列第一個位置 RS_LCD REG P2.2 RW_LCD REG P2.1 E_LCD REG P2.0 BUS_LCD REG P1 ;==================================================================== .ORG 00H JMP START ;-------------------------------------------------------------------- START MOV SP,#50H ;設定堆疊區 CALL INITIAL_LCD ;LCD 初始化 BEGIN CALL DELAY XY_PRINTF_LCD 1,0,("Yuen chen") XY_PRINTF_LCD 2,0,("Welcom !") CALL DELAY CALL CLEAR_LCD JMP BEGIN ;===================================================================== DELAY ;延遲0.5秒程式 MOV R4,#200 ;1 (ARG0=200) DELAY1$ MOV R5,#249 ;1*ARG0 (ARG1=249) DELAY2$ NOP ;1*ARG0*ARG1 NOP ;1*ARG0*ARG1 NOP ;1*ARG0*ARG1 NOP ;1*ARG0*ARG1 NOP ;1*ARG0*ARG1 NOP ;1*ARG0*ARG1 NOP ;1*ARG0*ARG1 NOP ;1*ARG0*ARG1 DJNZ R5,DELAY2$ ;2*ARG0*ARG1 NOP ;1*ARG0 NOP ;1*ARG0 NOP ;1*ARG0 NOP ;1*ARG0 NOP ;1*ARG0 NOP ;1*ARG0 NOP ;1*ARG0 DJNZ R4,DELAY1$ ;2*ARG0 RET ;2 ;5 10*ARG0 10*ARG0*ARG1=??? uS ;5 10*200 10*200*249=500005 uS ;=============================================================== CHKBUSY_LCD ;檢查 LCD 忙碌旗標 PUSH ACC SETB BUS_LCD.7 CHK_$ CLR RS_LCD SETB RW_LCD SETB E_LCD NOP MOV A,BUS_LCD CLR E_LCD JB ACC.7,CHK_$ ;檢查忙碌位元 POP ACC RET ;-------------------------------------------------------------------- COMMAND_LCD ;寫命令到 LCD CALL CHKBUSY_LCD ;檢查忙碌旗標 MOV BUS_LCD,A CLR RS_LCD CLR RW_LCD SETB E_LCD NOP CLR E_LCD RET ;-------------------------------------------------------------------- WRITE_LCD ;寫字元到 LCD CALL CHKBUSY_LCD ;檢查忙碌旗標 MOV BUS_LCD,A SETB RS_LCD CLR RW_LCD SETB E_LCD NOP CLR E_LCD RET ;-------------------------------------------------------------------- INITIAL_LCD ;執行 LCD 初始化工作 PUSH ACC MOV A,#38H ;功能設定 CALL COMMAND_LCD MOV A,#38H ;功能設定 CALL COMMAND_LCD MOV A,#38H ;功能設定 CALL COMMAND_LCD MOV A,#38H ;功能設定 CALL COMMAND_LCD MOV A,#0DH ;顯示器控制:游標不顯示,但是字會閃爍 CALL COMMAND_LCD MOV A,#01H ;清除顯示器 CALL COMMAND_LCD MOV A,#06H ;進入模式設定 CALL COMMAND_LCD POP ACC RET ;-------------------------------------------------------------------- CLEAR_LCD ;清除 LCD 的顯示器 PUSH ACC MOV A,#01H ;清除顯示器 CALL COMMAND_LCD POP ACC RET ;-------------------------------------------------------------------- STRING1_LCD ;印出字串到 LCD,(COUNT,'STRING') PUSH B ;DPTR 不改變, 字串數最大為 256 字. PUSH DPH PUSH DPL PUSH ACC MOV A,#00H MOVC A,@A DPTR ;取得要顯示的字數 MOV B,A INC DPTR ;指向第一個要顯示的字元位址 LOOP$ MOV A,#00H MOVC A,@A DPTR ;取得要顯示的字元 CALL WRITE_LCD INC DPTR ;指向下一個位址 DJNZ B,LOOP$ POP ACC POP DPL POP DPH POP B RET ;-------------------------------------------------------------------- END發表人 - 基電之神 於 2005/06/21 23:01:10 發表人 - 基電之神 於 2005/06/21 23:02:57 發表人 - 基電之神 於 2005/06/21 23:05:41 編輯記錄
㊣ 重新編輯於 2007-04-25 14:13:55, 註解 無‧
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |