[問題] LCD接收字元

看板ASM作者 (小蘇)時間12年前 (2012/04/22 23:45), 編輯推噓2(200)
留言2則, 1人參與, 最新討論串1/1
參考了一些書籍,想要利用LCD看我到底傳了什麼東西給S51,結果卻不如預期 好像什麼東西都沒有傳到....... 想要請各位大大幫我看看是不是哪裡出了問題,感激不盡 以下程式碼是我拼拼湊湊寫出來的, 主要是參考http://faculty.stut.edu.tw/~wjshieh/example/LCD16x2.c 如有任何侵權請告訴我我馬上刪除此文,謝謝 #include <reg51.h> #include <stdio.h> sbit LCD_RS=P1^0; //定義接腳 sbit LCD_RW=P1^1; sbit LCD_E=P1^2; sbit LED=P1^3; #define LCD_Data P2 void WriteDataLCD(char WDLCD); void WriteCommandLCD(char WCLCD); void LCDInit(void); void ChangeCursor(char X,char Y); void DisplayWord(char LCD_word); void DisplayListChar(char code *DData); void delay_us(unsigned int t); void uart_init(void); //主程式開始 void main(void) { unsigned int i; LCDInit(); //LCM初始化 DisplayListChar("Success!"); <----這裡有成功 uart_init(); for(i=0;i<10;i++){while(!TI);TI=0;SBUF='U';} <----這裡也有成功,所以我排除 鮑率設錯的問題 LED=0;//LED亮 while(1); } void uart_int() interrupt 4 <----這邊是我自己加的 { unsigned char k; if (RI==1){ <----當接收端有收到資料時 LED=1; <問題>如果我傳送了一個字元但是LED燈沒有 熄滅,是不是代表程式沒有跑進來? RI=0; k=SBUF; LCDInit(); delay_us(100); DisplayWord(k); }else TI=0; } void delay_us(unsigned int t) { while(t--); } //uart初始設定 void uart_init(void) <------因為接收端可以收到資料, 我假設這邊設定無誤 { SCON=0x52; TMOD=0x21; TH1=253; TR1=1; } //寫資料到LCD副程式 void WriteDataLCD(char WDLCD) { LCD_Data = WDLCD; LCD_RS = 1; LCD_RW = 0; LCD_E = 1; //產生負緣 delay_us(100); //延遲等訊號穩定 LCD_E = 0; delay_us(100); //延遲等訊號處裡完畢 } //寫指令到LCD副程式 void WriteCommandLCD(char WCLCD) //BuysC為0時忽略忙檢測 { LCD_Data = WCLCD; LCD_RS = 0; LCD_RW = 0; LCD_E = 1; delay_us(100); //延遲等訊號穩定 LCD_E = 0; delay_us(100); //延遲等訊號處裡完畢 } void LCDInit(void) //LCM初始化 { WriteCommandLCD(0x38); // 設定LCD介面8位元,2行,5*7字型 WriteCommandLCD(0x06); // 設定寫資料至LCD時,顯示不要動,游標向右移動 WriteCommandLCD(0x0F); // 設定螢幕顯示及游標閃爍 WriteCommandLCD(0x01); // 清除顯示器 delay_us(5000); } //顯示一個字元 void DisplayWord(char LCD_word) { delay_us(100); LCD_RS=1; delay_us(100); LCD_Data=LCD_word; delay_us(100); LCD_E=1; delay_us(100); LCD_E=0; } //顯示一串字串 void DisplayListChar(char code *DData) { char x; x=0; while (DData[x]!=0) //若到達字串尾則退出 { WriteDataLCD(DData[x]); //顯示單個字 x++; //指到下一個字 } } 程式有點長,麻煩大家了,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.184.250.215

04/23 00:02, , 1F
你不能一收到字就RESET LCD啊~ 一直RESET麼顯示?
04/23 00:02, 1F

04/23 00:06, , 2F
然後你LED=1根本就沒作用吧?CPU RESET之後PORT就是1吧?
04/23 00:06, 2F
文章代碼(AID): #1Fb2UGwW (ASM)