音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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

問個(gè)笨笨的問題

作者:nevea 欄目:新手園地
問個(gè)笨笨的問題
點(diǎn)過液晶屏的人都知道,有些讀指令,
有些涉及到“讀狀態(tài)“指令,在讀狀態(tài)指令滿足一定要求,才能繼續(xù)下面的指令操作。比如,“讀狀態(tài)“指令執(zhí)行后我們要判斷,系統(tǒng)是否忙,是否已經(jīng)初始化完畢等等。
通常如果“讀狀態(tài)“指令返回的值表明系統(tǒng)正忙,我們需要等待,然后再讀這個(gè)“讀狀態(tài)“指令,直到系統(tǒng)能夠繼續(xù)執(zhí)行下面的指令。我想問的是:我們每次讀出來的這個(gè)“讀狀態(tài)“指令的值是否是不一樣的?為什么我的程序就只是在那里死循環(huán),一直在讀“讀狀態(tài)“指令,一直在判斷,然后再讀。
我不明白這是這么回事,查寄存器的值也是不變的。

2樓: >>參與討論
1121
或許是你的時(shí)序配合的不對。
 
3樓: >>參與討論
mohanwei
我是這樣做的:
做一個(gè)循環(huán),讀10000次(跟具體的模塊有關(guān)),有一次正確就返回返回成功標(biāo)志1,如果循環(huán)結(jié)束了就返回失敗標(biāo)記0。返回后再進(jìn)行出錯處理。

這也是由于碰到了液晶模塊排線有時(shí)候壓得不好接觸不良造成系統(tǒng)不正常才改進(jìn)的^_^

4樓: >>參與討論
nevea
可是.....
可是每次讀出來的數(shù)據(jù)都是一樣的啊,因?yàn)樵谶@里,單片機(jī)io口作為輸入口,你認(rèn)為:液晶屏能傳數(shù)據(jù)給單片機(jī)的io口么?其實(shí)我的疑問也就在這里:難道液晶屏自己本身也在作內(nèi)部的“運(yùn)動”,?致使每次傳出來的數(shù)據(jù)是不一樣的?我不明白液晶屏能像單片機(jī)一樣可以自己進(jìn)行內(nèi)部操作?
呵呵,很白癡的問題!

5樓: >>參與討論
maychang
液晶可以自己進(jìn)行內(nèi)部操作
單片機(jī)讀液晶狀態(tài)字節(jié),這一次讀和過一會兒讀可能不一樣。
你讀出的總是一樣,可能是硬件故障,也可能是時(shí)序不對。


6樓: >>參與討論
iC921
呵呵,很白癡的問題!
nevea 發(fā)表于 2006-4-16 18:24 新手園地 ←返回版面    

可是.....

可是每次讀出來的數(shù)據(jù)都是一樣的啊,因?yàn)樵谶@里,單片機(jī)io口作為輸入口,你認(rèn)為:液晶屏能傳數(shù)據(jù)給單片機(jī)的io口么?其實(shí)我的疑問也就在這里:難道液晶屏自己本身也在作內(nèi)部的“運(yùn)動”,?致使每次傳出來的數(shù)據(jù)是不一樣的?我不明白液晶屏能像單片機(jī)一樣可以自己進(jìn)行內(nèi)部操作?
呵呵,很白癡的問題!


-------------
說誰。
……每次都一樣,可是是什么呢?告訴大家。

想不到這玩意有這么難,不知道哪有專門的或特長的網(wǎng)站?如果可能,咱也要惡補(bǔ)一下

7樓: >>參與討論
nevea
程序
#include "SPCE061V004.H"

#define Bit0 0x0001
#define Bit1 0x0002
#define Bit2 0x0004
#define Bit3 0x0008
#define Bit4 0x0010
#define Bit5 0x0020
#define Bit6 0x0040
#define Bit7 0x0080
#define Bit8 0x0100
#define Bit9 0x0200
#define Bit10 0x0400
#define Bit11 0x0800
#define Bit12 0x1000
#define Bit13 0x2000
#define Bit14 0x4000
#define Bit15 0x8000


void Delay0()
     { unsigned CHAR i;
       for(i=0;i<1;i++);
     }  

void Delay1()
    { unsigned CHAR i;
      for(i=0;i<2;i++);
     }
     
void Delay2()
    {unsigned CHAR i;
     for(i=0;i<3;i++) ;
     }
          
void Init_IOA_Low8bit_Output() //// 設(shè)置A口低八位為輸出狀態(tài)  
     { *P_IOA_Dir=0x00ff;
       *P_IOA_Attrib=0x00ff;
       *P_IOA_Data=0x00ff;
     }
      
