LCD顯示問題 |
答題得分者是:romextromext
|
tom78310
一般會員 發表:1 回覆:6 積分:1 註冊:2009-12-24 發送簡訊給我 |
我需要的功能就是
當我輸入4*4鍵盤(裝在P0 當我按下1 LCD顯示1 按下2 LCD顯示12 按下A LCD顯示12A 我用的LCD是上下兩排的 上面那一排是直接跑學號 下面那一排可以讓使用者輸入4*4鍵盤資料 感謝回答 (用組合語言寫的) |
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
|
tom78310
一般會員 發表:1 回覆:6 積分:1 註冊:2009-12-24 發送簡訊給我 |
|
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
你4*4是接在那8隻腳
LCD是那8隻腳 EN RW RS 講完我在幫你用 然後功能是否只要你打的字出現在LCD第二排 之後打的字是否往後推 假如打ABC 第二排:CBA (往後推) 這是你要的功能吧? 我跟你的程式可能會有出入 所以還是把完整需要的功能打出來 作為你的參考來完成自己的程式
------
這啥需要簽嗎 拿筆來
編輯記錄
|
tom78310
一般會員 發表:1 回覆:6 積分:1 註冊:2009-12-24 發送簡訊給我 |
|
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
你先測試看看這是否能夠正確運作
用組合語言寫程式我不確定每次寫每次都能夠正確執行 這目前只是一個案一下鍵盤會出現鍵盤上的數字 然後數字是我在程式裡面定的除他我知道你怎麼排鍵盤我在改數字 數字會顯示再LCD的第二行然後往後除非重開要不然就不會清除 如果這樣可以我在接著寫(我想先確定前面沒寫錯)因為手邊沒有相關電路可以做測試也沒有燒錄器燒IC 這程式看不懂的地方可以問 等到最後寫完我再加上註解 有錯誤再講一下我在改
------
這啥需要簽嗎 拿筆來
編輯記錄
romextromext 重新編輯於 2010-01-01 20:26:33, 註解 無‧
romextromext 重新編輯於 2010-01-01 20:31:16, 註解 無‧ romextromext 重新編輯於 2010-01-01 20:31:21, 註解 無‧ romextromext 重新編輯於 2010-01-01 20:33:26, 註解 無‧ romextromext 重新編輯於 2010-01-01 20:39:23, 註解 無‧ |
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
[code delphi] LCDBUF EQU 31H KEYSPM EQU 37H ;掃描的指標 KEYV EQU 38H ;目前有數值 KEYT EQU 39H ;讀取到數值的次數 NOKEYT EQU 3AH ;沒有讀取到數值的次數 NEWKEYV EQU 3BH ;讀取到的新數值 KEYBUF EQU 3CH ;讀取到的數值的備分暫存器 KEYBUS EQU P2 KEYM EQU 20H.1 ;真正讀取到按鍵的指標 LCDBUS EQU P1 ;資料匯流排DB0-DB7接腳, LCDBUS.7: BUSY FLAG ENABLE BIT P3.0 ;LCD模組上致能接腳 0: DISABLE, 1: ENABLE RW BIT P3.1 ;LCD模組上R/W接腳, 0: WRITE, 1: READ RS BIT P3.2 ;LCD模組上RS接腳, 0: INSTRUCTION, 1: DATA DISP10 EQU 40H ;第一列起始位址 DISP20 EQU 50H ;第二列起始位址 ; ↑↑定義站存器↑ ORG 0000H JMP START ORG 000BH ;鍵盤掃描 JMP KEY0 ;------------------- ; ///////初始/////// ;------------------- ORG 0030H START: MOV SP,#05FH MOV IE,#082H MOV TMOD,#01H MOV 30H,#20 CALL CLRBUF MOV LCDBUF,#50H MOV P2,#0FFH MOV KEYSPM,#0FEH MOV 20H,#00H MOV 21H,#00H MOV 46H,#'6' MOV 47H,#'2' MOV 48H,#'0' MOV 49H,#'0' MOV 4AH,#'6' ;---------------------- ; ///////LCD初始/////// ;---------------------- CALL INIT CALL DISPLAY ; ;------------------------------- ; ///////鍵盤掃描的計時器/////// ;------------------------------- MOV TH0,#0ECH MOV TL0,#078H SETB TR0 L1: JB KEYM,KEYSP0 JMP L1 KEYSP0: CLR KEYM ;清除有按鍵的旗標 MOV A,KEYBUF ;把剛剛得到的按鍵值拿去查表 MOV DPTR,#TAB2 ; MOVC A,@A DPTR ; ; ORL A,#30H ; MOV 50H,A ; CALL DISPLAY ; JMP L1 MOV B,A ;查表得來的數值會是0~F,先把a存放在b裡站存 SUBB A,#0AH ;如果超過9就代表是英文,如果沒超過就代表是數字 JNC KEYIN1 ;是0就是英文就去作英文的輸出,是1就是數字就去做數字的輸出因為ASCII的碼數值是30H=0 40H=A所以分開做 MOV A,B ;把鍵盤數值讀回 ORL A,#30H ;轉換成ASCII碼 MOV R0,LCDBUF ;我初始設定把LCDBUF為50H,50H為我顯示LCD的第二行的第一個字 MOV @R0,A ;然後存到50H INC LCDBUF ;加一讓他下次來的時候存的東西是存到LCDBUF 1,下次就是本來的LCDBUF 1 1最後只能顯示到第十六個字 ;之後會再把F做成按下就清除第二排顯示的按鍵讓它可以重複輸入 CALL DISPLAY ;DISPALY是LCD顯示的副程式 JMP L1 ;返回 KEYIN1: CJNE A,#05H,KEYIN2 MOV LCDBUF,#50H MOV R6,#10H MOV R0,#50H KEYIN3: MOV @R0,#' ' INC R0 DJNZ R6,KEYIN3 CALL DISPLAY JMP L1 KEYIN2: ORL A,#40H ;轉換成ASCII碼 INC A MOV R0,LCDBUF ;同上 MOV @R0,A ; INC LCDBUF ; CALL DISPLAY ; JMP L1 ;--------------------------- ;------------------- ; ////鍵盤掃描///// ;------------------- KEY0: MOV TH0,#0ECH MOV TL0,#078H PUSH ACC MOV A,KEYSPM MOV KEYBUS,A RL A MOV KEYSPM,A MOV R7,KEYSPM CJNE R7,#0EFH,KEY1 MOV KEYSPM,#0FEH KEY1: MOV A,KEYBUS ORL A,#0FH CPL A JNZ KEY2 INC NOKEYT MOV R7,NOKEYT CJNE R7,#08,RET_2 MOV KEYT,#00 MOV NEWKEYV,#00 MOV NOKEYT,#00 JMP RET_2 KEY2: MOV NOKEYT,#00 MOV NEWKEYV,KEYBUS MOV A,NEWKEYV CJNE A,KEYV,KEY3 INC KEYT MOV R7,KEYT CJNE R7,#04,KEY4 MOV A,KEYV CLR C SUBB A,#077H ;EE-77=77以此類推 1=77, 2=76, 3=74, 4=70, 5=67, 6=66, 7=64, 8=60-↓ ;9=47, 0=46, A=44, B=40, C=07, D=06, E=04, F=00 INC A ;1=00000001, 2=00000101, 3=00000111, 4=00001000 ;5=01000001, 6=01000101, 7=01000111, 8=01001000 ;9=01100001, 0=01100101, A=01100111, B=01101000 ;C=01110001, D=01110101, E=01110111, F=01111000 CLR C RRC A ;1=00000000=00, 2=00000010=02, 3=00000011=03, 4=00000100=04 ;5=00100000=20, 6=00100010=22, 7=00100011=23, 8=00100100=24 ;9=00110000=30, 0=00110010=32, A=00110011=33, B=00110100=34 ;C=00111000=38, D=00111010=3A, E=00111011=3B, F=00111100=3C CLR C MOV KEYBUF,A SETB KEYM JMP RET_2 KEY3: MOV KEYV,NEWKEYV MOV KEYT,#01 JMP RET_2 KEY4: MOV R7,KEYT CJNE R7,#05,RET_2 DEC KEYT RET_2: CLR RS0 POP ACC RETI ;------------------- ;INIT RESET LCD ;------------------- INIT: MOV A,#38H ;8BIT且2行的命令 CALL WRINS MOV A,#0EH ;顯示且游標出現且不閃爍 CALL WRINS MOV A,#06 ;游標寫入資料時向右移動 CALL WRINS MOV A,#01H ;清除所有已寫入畫面且游標移到原點 CALL WRINS RET ;------------------ ; WRITE INSTRUCTION TO LCD ;------------------ WRINS: CALL CHECK ;先確認忙碌 MOV LCDBUS,A ;把命令寫入 CLR RS ;0指令 CLR RW ;0寫入 SETB ENABLE ;1致能 CLR ENABLE ;0除能 RET ;------------------- ; WRITE DATA TO LCD ;------------------- WRDATA: CALL CHECK MOV LCDBUS,A SETB RS CLR RW SETB ENABLE CLR ENABLE RET ;---------------- ; CHECK LCD BUSY ;---------------- CHECK: MOV LCDBUS,#0FFH ;確認BUSY忙碌確認是否忙碌中 CLR RS ;0指令 SETB RW ;1讀取 SETB ENABLE ;1致能 CH1: JB LCDBUS.7,CH1 ;bit7是忙碌街腳 CLR ENABLE ;0除能 RET ;-------------- ;LCD DISPLAY ;-------------- DISPLAY:MOV R0,#DISP10 MOV R2,#10H DP1: MOV A,@R0 CALL WRDATA INC R0 DJNZ R2,DP1 MOV A,#0C0H CALL WRINS MOV R0,#DISP20 MOV R2,#10H DP2: MOV A,@R0 CALL WRDATA INC R0 DJNZ R2,DP2 RET ;--------------------- ; DISPLAY FILL SPACE ;--------------------- CLRBUF: MOV R2,#20H MOV R0,#DISP10 MOV A,#' ' CR1: MOV @R0,A INC R0 DJNZ R2,CR1 CALL DISPLAY RET TAB2: DB 007H,000H,008H,009H,00CH,000H,000H,000H;07 DB 000H,000H,000H,000H,000H,000H,000H,000H;0F DB 000H,000H,000H,000H,000H,000H,000H,000H;17 DB 000H,000H,000H,000H,000H,000H,000H,000H;1F DB 004H,000H,005H,006H,00DH,000H,000H,000H;27 DB 000H,000H,000H,000H,000H,000H,000H,000H;2F DB 001H,000H,002H,003H,00EH,000H,000H,000H;37 DB 000H,000H,00AH,00BH,00FH,000H,000H,000H;3F END [/code]
------
這啥需要簽嗎 拿筆來
編輯記錄
romextromext 重新編輯於 2010-01-01 20:35:50, 註解 無‧
romextromext 重新編輯於 2010-01-01 20:38:19, 註解 無‧ romextromext 重新編輯於 2010-01-01 20:40:39, 註解 無‧ romextromext 重新編輯於 2010-01-07 20:29:17, 註解 無‧ |
tom78310
一般會員 發表:1 回覆:6 積分:1 註冊:2009-12-24 發送簡訊給我 |
|
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
|
ScottWang
版主 發表:32 回覆:486 積分:688 註冊:2009-04-27 發送簡訊給我 |
x51可以編譯.
1. 把< 2. KEYM EQU 20H.0 把 '.0' 刪除 3. 格式位置不對的要移動,如 org 0000至少要右移一格,以8位定為格式最佳. 4. 編譯有錯的,不符合x51的格式修改一下,應該就可以了.
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流, 中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓, 標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器. 接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備, 另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A. http://hvpower.myweb.hinet.net/ |
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
------
這啥需要簽嗎 拿筆來
編輯記錄
romextromext 重新編輯於 2010-01-05 20:54:59, 註解 無‧
romextromext 重新編輯於 2010-01-05 20:56:22, 註解 無‧ romextromext 重新編輯於 2010-01-05 20:56:55, 註解 無‧ romextromext 重新編輯於 2010-01-05 20:59:49, 註解 無‧ |
tom78310
一般會員 發表:1 回覆:6 積分:1 註冊:2009-12-24 發送簡訊給我 |
|
tom78310
一般會員 發表:1 回覆:6 積分:1 註冊:2009-12-24 發送簡訊給我 |
這可以執行的
它顯示10個0(右邊數過來10個) 但螢幕很黑 似乎是上下兩行的資料重疊 謝謝您的程式 能繼續幫我寫嗎?? ===================引 用 romextromext 文 章===================
|
tom78310
一般會員 發表:1 回覆:6 積分:1 註冊:2009-12-24 發送簡訊給我 |
===================引 用 tom78310 文 章=================== 這可以執行的 它顯示10個0(右邊數過來10個) 但螢幕很黑 似乎是上下兩行的資料重疊 謝謝您的程式 能繼續幫我寫嗎?? 我的鍵盤 FEDC B369 A258 D147 ===================引 用 romextromext 文 章===================
|
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
你09H這是十六進制的09那十六進制的09換成10進制的等於多少
還是09阿==你加跟沒加都沒差 通常沒超過10ˇ的我都沒加H 因為有加跟沒加意思一樣 及時通跟我的帳號一樣要加可以自己加
------
這啥需要簽嗎 拿筆來
編輯記錄
romextromext 重新編輯於 2010-01-06 20:07:17, 註解 無‧
|
romextromext
一般會員 發表:6 回覆:26 積分:11 註冊:2009-08-24 發送簡訊給我 |
我這幾天把我之前做過的LCD+鍵盤掃描的電路拿回家
我已經把我的程式測試過沒問題 功能 一開始顯示學號 目前顯示的學號是我的所以可以更改 然後按下鍵盤從第二行第一個字..第二個字...第三個字.. 按下F清除銀幕上的第二行所有字幕可以重新輸入 FEDC B369 A258 D147 ←這行的D還是0?應該是0吧 然後你沒說鍵盤該接在那所以我程式定義在P2上 KEYBUS EQU P2 要更改就把這行P2改成接的 我在上面的程式我重新貼上 學號改變 MOV 46H,#'6' MOV 47H,#'2' MOV 48H,#'0' MOV 49H,#'0' MOV 4AH,#'6' 把' '裡面的數字改成你的學號 要加字再從4B 4C....
------
這啥需要簽嗎 拿筆來
編輯記錄
romextromext 重新編輯於 2010-01-07 20:28:24, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |