<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于單片機的無(wú)線(xiàn)電子點(diǎn)菜系統硬件方案設計

基于單片機的無(wú)線(xiàn)電子點(diǎn)菜系統硬件方案設計

作者: 時(shí)間:2012-09-14 來(lái)源:網(wǎng)絡(luò ) 收藏

4.2.2程序設計原理
第一步:初始化串行口。調用SetCommPort()函數,選擇使用的端口好,然后設置波特率發(fā)送接收的處理方式,以及數據的傳輸方式,最后將串口打開(kāi)。
第二步:發(fā)送數據。將要發(fā)送的字符串變成特定的類(lèi)型后,調用函數SetOutput(),將數據發(fā)送到發(fā)送緩沖區
第三步:接受數據。將接收緩沖區中的數據通過(guò)GetInput()函數讀出,并將它轉換為Cstring類(lèi)型,顯示在界面上。
程序的各個(gè)主要部分和一些流程圖:
(1)登陸界面后,程序首先將接收緩沖區和發(fā)送緩沖區清空
程序如下:
m_str_send=” “;
m_str_recv=” “;
UpdateData(FALSE);
(2)然后進(jìn)行串行口的初始化,也即是設置MSComm控件的各種屬性。首先要進(jìn)行端口的選擇,由于所用到的計算機只有兩個(gè)串行口,因此本程序只給了兩個(gè)選擇,具體的程序代碼如下:
void CMyDlg::On_Com1()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(1);
m_mscomm.SetSettings(”9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
void CMyDlg::On_Com2()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(2);
m_mscomm.SetSettings(”9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
1)CommPort:分別選1和2。
2) Setting設置或返回串行端口的波特率:9600、無(wú)奇偶校驗位、數據位數為8、1位停止位。
3) InBufferSize:設置接收緩沖區為1024字節。
4) RThreshold:設置當接收緩沖區內字節個(gè)數為1時(shí),觸發(fā)MSCOMM的OnComm事件,然后由計算機將接收緩沖的數據讀出,并將接收緩沖區清空。
5) InputLen:值為0,設置INPUT讀取整個(gè)緩沖區的內容。
6) OutBufferSize:設置發(fā)送緩沖區為512字節。
(3)發(fā)送數據的源程序代碼
void CMyDlg::OnSend()
{
if(!m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(TRUE);
UpdateData(TRUE);
m_mscomm.SetOutput(COleVariant(m_str_send)); //發(fā)送數據
}
將文本框內的字符串送到變量m_str_send中,然后將字符轉化為ColeVariant類(lèi)型的數據,再通過(guò)SetOutput函數將數據發(fā)送到發(fā)送緩沖區中。
(4)接收數據的源程序代碼
void CMyDlg::OnComm()
{
VARIANT variant_tmp;
COleSafeArray safearray_tmp;
LONG len,i;
BYTE buf[2048];
CString str_tmp;
if(m_mscomm.GetCommEvent()==2)
{
variant_tmp=m_mscomm.GetInput();
safearray_tmp=variant_tmp;
len=safearray_tmp.GetOneDimSize();
for(i=0;ilen;i++)
safearray_tmp.GetElement(i,buf+i);
for(i=0;ilen;i++)
{
BYTE ch=*(char*)(buf+i);
str_tmp.Format(”%c”,ch);
m_str_recv+=str_tmp;
}
}
UpdateData(FALSE);
}
當m_mscomm.GetCommEvent()==2時(shí)候,數據到來(lái),觸發(fā)OnComm事件,調用該函數。首先通過(guò)m_mscomm.GetInput()將接收緩沖區內的數據讀到變量variant_tmp中,再將variant_tmp賦予safearray_tmp來(lái)實(shí)現數據類(lèi)型轉化為ColeSafeArray。通過(guò)safearray_tmp.GetOneDimSize()求出接收到的字符的總長(cháng)度,再將每個(gè)ColeSafeArray變量轉化為Byte類(lèi)型的變量,最后轉化為字符類(lèi)型,并將它顯示在文本框內。
void CMyDlg::OnComm() 的流程圖:

圖4.3 void CMyDlg::OnComm() 的流程圖

(5)清空功能函數源代碼
void CMyDlg::OnClr()
{
m_str_send=” “;
m_str_recv=” “;
UpdateData(FALSE);
}
總的程序流程圖如圖4.4所示
圖4.5是PC機通過(guò)端口1向發(fā)送數據時(shí)候的圖型界面。進(jìn)入界面后,首先要進(jìn)行根據連接的串行口選擇要初始化的端口,然后使用鍵盤(pán)在發(fā)送緩沖區內輸入一系列的字符。等開(kāi)發(fā)板上電后,單擊發(fā)送按鍵將數據發(fā)送出去。
圖4.6是PC機通過(guò)串口接收發(fā)送過(guò)來(lái)的數據時(shí)候的圖形界面。在緩沖區接收的數據為二進(jìn)制形式,程序內已經(jīng)將這些二進(jìn)制轉化為字符串在界面上顯示。
圖4.7是串行口調試工具初始運行時(shí)候的圖形界面。
事件驅動(dòng)方式時(shí),由計算機直接管理,字節之間不可控,而且單片機串行口和PC機串行口速率差別較大,接收程序一定要精心合理的設計,才能使傳輸穩定可靠,否則很容易出現意想不到的問(wèn)題。在調試過(guò)程中,如果不小心將串行口調試工具的波特率和開(kāi)發(fā)板串行口的波特率設置為不同,就會(huì )出現錯誤。程序中已經(jīng)將串行口的波特率設置為9600bps,這樣可以避免錯誤。
圖4.5通過(guò)端口1進(jìn)行發(fā)送時(shí)候的圖型界面

圖4.6 通過(guò)串口接收時(shí)候的圖形界面
圖4.7 串行口調試工具的運行界面
第五章 總結與展望
5.1 全文總結

通過(guò)這次畢業(yè)設計,我學(xué)到了不少課本上沒(méi)有的知識,也鍛煉了自己的動(dòng)手能力,將以前學(xué)過(guò)的零散的知識串到一起。
首先在畢業(yè)設計剛開(kāi)始的調研階段,我學(xué)會(huì )了怎么通過(guò)各種方式查詢(xún)相關(guān)的資料。通過(guò)對這些資料的學(xué)習,我大致了解了通信的發(fā)展現狀以及未來(lái)的發(fā)展趨勢,認識到目前通信方面的各種各樣的協(xié)議,以及它們之間的競爭。了解了通信方面的先進(jìn)技術(shù),這些都為我未來(lái)的學(xué)習指明了方向。
我畢業(yè)設計主要涉及和軟件兩個(gè)方面的內容,通過(guò)這些我的和軟件開(kāi)發(fā)能力都獲得了提高。首先在方面,基本了解了產(chǎn)品的開(kāi)發(fā)流程和所要做的工作?;菊莆樟薖rotel 99 SE設計原理圖和簡(jiǎn)單的PCB圖的方法,并設計了一個(gè)單片機最小。通過(guò)開(kāi)發(fā)板的設計和硬件搭建的過(guò)程,使我對51系列單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路的引腳和連接方法,如LED數碼管,鍵盤(pán)等。
在軟件方面,通過(guò)串行口調試工具的開(kāi)發(fā),我基本掌握了Visual C++ 6.0的使用方法,加深了對類(lèi)封裝的理解。通過(guò)開(kāi)發(fā)板驅動(dòng)程序的開(kāi)發(fā),使我熟練掌握了Keil uVision2,熟悉了51系列單片機內部的寄存器和編程規則,以及如何控制外圍電路。
當然,由于單片機功能的局限性,當面對很復雜的時(shí)像無(wú)線(xiàn),單片機就不太合適。這是因為單片機的引腳過(guò)少,能夠使用操作系統過(guò)于簡(jiǎn)單,不能進(jìn)行復雜的工作調度,也不能驅動(dòng)復雜的外圍電路,因此使用單片機完全實(shí)現系統的要求比較困難。
近幾年來(lái),處理器已經(jīng)發(fā)展到32位機,尤其是以ARM(Advanced RISC Machines)為內核的32位處理器受到越來(lái)越多嵌入式開(kāi)發(fā)人員的青睞。ARM處理器支持復雜的嵌入式操作系統,例如Win CE,UClinux等??梢赃M(jìn)行復雜的功能調度,而且能夠驅動(dòng)比較復雜的外圍電路例如觸摸屏等。這樣使用ARM處理器和嵌入式操作系統,配合嵌入式移動(dòng)數據庫技術(shù),更能完成系統的要求。所以,畢業(yè)設計也給我將來(lái)的學(xué)習指明了一個(gè)方向。
單就本論文而言,主要完成了以下工作:
1.在ZigBee協(xié)議的基礎上,以51系列單片機為處理器,配合一定的外圍電路構建了硬件開(kāi)發(fā)平臺。
2.用C51語(yǔ)言為硬件部分編寫(xiě)驅動(dòng)程序,并用Visual C++6.0開(kāi)發(fā)了串口調試工具。

5.2 研究展望

目前,無(wú)線(xiàn)通信的各種技術(shù)呈現百花齊放的局面。但是隨著(zhù)經(jīng)濟的發(fā)展,人民需求的提高,無(wú)線(xiàn)通信技術(shù)依然有很大的發(fā)展空間。在以下方面仍然有很長(cháng)的路要走。
1隨著(zhù)IP(Internet Protocol,網(wǎng)際協(xié)議)技術(shù)的發(fā)展,無(wú)線(xiàn)通信網(wǎng)和IP網(wǎng)有融合的趨勢。尤其是多媒體信息需求的增加,多媒體信息對實(shí)時(shí)性要求不高的特點(diǎn),使得利用無(wú)線(xiàn)通信網(wǎng)傳輸多媒體信息成為一大熱門(mén)。
2隨著(zhù)人民生活水平的提高,生活方式的轉變,無(wú)線(xiàn)通信技術(shù)必然向移動(dòng)化和便攜化方向發(fā)展。
3由于無(wú)線(xiàn)頻譜資源有限和無(wú)線(xiàn)通信傳輸信道的特殊性,使得如何提高頻譜資源的利用率以及提高抗干擾能力成為未來(lái)很熱門(mén)的研究方向。
4 現代微技術(shù)發(fā)展迅猛,摩爾定理仍然有效,集成電路技術(shù)已經(jīng)發(fā)展到SOC,32位的ARM處理器已經(jīng)得到了廣泛的應用。因此在未來(lái)越來(lái)越復雜的嵌入式系統開(kāi)發(fā)中,32位處理器和嵌入式操作系統將得到更廣泛的應用。

51單片機相關(guān)文章:51單片機教程


單片機相關(guān)文章:單片機教程


c++相關(guān)文章:c++教程


單片機相關(guān)文章:單片機視頻教程


單片機相關(guān)文章:單片機工作原理


波段開(kāi)關(guān)相關(guān)文章:波段開(kāi)關(guān)原理


藍牙技術(shù)相關(guān)文章:藍牙技術(shù)原理
矢量控制相關(guān)文章:矢量控制原理

上一頁(yè) 1 2 3 4 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>