void Init_IOA_Low8bit_Input()  ////設(shè)置A口低八位為輸入狀態(tài)
     { *P_IOA_Dir=0xff00;
       *P_IOA_Attrib=0xff00;
       *P_IOA_Data=0xff00;
     }    
      
void Init_IOB_Low5bit_Output()  ///設(shè)置B口低五位為輸出狀態(tài)
    { *P_IOB_Dir=0x001f;
      *P_IOB_Attrib=0x001f;
      *P_IOB_Data=0x001f;
    }   
    
    
void Write_Command(unsigned CHAR data) ///寫指令函數(shù)
    { Init_IOB_Low5bit_Output() ;
      Init_IOA_Low8bit_Output();
      *P_IOB_Data&=~(Bit1+Bit2+Bit3+Bit4);   //置低R/W,D/I,CSA,CSB;寫指令,片選
       Delay1();
      *P_IOB_Data|=Bit0;                     //使能端E置位
      *P_IOA_Data=data;                       //向A口送數(shù)據(jù)
       Delay2();
      *P_IOB_Data&=~Bit0;                     //使能端E復(fù)位
       Delay0();
     *P_IOB_Data|=(Bit1+Bit2+Bit3+Bit4);      //置位R/W,D/I,CSA,CSB
    }
    
void Write_Data(unsigned CHAR data)   ///寫數(shù)據(jù)函數(shù)
   {  Init_IOB_Low5bit_Output() ;
      Init_IOA_Low8bit_Output();
      *P_IOB_Data&=~(Bit1+Bit3+Bit4);
      *P_IOB_Data|=Bit2;
       Delay1();
      *P_IOB_Data|=Bit0;    
      *P_IOA_Data=data;
       Delay2();
      *P_IOB_Data&=~Bit0;
       Delay0();
      *P_IOB_Data|=(Bit1+Bit3+Bit4);
      *P_IOB_Data&=~Bit2;
    }
    
unsigned CHAR Status_Read()  ///讀系統(tǒng)狀態(tài)函數(shù)
    { unsigned CHAR data;
      Init_IOB_Low5bit_Output();
      Init_IOA_Low8bit_Input() ;
      *P_IOB_Data&=~Bit0;                //使能端E復(fù)位
      *P_IOB_Data|=Bit1;                 //置位R/W
      *P_IOB_Data&=~(Bit2+Bit3+Bit4);    //置低D/I,CSA,CSB
       Delay2();
      *P_IOB_Data|=Bit0;                 //置位E
       Delay1();
      *P_IOB_Data&=~Bit0;                 //復(fù)位E
      data=*P_IOA_Data;                  //從A口讀數(shù)據(jù)*******在這之前是不是液晶屏早已將數(shù)據(jù)送上單片機(jī)A口了?****************
       Delay0();
      *P_IOB_Data&=~Bit1;                //復(fù)位R/W
      *P_IOB_Data|=(Bit2+Bit3+Bit4);        //置位D/I,CSA,CSB
      return data;                         //返回狀態(tài)字?jǐn)?shù)據(jù)
     }
     
           
void DISPLAY_On()          ///開顯示函數(shù)
    { Write_Command(0x007c);}
    
void DISPLAY_Start_Line()  ///設(shè)置起始線函數(shù)
    {Write_Command(0x0003);}   
    
void Set_Page_Address()    ///設(shè)置起始頁函數(shù)
    {Write_Command(0x001d);}
    
void Set_Y_Address()       ///設(shè)置起始Y地址函數(shù)
    {Write_Command(0x0002);}
    
void Clear_Screen()     ///清屏函數(shù),向第一片屏寫入全零
    {unsigned CHAR i;
     *P_IOB_Data&=~Bit0;
         for(i=0;i<512;i++)
            { Write_Data(0x0000);}
    }           
    
void Write_DISPLAY_Data()///向DISPLAY RAM里面寫數(shù)據(jù)
    {unsigned CHAR i;
     *P_IOB_Data&=~Bit0;
         for(i=0;i<512;i++)    
           { Write_Data(0x00ff);}    
    }        
    
    
