|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求教液晶高手 |
| 作者:qdfywhj 欄目:技術(shù)交流 |
我的液晶屏是OCM240128的,廣東金鵬公司的。調(diào)試以來(lái),一直出現(xiàn)連續(xù)運(yùn)行顯示錯(cuò)位、字符模糊等現(xiàn)象,單步運(yùn)行顯示情況良好。在求助廠家無(wú)果的情況下,求教各位大俠分析分析。 液晶是51單片機(jī)總線方式下控制的。導(dǎo)線長(zhǎng)度大約30cm。導(dǎo)線直徑在1mm左右。我排除了液晶本身的問(wèn)題。換過(guò)多塊屏了,沒種的現(xiàn)象相同,故確定不是液晶問(wèn)題。線路板也制作幾次了,可問(wèn)題依然存在。 在程序方面,下面是我的程序 #define ComPort 0xfaff #define DataPort 0xf8ff #define GraphAddr 0x0000 //HEAD of graph //以8*8字符計(jì)算,顯示屏橫向、縱向可以顯示的字符個(gè)數(shù) //以240*128為例: #define LineChar 30 //一行16個(gè)字符(8*8) #define ColumnChar 16 //總共16列 //指令,數(shù)據(jù) 讀寫狀態(tài)檢查 #define RWCheck() { unsigned CHAR sta; do{ sta=XBYTE[ComPort] & 0x03; } while(sta!=0x03); } //數(shù)據(jù)自動(dòng)讀 狀態(tài)檢查 #define AutoRCheck() { unsigned CHAR sta; do{ sta=XBYTE[ComPort] & 0x04; } while(sta!=0x04); } //數(shù)據(jù)自動(dòng)寫 狀態(tài)檢查 #define AutoWCheck() { unsigned CHAR sta; do{ sta=XBYTE[ComPort] & 0x08; } while(sta!=0x08); } // 向數(shù)據(jù)口發(fā)Data #define OutPortData(dat ) { RWCheck(); XBYTE[DataPort]=dat; } //寫有 1 個(gè)參數(shù)命令 #define OutPortCom1(command) { RWCheck(); XBYTE[ComPort]= command; } //寫有 2 個(gè)參數(shù)命令 #define OutPortCom2(dat, command) { OutPortData(dat); OutPortCom1(command); } //寫有 3 個(gè)參數(shù)命令 #define OutPortCom3(data1, data2, command) { OutPortData(data1); OutPortData(data2); OutPortCom1(command);} //unsigned CHAR InPortData() { RWCheck(); return(XBYTE[DataPort]); } //顯示8*16字符 //lin:行(0-127), column: 列(0-29) //ch:字符代碼 void ShowChar(unsigned CHAR lin,unsigned CHAR column,unsigned CHAR ch) { unsigned CHAR i; unsigned CHAR dat; unsigned int StartAddr; StartAddr=lin*LineChar +column; //定位起始行 for(i=0;i<16;i++) { dat=fhtab[ ch*16+i]; OutPortCom3( (unsigned CHAR)(StartAddr), (unsigned CHAR)(StartAddr>>8), 0x24); //set address OutPortCom2( dat, 0xc0); StartAddr=StartAddr + LineChar; } } void ClearScreen(void) { unsigned int i; ///////// 清顯示 RAM 區(qū) 0000h--2000h (8k) OutPortCom3(0x00,0x00,0x24); //設(shè)置指針地址0000H OutPortCom1(0xb0); //設(shè)置自動(dòng)寫狀態(tài) for(i=0x00;i<0x2000;i++) OutPortData(0x00); // data=0; OutPortCom1(0xb2); // 自動(dòng)寫結(jié)束 } //初始化LCD void Init_LCD(void) { OutPortCom3( 0x00,0x00,0x42 ); //設(shè)置圖形顯示區(qū)域首地址GraphAddr OutPortCom3( 30,0x00,0x43 ); //設(shè)置圖形顯示區(qū)域?qū)挾?: LineChar OutPortCom1(0xa7); //設(shè)置光標(biāo)形狀 cursor size 8x8 OutPortCom1(0x80); //設(shè)置顯示方式: CGROM方式 文本\圖形 "或" OutPortCom1(0x98); //設(shè)置顯示開關(guān): 1001 1100 圖形 ClearScreen(); //清屏 delay_s(1); WriteScreen(); //寫屏 delay_s(1); ClearScreen(); //清屏 } 求教大俠們分析一下,到底問(wèn)題在哪里? 拜托! |
| 2樓: | >>參與討論 |
| 作者: xwj 于 2006/5/12 8:46:00 發(fā)布:
可能時(shí)序過(guò)快,晶振頻率多少?總線方式時(shí)一定要注意這個(gè)哦 |
|
| 3樓: | >>參與討論 |
| 作者: 夏蟲 于 2006/5/12 10:26:00 發(fā)布:
可能是你刷屏的速度太快,降低速度試試,多加一些nop |
|
| 4樓: | >>參與討論 |
| 作者: qdfywhj 于 2006/5/13 8:12:00 發(fā)布:
CPU主頻是12MHZ,我按照大俠的指點(diǎn)試試 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |