windlin
一般會員
發表:3 回覆:4 積分:1 註冊:2005-04-18
發送簡訊給我
|
用4X4鍵盤做輸入;輸入到八個位元後,就無法繼續輸入,請問要如何做
才可以輸入更多的字元呢?(我看書上寫好像只能從外部輸入八個位元)
|
㊣
版主
發表:261 回覆:2302 積分:1667 註冊:2005-01-04
發送簡訊給我
|
引言:
輸入到八個位元後,就無法繼續輸入??
不是可以輸入16個嗎?
何謂"輸入到八個位元後,就無法繼續輸入"??
------ -------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
|
windlin
一般會員
發表:3 回覆:4 積分:1 註冊:2005-04-18
發送簡訊給我
|
DL:設定外接處理器的資料長度,DL=1為8位元資料傳送,DL=0為4位元資料傳送
是這樣子的嗎?我現在輸入到第八個字以後就沒辦法在輸入了~
|
㊣
版主
發表:261 回覆:2302 積分:1667 註冊:2005-01-04
發送簡訊給我
|
你到底是LCD的顯示問題,還是4x4鍵盤的問題??
------ -------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
|
windlin
一般會員
發表:3 回覆:4 積分:1 註冊:2005-04-18
發送簡訊給我
|
我這麼說好了
現在我用鍵盤輸入前八個位元都沒有問題
但是~後面八個位元卻無法顯示
LCD_Cmd(0x38)
這一行是設定DL=1:8bit傳輸,顯示2行,F=0:5*7字型
DL:設定外接處理器的資料長度,DL=1為8位元資料傳送,DL=0為4位元資料傳送
重點就是~目前輸入前八個位元輸出都沒問題但是~後面按什麼都無法顯示了
我只是想問~是否真的是DL的問題~還是有其他我沒注意到的??
若真的是DL的問題那有什麼解決的方法~??
|
㊣
版主
發表:261 回覆:2302 積分:1667 註冊:2005-01-04
發送簡訊給我
|
看一下你的LCD DB0~DB7有沒有都接,如果沒有,你設DL=1也沒用.
只能用4bit的傳送方式了.
------ -------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
|
阿信
版主
發表:111 回覆:983 積分:813 註冊:2005-03-10
發送簡訊給我
|
引言:
DL:設定外接處理器的資料長度,DL=1為8位元資料傳送,DL=0為4位元資料傳送
重點就是~目前輸入前八個位元輸出都沒問題但是~後面按什麼都無法顯示了
DL=1 指的是並列8位元傳輸 一個字元一次傳完
DL=0 指的是並列4位元傳輸 一個字元分兩次傳完
不是只能傳8個位元
傳送的是 "字元(character)" 不是 "位元(Bit)" 後面不能顯示
相信是程式的問題
建議把程式po上來 -------------------
美好的事物 稍縱即逝
|
windlin
一般會員
發表:3 回覆:4 積分:1 註冊:2005-04-18
發送簡訊給我
|
#include
char count=0,scan=0xff;
char code Table[]
={0x46,0x45,0x44,0x43,0x42,0x33,0x36,0x39,
0x41,0x32,0x35,0x38,0x30,0x31,0x34,0x37};
sbit RS=0xb5;
sbit RW=0xb6;
sbit EN=0xb7;
sfr DATA_BUS=0x90;
void LCD_Cmd(unsigned char comm);
void Reset_LCD(void);
void dataout(void);
void Delay(unsigned int dly);
void Send_Data(char Data);
void main()
{
P1=0;
Reset_LCD();
TMOD=0x01;
P2=0xff;
LCD_Cmd(0x80);
while(1)
{
if(count>15) {scan=0xef;count=0;}
P2=scan|0x0f;
if (P2_0==0) dataout();
count ;Delay(70);
if (P2_1==0) dataout();
count ;Delay(70);
if (P2_2==0) dataout();
count ; Delay(70);
if (P2_3==0) dataout();
count ;Delay(70);
scan=scan<<1;
}
}
void dataout(void)
{
Delay(2000);
Send_Data(Table[count]);
while((P2 | 0xf0)!=0xff);
Delay(2000);
}
void LCD_Cmd(unsigned char comm)
{
DATA_BUS=comm;
RS=0;RW=0;EN=1;
Delay(30);
EN=0;
}
void Send_Data(char Data)
{
DATA_BUS=Data;
RS=1;RW=0;EN=1;
Delay(30);
EN=0;
}
void Reset_LCD(void)
{
LCD_Cmd(0x38);
LCD_Cmd(0x0c);
LCD_Cmd(0x06);
LCD_Cmd(0x01);
LCD_Cmd(0x02);
}
void Delay(unsigned int dly)
{
while(dly > 0)
dly --;
}
老實說剛剛我還是有在試
後面的多按幾次還是可以顯示
不過我改不出來正常的狀態
就拜託看一下哪裡有錯誤~謝謝囉~
|
阿信
版主
發表:111 回覆:983 積分:813 註冊:2005-03-10
發送簡訊給我
|
程式的結構化很好 鍵盤掃描也沒有問題
如果縮排再整齊一點就更好了~ 應該除了超過
|