void main()
{  u
8樓: >>參與討論
nevea
跳不出while循環(huán)
無論怎樣我的程序就是退不出while 循環(huán),硬件電路是按照要求的搭的,確認(rèn)沒有問題,不知道是什么原因,希望哪位大俠能幫我看看,。非常感謝了!

我試過,不加這個(gè)while 循環(huán),也就是不執(zhí)行Status_Read();,液晶屏反倒有顯示,但是顯示的內(nèi)容并不是我想要的,而且全速運(yùn)行還一直閃不停!

這是我第一次編程調(diào)屏。我相信在我的程序里面一定存在好多問題,甚至有些是很致命的錯誤,希望大俠能不厭其煩為我指明!

入門總是很難的,一個(gè)很簡單的問題,我的理解可能相差十萬八千里,最后當(dāng)然導(dǎo)致沒有預(yù)期效果。
希望能得到有力的幫助!

這是屏的資料:http://blog.21ic.com/uploadfile-/200641218353435.pdf

* - 本貼最后修改時(shí)間:2006-4-17 9:47:02 修改者:nevea

9樓: >>參與討論
iC921
到這一步,應(yīng)該說不難了
只要有一定的實(shí)戰(zhàn)經(jīng)驗(yàn)

最怕象踢死豬一樣沒有反應(yīng)。

* - 本貼最后修改時(shí)間:2006-4-17 12:41:29 修改者:iC921

10樓: >>參與討論
nevea
看來這個(gè)帖子...
21IC里面的能人應(yīng)該很多啊,不會再一次讓我這個(gè)帖子沉了吧?
雖然我問的問題很簡單,我自己也清楚,甚至基礎(chǔ)得幾乎無法回答,但是,每個(gè)老手都是經(jīng)歷過做新手的階段的,難道你們就忘了自己當(dāng)年是怎么過來的了嗎?
希望有心人能幫忙解答一下!-------------------------------新手的難題。

11樓: >>參與討論
nevea
為什么閱讀次數(shù)有增,卻沒有回貼...
相信會遇到有能幫忙解決問題的人!這已經(jīng)是這個(gè)問題的第二個(gè)貼了,我不想再沉下去了!

焦急地等待中..................
明天來看貼!期望能有收獲!

12樓: >>參與討論
tjjack
俺老漢再說一說
樓主你的屏還沒有搞定嗎?

我操作的時(shí)候一般不處理判斷是否"忙",我一般就加一點(diǎn)延時(shí),

判斷"忙"有時(shí)是很麻煩的,死活不對,尤其是第一次調(diào)試這東西.

我建議你加一點(diǎn)延時(shí)再判斷(或者不判斷),執(zhí)行下面的操作就可以了.

等你把它控制好了,一切你想怎么控制就怎么控制

13樓: >>參與討論
nevea
To tjjack
呵呵,還沒有呢!
依你的意思,如果不判斷“忙”,還要不要調(diào)用Status_Read();,你說的延時(shí)在該函數(shù)的前面還是后面,大約延時(shí)多長時(shí)間?
請你看我上面“跳不出while循環(huán)”的內(nèi)容,你遇到過類似的問題嗎?即使我關(guān)了顯示,他依然有顯示線,即使我清了屏,他依然有顯示線,我覺得問題很嚴(yán)重...

現(xiàn)在如果哪個(gè)專家肯給我說一下:你的資料給的不全,不足以驅(qū)動該屏,或是你的屏本身存在問題。
這樣我也就釋然了,呵呵   但是希望知道問題出在哪里。

14樓: >>參與討論
computer00
讀狀態(tài)時(shí),為何是a=(Status_Read())&0x001d;?
而不是a=(Status_Read())&0x0080;呢?


另外,在寫數(shù)據(jù)和寫指令兩個(gè)函數(shù)中,

*P_IOB_Data&=~(Bit1+Bit2+Bit3+Bit4);

前面似乎應(yīng)該加上一句
*P_IOB_Data&=~Bit0;                 //復(fù)位E



請仔細(xì)看時(shí)序圖,一定要弄對,時(shí)序錯一點(diǎn),就全錯了。

15樓: >>參與討論
nevea
To 00
非常感謝:
   1。屏的1--8pin對應(yīng)著DB7---DB0,而我的接法也是pin1--8對應(yīng)著MCU的IOA0--IOA7;Status_Read()不僅要判斷Busy還要判斷ON/OFF 和RESET;這里的ON/OFF和DisplayOn有什么區(qū)別我也不清楚。
   2,寫數(shù)據(jù)和寫指令函數(shù)中,像你說的那樣,之前我也加上了*P_IOB_Data&=~Bit0;                 //復(fù)位E
但是效果同現(xiàn)在一樣,因?yàn)榭紤]到在Status_Read()函數(shù)里面,在最后已經(jīng)復(fù)位E了,所以這樣改掉了。


* - 本貼最后修改時(shí)間:2006-4-18 10:05:48 修改者:nevea

16樓: >>參與討論
computer00
暈……那你只好改成延時(shí)試試了。
將讀狀態(tài)判斷忙的程序,暫時(shí)先改成延時(shí)1mS的程序,再來調(diào)試顯示部分。等顯示正常后,再回來調(diào)讀忙狀態(tài)的函數(shù)。

17樓: >>參與討論
nevea
依然不行!
我猜是不是液晶屏給的指令不正確!或者是液晶屏需要什么初始化指令而資料里面沒給出!開關(guān)顯示指令居然不起作用!

