版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)開發(fā)與應(yīng)用實訓實訓報告倒計時秒表1 整機設(shè)計1.1 設(shè)計要求使用 Qt 編程,在 ARM 實驗箱的液晶顯示屏幕上實現(xiàn) 99 秒倒計時,采用AT89S51 單片機模塊與 ARM9 實驗箱之間的串口通信,實現(xiàn)數(shù)碼管顯示、按鍵控制的同步,通過按鍵可以實現(xiàn)“運行/暫停”、“調(diào)整計時初值”的功能,當?shù)褂嫊r到 0 時,會有指示燈閃爍或亮。使用串口連接單片機模塊與 ARM9 實驗箱,單片機模塊要求:接收串口發(fā)來的命令進行輸出顯示,當按鍵按下后將按鍵信息通過串口發(fā)送出去;ARM9 實驗箱模塊要求:通過 Qt 編程實現(xiàn)相應(yīng)的計算和控制功能。即單片機要求承擔信息輸入、輸出的“中轉(zhuǎn)站”功能,不承擔主控任務(wù)
2、。1.1.1 設(shè)計任務(wù)采用 AT89S51 單片機與 ARM9 實驗箱之間的串口通行,通過 Qt 編程設(shè)計一個99 秒倒計時秒表。1.1.2 性能指標要求1、使用 Qt 編程,在 ARM 實驗箱的液晶屏幕上實現(xiàn) 99 秒倒計時;2、實驗箱通過串口與單片機模塊通信,實現(xiàn)數(shù)碼管顯示、按鍵控制的同步;3、通過按鍵實現(xiàn)“運行/暫停”、“調(diào)整計時初值”功能;4、倒計時為 0 時,指示燈閃爍;5、擴展多位數(shù)碼管,實現(xiàn)多位顯示(動態(tài)掃描);2 方案設(shè)計2.1 方案論證方案一:做個簡單的普通倒計時秒表。就是能讓它倒計時,還可以同按鍵控制它的開始與暫停,能夠?qū)崿F(xiàn)單片機與實驗箱之間的串口通信。方案二:做個多功能倒
3、計時秒表,通過按鍵可以實現(xiàn)“運行/暫?!薄ⅰ罢{(diào)整計時初值”功能,讓單片機承擔主控任務(wù),ARM 實驗箱上做的 UI 界面僅僅承擔同步顯示功能。方案三:做個多功能倒計時秒表,通過按鍵可以實現(xiàn)“運行/暫?!薄ⅰ罢{(diào)整計時初值”功能,單片機可以接收串口發(fā)來的命令進行輸出顯示,當按鍵按下后將按鍵信息通過串口發(fā)送出去,ARM 實驗箱可以實現(xiàn)與單片機的同步,同時可以進行互相控制,即通過 ARM 實驗箱可以控制單片機顯示和 ARM 實驗箱上的 UI 的同步顯示,繁反之通過單片機也可以控制實驗箱與單片機的同步操作功能。顯示采用多位數(shù)碼管來實現(xiàn)。經(jīng)過以上對方案的說明:方案一過于簡單,無法實現(xiàn)本次實訓的功能要求;方案
4、二叫方案一有改進,但是無法實現(xiàn)互相控制的功能要求,也就是失去了本次實訓的意思(本次實訓主要是 ARM 上的 Qt 編程);本次實訓采用了方案三。2.2 工作原理AT89S51 單片機支持串口通信,串口有 4 個模式??煞謩e用串并轉(zhuǎn)換、并串轉(zhuǎn)換、異步串行通信(2 中模式)。異步串行通信中,有 1+8+1 和 1+8+1+1 兩種幀格式,多機通信是特殊的通信方式。基本原理是兩組移位寄存器,將并行通信轉(zhuǎn)換成串行通信模式(發(fā)送部分),或反之(接收部分)??扇p工運行。速度通過移位脈沖決定,具體一般通過定時器1的自動壯哉模式產(chǎn)生的溢出脈沖給出。以上是物理層和數(shù)據(jù)鏈路層的單片機串口模式的約定,其他層需要軟
5、件人員根據(jù)需要自行把握。另外。電平需要根據(jù)實際通信環(huán)境做改變,如232、485或紅外等。SCS2410 UART單元提供2個獨立的異步串行通信口。皆可共組于中斷和DMA模式,每個單元UART單元包含一個16字節(jié)的FIF0,用于數(shù)據(jù)接收和發(fā)送,SCS2410 UART包括可編程波特率、紅外發(fā)送/接收、1/2個停止位、5位/5位/7位/8位數(shù)據(jù)寬度和奇偶校驗。虛擬機可以在串口模式下試下與SCS2410 UART的通信,SCS2410 顯示終端2實現(xiàn)程序的功能后,可以通過串口與與51單片機實現(xiàn)串口通信。通過對兩芯片的一些專用寄存器的應(yīng)用,就可以實現(xiàn)兩機之間的彼此通信。2.3總體框圖倒計時秒表設(shè)計總體
6、框圖2.4各功能電路實現(xiàn)原理及電路設(shè)計1)單片機最小系統(tǒng):保證單片機的正常工作,一般包括:單片機、晶振電路、復(fù)位電路。見左下圖。單片機最小系統(tǒng)下載口2)下載口:單片機的程序下載接口,主要接在單片機的P1口還有就是復(fù)位接口、電源和地(GND)。見右上圖3)報警指示電路:報警指示電路由二極管、三極管、蜂鳴器和兩電阻組成,倒計時到0的狀態(tài)下,禁止倒計時,二極管閃爍,發(fā)出報警聲。見右下圖報警指示電路按鍵電路4)按鍵電路:由四個按鍵、四個電阻組成分別實現(xiàn)秒表暫停/運行、加計時、減計時、復(fù)位功能。見左上圖。5)數(shù)碼管顯示電路:采用的是共陰數(shù)碼管,通過動態(tài)掃描實現(xiàn)秒表數(shù)字的顯示。見右下圖數(shù)碼管顯示電路路串口
7、連接電6)串口連接電路:采用的是MAX232電壓轉(zhuǎn)換芯片,通過電壓轉(zhuǎn)換芯片連接串口,實現(xiàn)單片機與arm間的串口通信。見左上圖3 軟件設(shè)計3.1 UI截面圖#include widget.h#include ui_widget.hWidget:Widget(QWidget *parent) :QWidget(parent),ui(new Ui:Widget)ui-setupUi(this);ui-lcdNumber-setSmallDecimalPoint(true);sec=43.21;ui-lcdNumber-display(sec);SEC = 60;ui-spinBox-setValue
8、(SEC);s1 = new QTimer;connect(s1,SIGNAL(timeout(),this,SLOT(display();connect(ui-pushButton_3,SIGNAL(clicked(),this,SLOT(run_stop();connect(ui-pushButton_4,SIGNAL(clicked(),this,SLOT(reset();connect(ui-pushButton,SIGNAL(clicked(),this,SLOT(add();connect(ui-pushButton_2,SIGNAL(clicked(),this,SLOT(sub
9、();s2 = new QTimer;s2-start(100);connect(s2,SIGNAL(timeout(),this,SLOT(readCom();myCom = newPosix_QextSerialPort(/dev/tts/0,QextSerialBase:Polling);myCom -open(QIODevice:ReadWrite);/以讀寫方式打開串口myCom-setBaudRate(BAUD9600);/波特率設(shè)置,我們設(shè)置為9600myCom-setDataBits(DATA_8);/數(shù)據(jù)位設(shè)置,我們設(shè)置為8位數(shù)據(jù)位myCom-setParity(PAR_NO
10、NE);/奇偶校驗設(shè)置,我們設(shè)置為無校驗myCom-setStopBits(STOP_1);/停止位設(shè)置,我們設(shè)置為1位停止位myCom-setFlowControl(FLOW_OFF);/數(shù)據(jù)流控制設(shè)置,我們設(shè)置為無數(shù)據(jù)流控制myCom-setTimeout(50);Widget:Widget()delete ui;void Widget:display()sec = sec - 0.01;if(seclcdNumber-display(0);update();send(sec,1,0);elsesend(sec,0,0);ui-lcdNumber-display(sec);void Wid
11、get:run_stop()QString str = ui-pushButton_3-text();if(str = Start)s1-start(10);ui-pushButton_3-setText(Stop);elses1-stop();ui-pushButton_3-setText(Start);void Widget:reset()SEC = ui-spinBox-value();ui-lcdNumber-display(sec = SEC);send(sec,0,1);update();void Widget:paintEvent(QPaintEvent *)QPainter p
12、ainter(this);painter.setPen(Qt:gray);if (sec readAll();switch(temp0)case 0 x01:run_stop();break;case 0 x02:add();break;case 0 x03:sub();break;case 0 x04:reset();break;default:break;void Widget:add()if(SEC = 99.0)return;elseui-spinBox-setValue(+SEC);void Widget:sub()if(SEC = 0.0)return;elseui-spinBox
13、-setValue(-SEC);void Widget:send(double p,int ledd,int spk)char str4;str0 = 0 xBB;str2 = (int)m + 1 * 128;str1 = (int)(m - (int)m)*100) + 1 * 128;str3 = 0;myCom-write(str);4 制作與調(diào)試過程首先在收集資料的基礎(chǔ)上畫好原理圖,自己編寫單片機程序,然后用proteus仿真軟件驗證功能的正確性。在仿真實現(xiàn)的情況下,做出硬件電路板,首先通過下載接口將硬件電路與電腦連接,這個下載接口不僅僅可以下載程序還可以給芯片供電,接好下載線后,測
14、試芯片是否可以正常工作,在芯片和各個模板電路能正常工作的情況下,將之前寫好的程序下載到硬件電路上。之后就開始用Qt編寫ARM的程序,花了兩天的時間終于編寫好了ARM的c+程序,在編譯通過之后。就開始在虛擬機中運行測試,之后到實驗室將虛擬機與ARM實驗箱通過串口連接起來。在ARM實驗箱的顯示屏上驗證倒計時秒表功能與實訓要求是否相符合,即將Qt寫好的程序先拷貝到虛擬機下運行,再通過Qt的嵌入式開發(fā)工具鏈編譯鏈接生成實驗箱可以執(zhí)行的文件,將這個可執(zhí)行文件拷貝到實驗箱與虛擬機共享目錄下運行,在實驗箱上觀察秒表倒計時顯示是否與題目要求099倒計時相符合,同時驗證報警指示功能是否與實訓要求相符合,接著就是
15、測試四個功能的作用是否是題目要求相匹配,我首先按下暫停/運行按鍵,觀察秒表到時候是否可以正常運行,再在暫停狀態(tài)下按下秒表復(fù)位,驗證秒表是否可以實現(xiàn)復(fù)位功能,在接著在此狀態(tài)下驗證加計時和減計時的功能是否可以實現(xiàn)。接著拔掉電腦的串口線,通過串口線連接單片機與實驗箱,驗證各個按鍵功能和顯示顯示是否可以同步,同時是否可以互相控制。我在硬件電路完美實現(xiàn)的情況下,按照的上面的調(diào)試過程去做,結(jié)果是沒有遇到什么不正常的問題,我的硬件做出來就可以正常工作了。4 電路測試硬件電路完成之后驗證基本功能,即對數(shù)碼管顯示功能的測試,通過編寫一個簡單的小程序給數(shù)碼管相應(yīng)的 I/O 賦值,觀察數(shù)碼管是否可以正常;接著就是驗
16、證按鍵是否可以正常使用,在驗證數(shù)碼管小程序的基礎(chǔ)之上加入按鍵功能,對按鍵I/O 進行修改這樣完成了對四個按鍵的測試;蜂鳴器和指示燈的測試就是對相應(yīng)I/O 賦值觀蜂鳴器是否可以發(fā)出聲音和指示燈是否可以正常顯示。串口的測試就是編寫單片機和 ARM 小程序,進行簡單的通信觀察彼此是否可以收發(fā)字符串。正確測試電路這些基本功能之后就可以進行試訓程序的編寫了。4.1 指標測試1、099 秒倒計時的正常顯示;2、報警聲音和指示燈在倒計時結(jié)束時能按規(guī)定運行;3、四個按鍵分別可以實現(xiàn)秒表的暫停/運行,復(fù)位,加計時,減計時;4、可以擴展其他功能(數(shù)碼管的多位顯示,報警功能)4.2 誤差分析實訓過程中對于電路測試中
17、出現(xiàn)了一些誤差,首先出現(xiàn)的就是數(shù)碼管的顯示,通過對數(shù)碼管引腳圖的分析,最后成功解決;還有就是功能按鍵不起作用,通過對按鍵引腳電平的從測試(在按下前后狀態(tài)下),最后也成功解決此誤差;還有就是程序誤差,實驗箱與單片機之間不能實現(xiàn)同步控制,最后通過對程序的修改也成功解決。附 錄1、 電路原理圖2、 PCB圖3、 UI截面圖4、 片機程序#include #define uchar unsigned char#define uint unsigned intunsigned char cnt;/ 區(qū)分數(shù)碼管顯示位/ 按鍵鎖定unsigned char KEY = 0;unsigned char spe
18、ak = 1;unsigned char led = 0;/蜂鳴器 不響/指示燈 不亮int mg=43,ms=21;/數(shù)碼管整數(shù)位(099)小數(shù)位(099) 初始化顯示數(shù)字unsigned chartab=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /數(shù)碼管0-9斷碼表void uart_isr() interrupt 4I/O中斷/中斷方式4,串行口/*接收模塊0 xBB 表示接下來要接收兩個數(shù)碼管數(shù)據(jù)單片機串行口數(shù)據(jù)緩沖器SBUF*/if(RI)/接收中斷標志位RIRI = 0;if(SBUF = 0 xBB)
19、while(!RI);RI=0;ms=SBUF;ms = SBUF & 0 x7f;led = SBUF/128;while(!RI);RI=0;mg=SBUF;mg = SBUF & 0 x7f;speak = !(SBUF/128);void Com_Init(void)/計數(shù)器初始化TMOD = 0 x20;/T1計時器PCON = 0 x00;/波特率不倍增,在方式1、2、3中0表示不倍增,1表示倍SCON = 0 x50;/ 串行口控制器配置增TH1 = 0 xFD; /T1高8位TL1 = 0 xFD;/T1地8位TR1 = 1;ES=1;void Timer_Init(void)
20、/配置定時器TMOD|=0 x01;TH0=0 xFC;TL0=0 x18;TR0=1;EA=1;ET0=1;void Show_Init() /按鍵、蜂鳴器初始狀態(tài)P2_0=1;P2_1=1;P2_2=1;P2_3=1;P1_2=1;void delay(void)/延時unsigned char a,b;for(b=249;b0;b-)for(a=17;a0;a-);void timer() interrupt 1 using 0 /中斷方式1TH0=0 xFC;TL0=0 x18;switch(cnt%4)/數(shù)碼管動態(tài)掃描case 0:P2_4=0;P2_5=1;P2_6=1;P2_7=
21、1;P0=tabmg/10;break;case 1:P2_4=1;P2_5=0;P2_6=1;P2_7=1;P0=tabmg%10+128;break;case 2:P2_4=1;P2_5=1;P2_6=0;P2_7=1;P0=tabms/10;break;case 3:P2_4=1;P2_5=1;P2_6=1;P2_7=0;P0=tabms%10;break;P3_7 = speak;P1_2 = led;cnt+;/定義蜂鳴器接口/定義led指示燈接口void send(unsigned char c)SBUF = c;while(!TI);TI = 0;/發(fā)送中斷標志位TIvoid m
22、ain()Com_Init();Timer_Init();Show_Init();while(1)/*發(fā)送模塊暫停/啟動:啟動停止按鍵加:整數(shù)位上限加一減:整數(shù)位上限減一復(fù)位:清除當前數(shù)字 恢復(fù)*/if(!KEY)if(!P2_0) /暫停/啟動delay();if(!P2_0)send(0 x01);KEY=1;if(!P2_1) /加計數(shù)按鍵delay();if(!P2_1)send(0 x02);KEY=1;if(!P2_2)/減計數(shù)按鍵delay();if(!P2_2)send(0 x03);KEY=1;if(!P2_3) /復(fù)位按鍵delay();if(!P2_3)send(0 x0
23、4);KEY=1;if(P2_0 & P2_1 & P2_2 & P2_3) /鎖定按鍵 使其只能按一次發(fā)一次delay();if(P2_0 & P2_1 & P2_2 & P2_3)KEY=0;5、 Qt的C+程序#include widget.h#include ui_widget.hWidget:Widget(QWidget *parent) :QWidget(parent),ui(new Ui:Widget)ui-setupUi(this);ui-lcdNumber-setSmallDecimalPoint(true);sec=43.21;ui-lcdNumber-display(se
24、c);SEC = 60;ui-spinBox-setValue(SEC);s1 = new QTimer;connect(s1,SIGNAL(timeout(),this,SLOT(display();connect(ui-pushButton_3,SIGNAL(clicked(),this,SLOT(run_stop();connect(ui-pushButton_4,SIGNAL(clicked(),this,SLOT(reset();connect(ui-pushButton,SIGNAL(clicked(),this,SLOT(add();connect(ui-pushButton_2
25、,SIGNAL(clicked(),this,SLOT(sub();s2 = new QTimer;s2-start(100);connect(s2,SIGNAL(timeout(),this,SLOT(readCom();myCom = newPosix_QextSerialPort(/dev/tts/0,QextSerialBase:Polling);myCom -open(QIODevice:ReadWrite);/以讀寫方式打開串口myCom-setBaudRate(BAUD9600);/波特率設(shè)置,我們設(shè)置為9600myCom-setDataBits(DATA_8);/數(shù)據(jù)位設(shè)置,我們設(shè)置為8位數(shù)據(jù)位myCom-setParity(PAR_NONE);/奇偶校驗設(shè)置,我們設(shè)置為無校驗myCom-setStopBits(STOP_1);/停止位設(shè)置,我們設(shè)置為1位停止位myCom-setFlowControl(FLOW_OFF);/數(shù)據(jù)流控制設(shè)置,我們設(shè)置為無數(shù)據(jù)流控制myCom-setTimeout(50);Widget:Widget()delete ui;void Widget:display()sec = sec - 0.01;if(seclcdNumbe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度汽車維修配件進出口貿(mào)易合同8篇
- 二零二四年度煙葉運輸應(yīng)急響應(yīng)及救援合同3篇
- 二零二四年度沿街商鋪租賃合同含租賃面積及使用功能描述范本2篇
- 2025年度個人投資項目管理傭金協(xié)議范本3篇
- 2025年度大棚溫室能源優(yōu)化利用合同3篇
- 二零二五版藝術(shù)品拍賣定金及借款合同3篇
- 2025年度車位使用權(quán)轉(zhuǎn)讓及維護保養(yǎng)服務(wù)合同4篇
- 二零二五年度城市綜合體地下車位購置協(xié)議4篇
- 2025年度生態(tài)農(nóng)業(yè)園區(qū)場地使用權(quán)出讓合同正規(guī)范本4篇
- 二零二五年度城市綜合體項目場地平整與地下車庫建設(shè)合同3篇
- 獅子王影視鑒賞
- 一年級數(shù)學加減法口算題每日一練(25套打印版)
- 2024年甘肅省武威市、嘉峪關(guān)市、臨夏州中考英語真題
- DL-T573-2021電力變壓器檢修導(dǎo)則
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學原理考試題庫附答案
- 【可行性報告】2023年電動自行車相關(guān)項目可行性研究報告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測與維修專業(yè)課程體系
評論
0/150
提交評論