版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)開發(fā)與應(yīng)用實(shí)訓(xùn)實(shí)訓(xùn)報(bào)告倒計(jì)時(shí)秒表1 整機(jī)設(shè)計(jì)1.1 設(shè)計(jì)要求使用 Qt 編程,在 ARM 實(shí)驗(yàn)箱的液晶顯示屏幕上實(shí)現(xiàn) 99 秒倒計(jì)時(shí),采用AT89S51 單片機(jī)模塊與 ARM9 實(shí)驗(yàn)箱之間的串口通信,實(shí)現(xiàn)數(shù)碼管顯示、按鍵控制的同步,通過按鍵可以實(shí)現(xiàn)“運(yùn)行/暫?!?、“調(diào)整計(jì)時(shí)初值”的功能,當(dāng)?shù)褂?jì)時(shí)到 0 時(shí),會有指示燈閃爍或亮。使用串口連接單片機(jī)模塊與 ARM9 實(shí)驗(yàn)箱,單片機(jī)模塊要求:接收串口發(fā)來的命令進(jìn)行輸出顯示,當(dāng)按鍵按下后將按鍵信息通過串口發(fā)送出去;ARM9 實(shí)驗(yàn)箱模塊要求:通過 Qt 編程實(shí)現(xiàn)相應(yīng)的計(jì)算和控制功能。即單片機(jī)要求承擔(dān)信息輸入、輸出的“中轉(zhuǎn)站”功能,不承擔(dān)主控任務(wù)
2、。1.1.1 設(shè)計(jì)任務(wù)采用 AT89S51 單片機(jī)與 ARM9 實(shí)驗(yàn)箱之間的串口通行,通過 Qt 編程設(shè)計(jì)一個(gè)99 秒倒計(jì)時(shí)秒表。1.1.2 性能指標(biāo)要求1、使用 Qt 編程,在 ARM 實(shí)驗(yàn)箱的液晶屏幕上實(shí)現(xiàn) 99 秒倒計(jì)時(shí);2、實(shí)驗(yàn)箱通過串口與單片機(jī)模塊通信,實(shí)現(xiàn)數(shù)碼管顯示、按鍵控制的同步;3、通過按鍵實(shí)現(xiàn)“運(yùn)行/暫?!薄ⅰ罢{(diào)整計(jì)時(shí)初值”功能;4、倒計(jì)時(shí)為 0 時(shí),指示燈閃爍;5、擴(kuò)展多位數(shù)碼管,實(shí)現(xiàn)多位顯示(動態(tài)掃描);2 方案設(shè)計(jì)2.1 方案論證方案一:做個(gè)簡單的普通倒計(jì)時(shí)秒表。就是能讓它倒計(jì)時(shí),還可以同按鍵控制它的開始與暫停,能夠?qū)崿F(xiàn)單片機(jī)與實(shí)驗(yàn)箱之間的串口通信。方案二:做個(gè)多功能倒
3、計(jì)時(shí)秒表,通過按鍵可以實(shí)現(xiàn)“運(yùn)行/暫?!薄ⅰ罢{(diào)整計(jì)時(shí)初值”功能,讓單片機(jī)承擔(dān)主控任務(wù),ARM 實(shí)驗(yàn)箱上做的 UI 界面僅僅承擔(dān)同步顯示功能。方案三:做個(gè)多功能倒計(jì)時(shí)秒表,通過按鍵可以實(shí)現(xiàn)“運(yùn)行/暫停”、“調(diào)整計(jì)時(shí)初值”功能,單片機(jī)可以接收串口發(fā)來的命令進(jìn)行輸出顯示,當(dāng)按鍵按下后將按鍵信息通過串口發(fā)送出去,ARM 實(shí)驗(yàn)箱可以實(shí)現(xiàn)與單片機(jī)的同步,同時(shí)可以進(jìn)行互相控制,即通過 ARM 實(shí)驗(yàn)箱可以控制單片機(jī)顯示和 ARM 實(shí)驗(yàn)箱上的 UI 的同步顯示,繁反之通過單片機(jī)也可以控制實(shí)驗(yàn)箱與單片機(jī)的同步操作功能。顯示采用多位數(shù)碼管來實(shí)現(xiàn)。經(jīng)過以上對方案的說明:方案一過于簡單,無法實(shí)現(xiàn)本次實(shí)訓(xùn)的功能要求;方案
4、二叫方案一有改進(jìn),但是無法實(shí)現(xiàn)互相控制的功能要求,也就是失去了本次實(shí)訓(xùn)的意思(本次實(shí)訓(xùn)主要是 ARM 上的 Qt 編程);本次實(shí)訓(xùn)采用了方案三。2.2 工作原理AT89S51 單片機(jī)支持串口通信,串口有 4 個(gè)模式??煞謩e用串并轉(zhuǎn)換、并串轉(zhuǎn)換、異步串行通信(2 中模式)。異步串行通信中,有 1+8+1 和 1+8+1+1 兩種幀格式,多機(jī)通信是特殊的通信方式?;驹硎莾山M移位寄存器,將并行通信轉(zhuǎn)換成串行通信模式(發(fā)送部分),或反之(接收部分)??扇p工運(yùn)行。速度通過移位脈沖決定,具體一般通過定時(shí)器1的自動壯哉模式產(chǎn)生的溢出脈沖給出。以上是物理層和數(shù)據(jù)鏈路層的單片機(jī)串口模式的約定,其他層需要軟
5、件人員根據(jù)需要自行把握。另外。電平需要根據(jù)實(shí)際通信環(huán)境做改變,如232、485或紅外等。SCS2410 UART單元提供2個(gè)獨(dú)立的異步串行通信口。皆可共組于中斷和DMA模式,每個(gè)單元UART單元包含一個(gè)16字節(jié)的FIF0,用于數(shù)據(jù)接收和發(fā)送,SCS2410 UART包括可編程波特率、紅外發(fā)送/接收、1/2個(gè)停止位、5位/5位/7位/8位數(shù)據(jù)寬度和奇偶校驗(yàn)。虛擬機(jī)可以在串口模式下試下與SCS2410 UART的通信,SCS2410 顯示終端2實(shí)現(xiàn)程序的功能后,可以通過串口與與51單片機(jī)實(shí)現(xiàn)串口通信。通過對兩芯片的一些專用寄存器的應(yīng)用,就可以實(shí)現(xiàn)兩機(jī)之間的彼此通信。2.3總體框圖倒計(jì)時(shí)秒表設(shè)計(jì)總體
6、框圖2.4各功能電路實(shí)現(xiàn)原理及電路設(shè)計(jì)1)單片機(jī)最小系統(tǒng):保證單片機(jī)的正常工作,一般包括:單片機(jī)、晶振電路、復(fù)位電路。見左下圖。單片機(jī)最小系統(tǒng)下載口2)下載口:單片機(jī)的程序下載接口,主要接在單片機(jī)的P1口還有就是復(fù)位接口、電源和地(GND)。見右上圖3)報(bào)警指示電路:報(bào)警指示電路由二極管、三極管、蜂鳴器和兩電阻組成,倒計(jì)時(shí)到0的狀態(tài)下,禁止倒計(jì)時(shí),二極管閃爍,發(fā)出報(bào)警聲。見右下圖報(bào)警指示電路按鍵電路4)按鍵電路:由四個(gè)按鍵、四個(gè)電阻組成分別實(shí)現(xiàn)秒表暫停/運(yùn)行、加計(jì)時(shí)、減計(jì)時(shí)、復(fù)位功能。見左上圖。5)數(shù)碼管顯示電路:采用的是共陰數(shù)碼管,通過動態(tài)掃描實(shí)現(xiàn)秒表數(shù)字的顯示。見右下圖數(shù)碼管顯示電路路串口
7、連接電6)串口連接電路:采用的是MAX232電壓轉(zhuǎn)換芯片,通過電壓轉(zhuǎn)換芯片連接串口,實(shí)現(xiàn)單片機(jī)與arm間的串口通信。見左上圖3 軟件設(shè)計(jì)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);/奇偶校驗(yàn)設(shè)置,我們設(shè)置為無校驗(yàn)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ǔ)上畫好原理圖,自己編寫單片機(jī)程序,然后用proteus仿真軟件驗(yàn)證功能的正確性。在仿真實(shí)現(xiàn)的情況下,做出硬件電路板,首先通過下載接口將硬件電路與電腦連接,這個(gè)下載接口不僅僅可以下載程序還可以給芯片供電,接好下載線后,測
14、試芯片是否可以正常工作,在芯片和各個(gè)模板電路能正常工作的情況下,將之前寫好的程序下載到硬件電路上。之后就開始用Qt編寫ARM的程序,花了兩天的時(shí)間終于編寫好了ARM的c+程序,在編譯通過之后。就開始在虛擬機(jī)中運(yùn)行測試,之后到實(shí)驗(yàn)室將虛擬機(jī)與ARM實(shí)驗(yàn)箱通過串口連接起來。在ARM實(shí)驗(yàn)箱的顯示屏上驗(yàn)證倒計(jì)時(shí)秒表功能與實(shí)訓(xùn)要求是否相符合,即將Qt寫好的程序先拷貝到虛擬機(jī)下運(yùn)行,再通過Qt的嵌入式開發(fā)工具鏈編譯鏈接生成實(shí)驗(yàn)箱可以執(zhí)行的文件,將這個(gè)可執(zhí)行文件拷貝到實(shí)驗(yàn)箱與虛擬機(jī)共享目錄下運(yùn)行,在實(shí)驗(yàn)箱上觀察秒表倒計(jì)時(shí)顯示是否與題目要求099倒計(jì)時(shí)相符合,同時(shí)驗(yàn)證報(bào)警指示功能是否與實(shí)訓(xùn)要求相符合,接著就是
15、測試四個(gè)功能的作用是否是題目要求相匹配,我首先按下暫停/運(yùn)行按鍵,觀察秒表到時(shí)候是否可以正常運(yùn)行,再在暫停狀態(tài)下按下秒表復(fù)位,驗(yàn)證秒表是否可以實(shí)現(xiàn)復(fù)位功能,在接著在此狀態(tài)下驗(yàn)證加計(jì)時(shí)和減計(jì)時(shí)的功能是否可以實(shí)現(xiàn)。接著拔掉電腦的串口線,通過串口線連接單片機(jī)與實(shí)驗(yàn)箱,驗(yàn)證各個(gè)按鍵功能和顯示顯示是否可以同步,同時(shí)是否可以互相控制。我在硬件電路完美實(shí)現(xiàn)的情況下,按照的上面的調(diào)試過程去做,結(jié)果是沒有遇到什么不正常的問題,我的硬件做出來就可以正常工作了。4 電路測試硬件電路完成之后驗(yàn)證基本功能,即對數(shù)碼管顯示功能的測試,通過編寫一個(gè)簡單的小程序給數(shù)碼管相應(yīng)的 I/O 賦值,觀察數(shù)碼管是否可以正常;接著就是驗(yàn)
16、證按鍵是否可以正常使用,在驗(yàn)證數(shù)碼管小程序的基礎(chǔ)之上加入按鍵功能,對按鍵I/O 進(jìn)行修改這樣完成了對四個(gè)按鍵的測試;蜂鳴器和指示燈的測試就是對相應(yīng)I/O 賦值觀蜂鳴器是否可以發(fā)出聲音和指示燈是否可以正常顯示。串口的測試就是編寫單片機(jī)和 ARM 小程序,進(jìn)行簡單的通信觀察彼此是否可以收發(fā)字符串。正確測試電路這些基本功能之后就可以進(jìn)行試訓(xùn)程序的編寫了。4.1 指標(biāo)測試1、099 秒倒計(jì)時(shí)的正常顯示;2、報(bào)警聲音和指示燈在倒計(jì)時(shí)結(jié)束時(shí)能按規(guī)定運(yùn)行;3、四個(gè)按鍵分別可以實(shí)現(xiàn)秒表的暫停/運(yùn)行,復(fù)位,加計(jì)時(shí),減計(jì)時(shí);4、可以擴(kuò)展其他功能(數(shù)碼管的多位顯示,報(bào)警功能)4.2 誤差分析實(shí)訓(xùn)過程中對于電路測試中
17、出現(xiàn)了一些誤差,首先出現(xiàn)的就是數(shù)碼管的顯示,通過對數(shù)碼管引腳圖的分析,最后成功解決;還有就是功能按鍵不起作用,通過對按鍵引腳電平的從測試(在按下前后狀態(tài)下),最后也成功解決此誤差;還有就是程序誤差,實(shí)驗(yàn)箱與單片機(jī)之間不能實(shí)現(xiàn)同步控制,最后通過對程序的修改也成功解決。附 錄1、 電路原理圖2、 PCB圖3、 UI截面圖4、 片機(jī)程序#include #define uchar unsigned char#define uint unsigned intunsigned char cnt;/ 區(qū)分?jǐn)?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 表示接下來要接收兩個(gè)數(shù)碼管數(shù)據(jù)單片機(jī)串行口數(shù)據(jù)緩沖器SBUF*/if(RI)/接收中斷標(biāo)志位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)/計(jì)數(shù)器初始化TMOD = 0 x20;/T1計(jì)時(shí)器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、/配置定時(shí)器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)/延時(shí)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ā)送中斷標(biāo)志位TIvoid m
22、ain()Com_Init();Timer_Init();Show_Init();while(1)/*發(fā)送模塊暫停/啟動:啟動停止按鍵加:整數(shù)位上限加一減:整數(shù)位上限減一復(fù)位:清除當(dāng)前數(shù)字 恢復(fù)*/if(!KEY)if(!P2_0) /暫停/啟動delay();if(!P2_0)send(0 x01);KEY=1;if(!P2_1) /加計(jì)數(shù)按鍵delay();if(!P2_1)send(0 x02);KEY=1;if(!P2_2)/減計(jì)數(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);/奇偶校驗(yàn)設(shè)置,我們設(shè)置為無校驗(yàn)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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《溝通中外文明的“絲綢之路”》聽課評課記錄3(新部編人教版七年級上冊歷史)
- 人教版部編歷史九年級下冊《第5課 第二次工業(yè)革命》聽課評課記錄
- 湘教版數(shù)學(xué)九年級上冊3.4.1《相似三角的判定》(第1課時(shí))聽評課記錄
- 人教部編版九年級歷史下冊聽課評課記錄:第4課《日本明治維新》
- 北師大版歷史八年級上冊第2課《第二次鴉片戰(zhàn)爭》聽課評課記錄
- 蘇教版四年級數(shù)學(xué)上冊期末復(fù)習(xí)口算練習(xí)題一
- 蘇教版二年級數(shù)學(xué)下冊《兩位數(shù)減兩位數(shù)的口算》教學(xué)設(shè)計(jì)
- 上市或擬上市公司獨(dú)立董事聘任合同范本
- 孵化器委托運(yùn)營協(xié)議書范本
- 企業(yè)承包合同范本
- 2023年菏澤醫(yī)學(xué)??茖W(xué)校單招綜合素質(zhì)模擬試題及答案解析
- 鋁合金門窗設(shè)計(jì)說明
- 常見食物的嘌呤含量表匯總
- 小學(xué)數(shù)學(xué)-三角形面積計(jì)算公式的推導(dǎo)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 人教版數(shù)學(xué)八年級下冊同步練習(xí)(含答案)
- SB/T 10752-2012馬鈴薯雪花全粉
- 2023年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招(英語)試題庫含答案解析
- 秦暉社會主義思想史課件
- 積累運(yùn)用表示動作的詞語課件
- 機(jī)動車登記證書英文證書模板
- 質(zhì)量管理體系基礎(chǔ)知識培訓(xùn)-2016
評論
0/150
提交評論