18樓: >>參與討論
iC921
數(shù)據(jù)先要簡單,不要變看看
 
19樓: >>參與討論
tjjack
re
a=(Status_Read())&0x001d;?

是什么意思?我不明白,你的編程風(fēng)格和我的不同.看你的程序有點(diǎn)不習(xí)慣!!

圖中的是那三個(gè)位的作用,你不能跳出循環(huán)肯定是這三個(gè)位不是你所想的那樣!

20樓: >>參與討論
夏蟲
為什么要判斷ON/OFF??
只需要判斷BUSY位就可以了

21樓: >>參與討論
nevea
非常感謝
非常感謝:
   屏的1--8pin對應(yīng)著DB7---DB0,而我的接法也是pin1--8對應(yīng)著MCU的IOA0--IOA7;Status_Read()不僅要判斷Busy還要判斷ON/OFF 和RESET;這里的ON/OFF和DISPLAYOn有什么區(qū)別我也不清楚。

也許你說得是對的,我可能理解得不正確!
對啊,麻煩你再看看你截的這個(gè)圖,DB0-0,DB1-0,DB2-0,DB3/DB4-RESET,DB5--ON/OFF,DB6--0,DB7--BUSY      
RESET: 1:RESET
       0:NORMAL
ON/OFF: 1:DISPLAY OFF
        0:DISPLAY ON
BUSY:   1:INTERNAL OPERATION
        0:READY
目的是要判斷DB7--DB0是否為10111000,但是單片機(jī)IOA0--IOA7與他們是一一對應(yīng)的,故反過來判斷,為00011101,即0x001d(凌陽單片機(jī)16位,我用低8位),只要這8位里面有一位為1,就再去判斷,直到8位全部為0。

再請你幫我看看,順便幫忙解釋一下此處的ON/OFF,與那個(gè)DISPLAY On/Off 有什么不同,我才學(xué)編程哪里有什么風(fēng)格呵!程序亂了點(diǎn),見諒。呵呵!

22樓: >>參與討論
iC921
好象你沒有認(rèn)真閱讀和整理手冊
對啊,麻煩你再看看你截的這個(gè)圖,DB0-0,DB1-0,DB2-0,DB3/DB4-RESET,DB5--ON/OFF,DB6--0,DB7--BUSY      
RESET: 1:RESET
     0:NORMAL
ON/OFF: 1:DISPLAY OFF
      0:DISPLAY ON
BUSY:   1:INTERNAL OPERATION
       0:READY
目的是要判斷DB7--DB0是否為10111000 ←最少根據(jù)文件的第14頁的描述(本頁開頭),DB3=0(截圖部分排版有問題要澄清:REST0,一時(shí)說不清是什么意思,文件中也沒有RESET0這玩意做command)。另外,根據(jù)同頁的
“RESET:
RESET=1 shows that the SYSTEM is being initialized. In this condition, no instructions except status read can be accepted.
RESET=0 shows that initializing has finished and the SYSTEM is in the usual operation condition.”
描述,DB4-RESET也應(yīng)該為0而不為1。表面上RESET=1也可以讀,但都已經(jīng)初始化了,還讀什么呢?我看,就是能讀出來好象也已經(jīng)不是你需要的了。

你看看是不是這樣?不要太急著想程序,而要先弄清楚手冊才是根本。想來這個(gè)事也許不怪你,因?yàn)槲募拇_實(shí)不敢恭維,太容易讓人誤解了。

最后,DB7-busy到底是取1還是取0都要掂量掂量……

---------
沒系統(tǒng)了解,僅供參考。 

* - 本貼最后修改時(shí)間:2006-4-19 3:21:44 修改者:iC921

23樓: >>參與討論
夏蟲
RE
ON/OFF用于控制液晶屏是否顯示內(nèi)容,這里是要控制而不是來讀取判斷的,你要做的只是讀BUSY是否是READY狀態(tài),其他的位都只是液晶屏當(dāng)前狀態(tài),自己知道就行了

24樓: >>參與討論
computer00
先將這個(gè)寄存器的內(nèi)容讀回來,然后看看它的內(nèi)容到底是什么
如果是全1或者全0,那就說明可能程序出了問題,根本沒有讀到它的值。

調(diào)試要一步步來的,下一步的運(yùn)行,要建立在上一步正確運(yùn)行的基礎(chǔ)上。
只有確認(rèn)前面的程序100% OK之后,才能繼續(xù)往下調(diào),否則一切都是白費(fèi)。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
關(guān)于DS1302與單片機(jī)通信
請教74HC4060外部晶振的接法
請教關(guān)于放大器靈敏度
單片機(jī)的led輸出問題求教
89c2051串口通信問題請教..
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號