|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
一個LCD1602的小問題,兩天沒搞定,開始懷疑自己的能力了 |
| 作者:94179411 欄目:技術(shù)交流 |
用AVR驅(qū)動LCD1602A顯示,AVR用的是MEGA16L.html">MEGA16L,為了節(jié)省口線采用4BIT連接法,程序是我從OURAVR下載M8的,將它改到我的M16上來用,但是直到現(xiàn)在我的LCD1602仍然一點(diǎn)反應(yīng)都沒有。 那個程序我用M8調(diào)試過沒問題,程學(xué)更成M16的后我又用我的M16(DIP)小板調(diào)試過也沒問題,但是在我做的PCB(M16為TQFP封裝)上卻不顯示,連線不存在斷路或是短路現(xiàn)象,而且我測試過我焊的板子都沒有問題,芯片各管腳也可以正常工作 由于我沒有仿真器,我采用LED跟蹤法,我發(fā)現(xiàn)M16很多時候都是在等待1602的狀態(tài)寄存器的第八位(即忙標(biāo)志位)清零,我把它從外部拉低(即用導(dǎo)線把這個管腳接地),程序通?梢哉5嘏苌蠋兹Γ▋H從LED是否發(fā)光光推測,此時1602并未顯示),之后又會等待忙標(biāo)志位清零,程序就死在這里了 我沒有找到專門介紹數(shù)據(jù)線4線制接法的1602材料(上面只有8線制,真該用個595接8線,唉),也分析不出具體問題出在哪里,請這里的各位大哥幫小弟分析一下,十分感謝! 為了大家方便分析,我把電路和程序全貼上來 程序: #include <iom16v.h> //MEGA16 #include <macros.h> #include "1602LCD.h" #define set_bit(x,y) (x|=(1<<y))//置位寄器x的第y位 #define clr_bit(x,y) (x&=~(1<<y))//清零寄器x的第y位 /********************************************************** 光標(biāo)命令 LCD_write_char(0x0e,0); //光標(biāo)開 LCD_write_char(0x0d,0); //光標(biāo)所在字符閃爍 LCD_write_char(0x0c,0); //光標(biāo)關(guān) **********************************************************/ /********************************************************** TC1602B LCD DISPLAY 建立時間:2003年11月9號 修改日期:2003年11月14號 LCD_write函數(shù)功能:當(dāng)command=0時,向LCD寫入數(shù)據(jù),否則向LCD寫 入命令 LCD第一行顯示寄存器地址:0X80-0X8F LCD第二行顯示寄存器地址:0XC0-0XCF **********************************************************/ void LCD_init(void) { delay_nms(20); LCD_write_char(0x28,0); //4bit TEST LCD_write_char(0x0c,0); //顯示開 LCD_write_char(0x01,0); //顯示清屏 LCD_write_char(0x06,0); //顯示光標(biāo)移動設(shè)置 } void LCD_en_write(void) //EN端產(chǎn)生一個高電平脈沖,寫LCD { LCD_EN_PORT |= LCD_EN; delay_nus(1); LCD_EN_PORT &= ~LCD_EN; } /*----------------------------------------------------------------------- LCD_write_char : 英文字符串顯示函數(shù) 輸入?yún)?shù):*s :英文字符串指針; X、Y : 顯示字符串的位置,X:0-15,Y:0-1 LCD第一行顯示寄存器地址:0X80-0X8F LCD第一行顯示寄存器地址:0XC0-0XCF 編寫日期 :2003-11-19 最后修改日期 :2004-8-19 -----------------------------------------------------------------------*/ void LCD_write_char(unsigned command,unsigned data) { unsigned command_temp,data_temp; command_temp = command; data_temp = data; LCD_wait_Ready(); LCD_RW_PORT &= ~LCD_RW; //RW=0 if (command == 0) { LCD_RS_PORT |= LCD_RS; //RS=1 LCD_DATA_PORT &= 0X0F; LCD_DATA_PORT |= data_temp&0xf0; //send high 4bit } else { LCD_RS_PORT &= ~LCD_RS; //RS=0 LCD_DATA_PORT &= 0X0F; LCD_DATA_PORT |= command_temp&0xf0;//send high 4bit } LCD_en_write(); command_temp=command_temp << 4; //send low 4bit data_temp=data_temp << 4; LCD_DATA_PORT &= 0X0F; if (command==0) LCD_DATA_PORT |= data_temp&0xf0; else LCD_DATA_PORT |= command_temp&0xf0; LCD_en_write(); LCD_RW_PORT |= LCD_RW; LCD_RS_PORT ^= LCD_RS; } void LCD_wait_Ready(void) //等待LCD空閑 { LCD_DATA_DDR &= ~0x80; //PD7 I/O口方向設(shè)置為輸入 LCD_RW_PORT |= LCD_RW; //RW=1 LCD_RS_PORT &= ~LCD_RS; //RS=0 LCD_EN_PORT |= LCD_EN; //EN=1 while (!( LCD_DATA_PIN&0x80 ) == 0); //RW=1,讀PD7,為0表示空閑; set_bit(DDRC,PC2); clr_bit(PORTC,PC2); //亮紅燈 用于跟蹤程序 delay_nms(1000); set_bit(PORTC,PC2); //滅紅燈 delay_nms(1000); LCD_EN_PORT &= ~LCD_EN; //EN=0 LCD_DATA_DDR |= 0xf0; } /*----------------------------------------------------------------------- LCD_set_xy &nbs |
| 2樓: | >>參與討論 |
| 作者: 94179411 于 2006/12/17 10:43:00 發(fā)布:
電路圖(測試LED沒畫上,接在PC2和PC3上)
|
|
| 3樓: | >>參與討論 |
| 作者: 王紫豪 于 2006/12/17 20:59:00 發(fā)布:
有的1602需要電位器調(diào)節(jié)lcd驅(qū)動電壓的 |
|
| 4樓: | >>參與討論 |
| 作者: wjc3k 于 2006/12/17 22:34:00 發(fā)布:
四線接法。 我看到的四線接法一般是接D0~D3,這個接D4~D7有沒有什么說法? |
|
| 5樓: | >>參與討論 |
| 作者: 94馬甲 于 2006/12/18 8:44:00 發(fā)布:
期待有人解答 “那個程序我用M8調(diào)試過沒問題,程學(xué)更成M16的后我又用我的M16(DIP)小板調(diào)試過也沒問題,但是在我做的PCB(M16為TQFP封裝)上卻不顯示,連線不存在斷路或是短路現(xiàn)象,而且我測試過我焊的板子都沒有問題,芯片各管腳也可以正常工作” 可見,樓上兩位分析沒道理 |
|
| 6樓: | >>參與討論 |
| 作者: xwj 于 2006/12/18 8:51:00 發(fā)布:
不要到處發(fā)貼,別人回的你看了沒有??? 排除硬件問題和引腳定義錯誤等低級錯誤 那就是速度問題 再注意下端口上拉、第二功能等 To:wjc3k 字符液晶4位接法就是接D4~D7,D0~D3不接的,分2次寫入,先寫高4位再寫低4位 |
|
| 7樓: | >>參與討論 |
| 作者: djc001 于 2006/12/18 8:54:00 發(fā)布:
仔細(xì)比較下兩個板子的不同/ |
|
| 8樓: | >>參與討論 |
| 作者: stycx 于 2006/12/18 14:58:00 發(fā)布:
別等待忙標(biāo)志位清零,等固定時間就直接發(fā)下一信號 r/w信號直接接地 |
|
| 9樓: | >>參與討論 |
| 作者: 94179411 于 2006/12/18 15:43:00 發(fā)布:
問題已解決 嚴(yán)重感謝xwj,我是在您的博客里找到的解決問題的辦法 另外:這個問題貼我就發(fā)了兩個版面,我是擔(dān)心問題出在單片機(jī)上所以在avr版也發(fā)了個貼,另一個原因是擔(dān)心向您這種熱心的高手只喜歡瀏覽固定的版面而看不到我的問題故而出此下策。 還有就是在這里我還要向您討1602的完整材料(包含HD44780指令一覽表的),我實(shí)在是沒有找到詳細(xì)的數(shù)據(jù)手冊 |
|
| 10樓: | >>參與討論 |
| 作者: fsclub 于 2006/12/21 16:29:00 發(fā)布:
網(wǎng)上搜一下HD47880 PDF 網(wǎng)上搜一下HD47880 PDF |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |