簡易電子書(24C64+Atmega16+128*64+紅外接收+串口下載)

  簡易電子書(24C64+Atmega16+128*64+紅外接收+串口下載)        

                小店地址:http://shop62796340.taobao.com

目前市場上各式各樣的電子書琳琅滿目,可自己總有一種自己DIY一個電子書的衝動。材料基本是拆機的,前後停停續續花了一個多星期,基本算是完成。可以通過串口下載TXT格式的文本文件,由於只掛了一個24C64的存儲器,顯示器是IC電話機上拆下來的無字庫因此一個24C64只能存儲2048個漢字,不過可以通過增加24C64個數來加大存儲容量。新發幾張圖上來瞧瞧:

 

顯示器效果圖

控制電路及遙控器

串口接口

洞洞板反面

上位機

 

以下來分解下:

 

 顯示器:

  顯示器爲IC電話機上折下來的,128*64可顯示4行漢字。前後花了兩天的時間來研究接口和寫驅動程序,本程序目前只適用於AVR單片機,不過可方便的移植到51、430等單片機上。上前手頭上還有十幾塊該液晶顯示器。有需要的朋歡迎拍磚。 

 按鍵控制:

   本來想焊接開關來控制顯示,後來正好朋友那麼有個紅外接收頭,決定用紅外搖器來控制,感覺更酷。紅外解碼採用的是中斷的方式,這裏和串口接收有衝突。由於串口也是採用中斷的方式,因些會導致串口無法完整正確的接收上位機發來的數據。這裏筆者通過採用通信協議來控制數據的發送,即當下載的時候關閉紅外中斷來保證串完整的接收數據。當數據接收完後再重先找開紅外中斷。本交採用的協議也比較簡單如下所示:

      struct uarData{

                                char cmd;

                                char sum;

                                char *pData;

                             };

 存儲器:

   本次採用的是常用的24C64存儲器可存儲2048個漢字。然而一條總線上可掛接8個,因些可能過掛接個數來擴展存儲的容量或是更換更大容量的存儲器,該存器採用的是I2C總線,驅動程序比較簡單,網上很多這裏不做介紹。

 上位機軟件:

   上位機軟件採用QT編寫,不知道QT是什麼的朋友可以百度一下。這裏說兩句題外話,之前學過VC++,學了一個月下來基本是一頭的霧水只能死搬硬套的寫幾個很SB的程序。個人感覺MFC的結構組織的比較的亂,有種讓人摸不着頭腦的感覺,整個MSDN下下來有好幾個G,文檔的組織也比較差而且用中國人的話就是很繞,讓人看的很糾結。最讓人噁心的是整個程序寫下來,不知道程序是從那開始的,好多語句是固定死的,沒有爲什麼只用死記着,也讓人看不太懂。最終還是放棄了VC++;直到後來學校組織電子設計大賽培訓,第一次接觸到了QT,可謂一見鍾情。當時老師給我們分配了任務,我當時是學QT然後寫個示波器的界面程序。QT是面向多平臺的,一次編寫代碼只要簡單的修改下就能到處編譯,可移植性非常的OK。相比MFC於QT組織的非常的好,每個部件和類都非常的清晰明瞭,最讓人不可思議的是QT全部的幫助文檔下下來才十幾個M,比起MSDN的好幾個G確實有點讓人難以致信,沒錯QT確實做到了,而且做的非常的好。當初學習QT不到兩個星期基本就把示波器界面給寫出來了。另外一組用的是VB,得運行在WINCE上。想比我的他那個效果有點,而且得運行於WINCE上。開機得先啓動好WINCE後才能運行界面程序。而我用QT寫得直接運行於LINUX上,開機可直接運行。這讓我更加的喜愛QT了,QT確實好東西,要是還在MFC上掙扎的朋友不煩了解下QT,希望你也能愛上她。

 

跑遠了,速速返回。

 

其實對於學習QT的朋友來說,有好多不知道如何向下位機發送16進制數據。對於用QT寫串口通信程序好多朋友作用的是第三方串口類qextserialport,之前我也上網大四搜過,基本沒什麼收穫。後來自己研究了下,感覺效果還不錯。這裏簡單介紹下我的方法,僅做參考:

    比如說你要向串口發0xaa,你可以這樣寫:
                                         QString str;
                                         str.append(QChar(0XAA);
                                         write(str.toAssic());
    接收就不用說了吧:收到的看16進制直接就是了,要是你想取出來 的話可以這樣:
                                         int data;
                                        QByteArray temp;
                                        temp=readAll();
                                        比如你要取出第一個16進制你可以樣:
                                        data=temp.at(0)&0x000000ff;
                                        這樣data就是你想要的16進制了

還有什麼不明白的可以Q我或是給我發郵件:

                                                           QQ:445159738

                                                           eMail:[email protected]

                                       
   由於該次使用的液晶是無字庫的,因此上位機得有自動提取字模的功能,對這個感興趣的朋友可以看我之前寫的一扁關於如何利用QT提取字模的文章,這裏就不做介紹了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章