線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2940
推到 Plurk!
推到 Facebook!

LCD顯示問題

答題得分者是:romextromext
tom78310
一般會員


發表:1
回覆:6
積分:1
註冊:2009-12-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-12-24 09:36:47 IP:210.70.xxx.xxx 訂閱
我需要的功能就是
當我輸入4*4鍵盤(裝在P0
當我按下1
LCD顯示1
按下2
LCD顯示12
按下A
LCD顯示12A

我用的LCD是上下兩排的
上面那一排是直接跑學號
下面那一排可以讓使用者輸入4*4鍵盤資料
感謝回答

(用組合語言寫的)
編輯記錄
tom78310 重新編輯於 2009-12-24 09:39:03, 註解 無‧
tom78310 重新編輯於 2009-12-24 23:45:38, 註解 無‧
tom78310 重新編輯於 2009-12-28 23:27:26, 註解 誰能幫幫我~‧
tom78310 重新編輯於 2009-12-29 09:34:30, 註解 無‧
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-12-24 23:35:42 IP:123.194.xxx.xxx 訂閱
你乾脆一點跟我講要什麼功能
你這樣打長篇大論誰有時間看

------
這啥需要簽嗎
拿筆來
tom78310
一般會員


發表:1
回覆:6
積分:1
註冊:2009-12-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-12-24 23:38:53 IP:220.142.xxx.xxx 訂閱
我要讓LED第二行
可以顯現我重4X4鍵盤案的字
我需要掃描鍵盤的程式
要打在哪邊才可以顯現
要按一個鍵LED顯現一個 按第二個 會往左邊移動
感謝

謝謝回答
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-12-28 07:47:53 IP:123.194.xxx.xxx 訂閱
你4*4是接在那8隻腳
LCD是那8隻腳
EN
RW
RS
講完我在幫你用
然後功能是否只要你打的字出現在LCD第二排
之後打的字是否往後推
假如打ABC
第二排:CBA (往後推)
這是你要的功能吧?
我跟你的程式可能會有出入
所以還是把完整需要的功能打出來
作為你的參考來完成自己的程式
------
這啥需要簽嗎
拿筆來
編輯記錄
romextromext 重新編輯於 2009-12-28 07:50:48, 註解 無‧
romextromext 重新編輯於 2009-12-28 07:52:41, 註解 無‧
tom78310
一般會員


發表:1
回覆:6
積分:1
註冊:2009-12-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-12-28 21:57:23 IP:220.142.xxx.xxx 訂閱
我需要的功能就是
當我輸入4*4鍵盤(裝在P0
當我按下1
LCD顯示1
按下2
LCD顯示12
按下A
LCD顯示12A

我用的LCD是上下兩排的
上面那一排是直接跑學號
下面那一排可以讓使用者輸入4*4鍵盤資料
感謝回答
編輯記錄
tom78310 重新編輯於 2009-12-28 22:05:26, 註解 無‧
tom78310 重新編輯於 2009-12-28 23:26:59, 註解 無‧
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-01-01 19:39:30 IP:123.194.xxx.xxx 訂閱
你先測試看看這是否能夠正確運作
用組合語言寫程式我不確定每次寫每次都能夠正確執行
這目前只是一個案一下鍵盤會出現鍵盤上的數字
然後數字是我在程式裡面定的除他我知道你怎麼排鍵盤我在改數字
數字會顯示再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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-01-01 20:34:30 IP:123.194.xxx.xxx 訂閱

[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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-01-05 08:14:44 IP:210.70.xxx.xxx 訂閱
我的編譯器
好像不能編譯
很多錯誤@@
我用X51編譯的~~
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-01-05 19:02:46 IP:123.194.xxx.xxx 訂閱
j我用的是這個Keil uVision2
你改用這種來組譯看看
------
這啥需要簽嗎
拿筆來
ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-01-05 20:36:11 IP:59.115.xxx.xxx 訂閱
x51可以編譯.

1. 把<>和font相關的都刪除.
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/
編輯記錄
ScottWang 重新編輯於 2010-01-05 20:37:07, 註解 無‧
ScottWang 重新編輯於 2010-01-05 20:37:58, 註解 無‧
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-01-05 20:53:46 IP:123.194.xxx.xxx 訂閱
  1. FONT那個都不是我家的==
    都是我貼上去才出現的
    組合語言怎麼可能會有這種東西出現==
    很多都不知道莫名其妙茂出來==
    不過你把EQU的.0去掉我的程式會出錯
    你可以試試看打把EQU改成BIT
    這種都不是我打的都是突然跑出來的
  2. /font
  3. font color="#000000"
  4. 其他要改最好打出來我看免得影響程式
  5. 這只是測試程式有沒有問題我不感保證我每次打都能夠不會有錯誤 誰能夠這樣那真的很厲害
------
這啥需要簽嗎
拿筆來
編輯記錄
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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2010-01-06 00:21:07 IP:220.142.xxx.xxx 訂閱
有關於42行的值
不用加上09"B"或"H"嗎??
tom78310
一般會員


發表:1
回覆:6
積分:1
註冊:2009-12-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2010-01-06 09:09:01 IP:210.70.xxx.xxx 訂閱
這可以執行的
它顯示10個0(右邊數過來10個)
但螢幕很黑
似乎是上下兩行的資料重疊
謝謝您的程式
能繼續幫我寫嗎??


===================引 用 romextromext 文 章===================
  1. FONT那個都不是我家的==
    都是我貼上去才出現的
    組合語言怎麼可能會有這種東西出現==
    很多都不知道莫名其妙茂出來==
    不過你把EQU的.0去掉我的程式會出錯
    你可以試試看打把EQU改成BIT
    這種都不是我打的都是突然跑出來的
  2. /font???
  3. font?color="#000000"
  4. 其他要改最好打出來我看免得影響程式
  5. 這只是測試程式有沒有問題我不感保證我每次打都能夠不會有錯誤 誰能夠這樣那真的很厲害
tom78310
一般會員


發表:1
回覆:6
積分:1
註冊:2009-12-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2010-01-06 09:10:54 IP:210.70.xxx.xxx 訂閱

===================引 用 tom78310 文 章===================
這可以執行的
它顯示10個0(右邊數過來10個)
但螢幕很黑
似乎是上下兩行的資料重疊
謝謝您的程式
能繼續幫我寫嗎??
我的鍵盤
FEDC
B369
A258
D147
===================引 用 romextromext 文 章===================

  1. FONT那個都不是我家的==
    都是我貼上去才出現的
    組合語言怎麼可能會有這種東西出現==
    很多都不知道莫名其妙茂出來==
    不過你把EQU的.0去掉我的程式會出錯
    你可以試試看打把EQU改成BIT
    這種都不是我打的都是突然跑出來的
  2. /font???
  3. font?color="#000000"
  4. 其他要改最好打出來我看免得影響程式
  5. 這只是測試程式有沒有問題我不感保證我每次打都能夠不會有錯誤 誰能夠這樣那真的很厲害
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2010-01-06 19:47:01 IP:123.194.xxx.xxx 訂閱
你09H這是十六進制的09那十六進制的09換成10進制的等於多少
還是09阿==你加跟沒加都沒差
通常沒超過10ˇ的我都沒加H
因為有加跟沒加意思一樣
及時通跟我的帳號一樣要加可以自己加
------
這啥需要簽嗎
拿筆來
編輯記錄
romextromext 重新編輯於 2010-01-06 20:07:17, 註解 無‧
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#16 引用回覆 回覆 發表時間:2010-01-07 20:21:30 IP:123.194.xxx.xxx 訂閱
我這幾天把我之前做過的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, 註解 無‧
系統時間:2024-04-20 17:45:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!