|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
c51高手請過來指教 |
| 作者:yanbing110 欄目:單片機(jī) |
各位老兄好,小弟C51不久,比較菜,有問題向大家請教一下 前兩天編了一個LCD程序,LCD是LCM045,就是顯示四位數(shù)并帶小數(shù)點(diǎn)的那種,程序也寫出來了,硬件調(diào)試也通過了 平時我習(xí)慣把主程序放最后,當(dāng)我把AD轉(zhuǎn)換子程序放到LCD的那些子程序的前面,LCD就沒有顯示了,即使把AD放到一邊,在主程序里不調(diào)用也不行,還是不能顯示. 不過當(dāng)我把AD轉(zhuǎn)換子程序放到LCD的那些子程序的后面,不調(diào)用它時LCD能顯示,調(diào)用的話,就還是不能顯示,搞不懂. 順便說一下,LCD那一塊用了幾個帶參數(shù)的函數(shù),是不是那里占用了太多的硬件資源,還是怎么回事,老兄們,指教一下小弟啊 |
| 2樓: | >>參與討論 |
| 作者: yanbing110 于 2006/6/21 8:02:00 發(fā)布:
自己先頂 大哥們,怎么沒人過來指教一下啊 |
|
| 3樓: | >>參與討論 |
| 作者: puppyh 于 2006/6/21 9:35:00 發(fā)布:
檢測一下匯編語言 當(dāng)把AD轉(zhuǎn)換子程序放到LCD的那些子程序的前面時,你看看反匯編,AD轉(zhuǎn)換的代碼是在什么地址上。 |
|
| 4樓: | >>參與討論 |
| 作者: computer00 于 2006/6/21 9:53:00 發(fā)布:
這個問題不好說。應(yīng)該是一些比較隱蔽的錯誤,再查查程序。 |
|
| 5樓: | >>參與討論 |
| 作者: xycqsou 于 2006/6/21 14:30:00 發(fā)布:
我想應(yīng)該是你那AD程序的問題吧! 還有就是你編譯的結(jié)果有沒有警 告的呀,如果有的話,可能問題就出在那個地方了! |
|
| 6樓: | >>參與討論 |
| 作者: yanfengzhu 于 2006/6/21 19:04:00 發(fā)布:
把a(bǔ)d轉(zhuǎn)換程序注釋掉再看看。 |
|
| 7樓: | >>參與討論 |
| 作者: 采鳥 于 2006/6/21 19:14:00 發(fā)布:
回復(fù) 把你的源貼上來。 |
|
| 8樓: | >>參與討論 |
| 作者: sharn 于 2006/6/21 19:32:00 發(fā)布:
把程序發(fā)過來看看! |
|
| 9樓: | >>參與討論 |
| 作者: yanbing110 于 2006/6/21 19:48:00 發(fā)布:
謝謝各位大俠的支持 謝謝各位大俠的支持,這是我的程序: #include<AT89X51.H> #define CLOCK P1_0//單片機(jī)對AD轉(zhuǎn)換TLV1543的幾個輸入輸出口的定義 #define D_IN P1_1 #define D_OUT P1_2 #define _CS P1_3 void deday() { #pragma asm nop nop nop #pragma endasm } unsigned CHAR code tab1[10]={0x7d,0x60,0x3e,0x7a,0x63,0x5b,0x5f,0x70,0x7f,0x7b}; unsigned CHAR code tab2[10]={0xfd,0xe0,0xbe,0xfa,0xe3,0xdb,0xdf,0xf0,0xff,0xfb}; // //寫命令 void wrcom(unsigned CHAR i) {unsigned CHAR data j; P2_4=1;//P2_4為/CS deday(); P2_4=0; //D=1 100 deday(); P2_3=0;//P2_3為/WR deday(); P2_2=1;//1 P2_2為DATA deday(); P2_3=1; //D=0 deday(); P2_3=0; deday(); P2_2=0; //0 deday(); P2_3=1; //D=0 deday(); P2_3=0; deday(); P2_2=0; //0 deday(); P2_3=1; //data=data8bit+0 (9 bit) deday(); for(j=8;j>0;j--) {P2_3=0; deday(); P2_2=(bit)(i&0x80); i<<=1; P2_3=1; deday(); } P2_3=0; deday(); P2_2=0; //0 deday(); P2_3=1; } // // //寫地址 void wrdd(unsigned int i) {unsigned CHAR data j; P2_4=1; deday(); P2_4=0; //D=1 101 deday(); P2_3=0; deday(); P2_2=1; //1 deday(); P2_3=1; //D=0 deday(); P2_3=0; deday(); P2_2=0; //0 deday(); P2_3=1; //D=1 deday(); P2_3=0; deday(); P2_2=1; //1 deday(); P2_3=1; //六位地址 deday(); for(j=6;j>0;j--) {P2_3=0; deday(); P2_2=(bit)(i&0x80); i<<=1; P2_3=1; deday(); } } // // //寫入數(shù)據(jù) void wrda(unsigned int i,unsigned CHAR j) { for( ;j>0;j--) {P2_3=0; deday(); P2_2=(bit)(i&0x01); i>>=1; P2_3=1; deday(); } } // void lcd() { unsigned CHAR data x; x=tab1[2]; deday(); wrcom(0x29); wrcom(0x18); wrcom(0x01); wrcom(0x03); // wrdd(0x56); wrda(0x01,4); // wrdd(0x58); wrda(0x00,8); wrdd(0x60); wrda(x,8); // wrdd(0x68); wrda(0x00,4); // wrdd(0x6c); wrda(x,8); wrdd(0x76); wrda(x,8); // wrdd(0x7c); wrda(0x01,4); } // unsigned int read1543(unsigned CHAR PORT) //從TLC1543讀取采樣值,形參PORT是采樣的通道號 { unsigned int data ad;unsigned int data i; unsigned CHAR data al=0,ah=0; CLOCK=0; _CS=0; PORT<<=4; for (i=0;i<4;i++) //把通道號打入1543 { D_IN=(bit)(PORT&0x80);CLOCK=1; deday(); CLOCK=0; PORT<<=1; } for (i=0;i<6;i++) //填充6個CLOCK { CLOCK=1; deday(); CLOCK=0; } _CS=1; deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday(); deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday(); deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday();deday(); _CS=0; //等待AD轉(zhuǎn)換 for (i=0;i<2;i++) //取D9,D8 { D_OUT=1; CLOCK=1; ah<<=1; if (D_OUT) ah|=0x01; CLOCK=0; deday(); } for (i=0;i<8;i++) //取D7--D0 { D_OUT=1; CLOCK=1; al<<=1; if (D_OUT) al|=0x01; CLOCK=0; deday(); } _CS=1; P3=ah;P2=al; ad=(unsigned int)ah;ad<<=8;ad|=al; //得到AD值 return (ad); } // // void main() { unsigned int data a; lcd(); } 如果把 void read1543()那個子程序去掉的話,LCD上顯示的是2 2 2,但是把它加上的話什么都不會顯示 |
|
| 10樓: | >>參與討論 |
| 作者: yanbing110 于 2006/6/22 8:52:00 發(fā)布:
我已經(jīng)把程序發(fā)上去了 我已經(jīng)把程序發(fā)上去了 |
|
| 11樓: | >>參與討論 |
| 作者: computer00 于 2006/6/22 9:28:00 發(fā)布:
應(yīng)該是你的LCD程序出了問題吧。什么型號的LCD? 先只弄LCD程序,LCD好用后,再加其它功能。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號 |