桂林电子科技大学信息科技学院嵌入式实训下_第1页
桂林电子科技大学信息科技学院嵌入式实训下_第2页
桂林电子科技大学信息科技学院嵌入式实训下_第3页
桂林电子科技大学信息科技学院嵌入式实训下_第4页
桂林电子科技大学信息科技学院嵌入式实训下_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统开发与应用实训实训报告倒计时秒表1 整机设计1.1 设计要求使用 Qt 编程,在 ARM 实验箱的液晶显示屏幕上实现 99 秒倒计时,采用AT89S51 单片机模块与 ARM9 实验箱之间的串口通信,实现数码管显示、按键控制的同步,通过按键可以实现“运行/暂停”、“调整计时初值”的功能,当倒计时到 0 时,会有指示灯闪烁或亮。使用串口连接单片机模块与 ARM9 实验箱,单片机模块要求:接收串口发来的命令进行输出显示,当按键按下后将按键信息通过串口发送出去;ARM9 实验箱模块要求:通过 Qt 编程实现相应的计算和控制功能。即单片机要求承担信息输入、输出的“中转站”功能,不承担主控任务

2、。1.1.1 设计任务采用 AT89S51 单片机与 ARM9 实验箱之间的串口通行,通过 Qt 编程设计一个99 秒倒计时秒表。1.1.2 性能指标要求1、使用 Qt 编程,在 ARM 实验箱的液晶屏幕上实现 99 秒倒计时;2、实验箱通过串口与单片机模块通信,实现数码管显示、按键控制的同步;3、通过按键实现“运行/暂停”、“调整计时初值”功能;4、倒计时为 0 时,指示灯闪烁;5、扩展多位数码管,实现多位显示(动态扫描);2 方案设计2.1 方案论证方案一:做个简单的普通倒计时秒表。就是能让它倒计时,还可以同按键控制它的开始与暂停,能够实现单片机与实验箱之间的串口通信。方案二:做个多功能倒

3、计时秒表,通过按键可以实现“运行/暂停”、“调整计时初值”功能,让单片机承担主控任务,ARM 实验箱上做的 UI 界面仅仅承担同步显示功能。方案三:做个多功能倒计时秒表,通过按键可以实现“运行/暂停”、“调整计时初值”功能,单片机可以接收串口发来的命令进行输出显示,当按键按下后将按键信息通过串口发送出去,ARM 实验箱可以实现与单片机的同步,同时可以进行互相控制,即通过 ARM 实验箱可以控制单片机显示和 ARM 实验箱上的 UI 的同步显示,繁反之通过单片机也可以控制实验箱与单片机的同步操作功能。显示采用多位数码管来实现。经过以上对方案的说明:方案一过于简单,无法实现本次实训的功能要求;方案

4、二叫方案一有改进,但是无法实现互相控制的功能要求,也就是失去了本次实训的意思(本次实训主要是 ARM 上的 Qt 编程);本次实训采用了方案三。2.2 工作原理AT89S51 单片机支持串口通信,串口有 4 个模式。可分别用串并转换、并串转换、异步串行通信(2 中模式)。异步串行通信中,有 1+8+1 和 1+8+1+1 两种帧格式,多机通信是特殊的通信方式。基本原理是两组移位寄存器,将并行通信转换成串行通信模式(发送部分),或反之(接收部分)。可全双工运行。速度通过移位脉冲决定,具体一般通过定时器1的自动壮哉模式产生的溢出脉冲给出。以上是物理层和数据链路层的单片机串口模式的约定,其他层需要软

5、件人员根据需要自行把握。另外。电平需要根据实际通信环境做改变,如232、485或红外等。SCS2410 UART单元提供2个独立的异步串行通信口。皆可共组于中断和DMA模式,每个单元UART单元包含一个16字节的FIF0,用于数据接收和发送,SCS2410 UART包括可编程波特率、红外发送/接收、1/2个停止位、5位/5位/7位/8位数据宽度和奇偶校验。虚拟机可以在串口模式下试下与SCS2410 UART的通信,SCS2410 显示终端2实现程序的功能后,可以通过串口与与51单片机实现串口通信。通过对两芯片的一些专用寄存器的应用,就可以实现两机之间的彼此通信。2.3总体框图倒计时秒表设计总体

6、框图2.4各功能电路实现原理及电路设计1)单片机最小系统:保证单片机的正常工作,一般包括:单片机、晶振电路、复位电路。见左下图。单片机最小系统下载口2)下载口:单片机的程序下载接口,主要接在单片机的P1口还有就是复位接口、电源和地(GND)。见右上图3)报警指示电路:报警指示电路由二极管、三极管、蜂鸣器和两电阻组成,倒计时到0的状态下,禁止倒计时,二极管闪烁,发出报警声。见右下图报警指示电路按键电路4)按键电路:由四个按键、四个电阻组成分别实现秒表暂停/运行、加计时、减计时、复位功能。见左上图。5)数码管显示电路:采用的是共阴数码管,通过动态扫描实现秒表数字的显示。见右下图数码管显示电路路串口

7、连接电6)串口连接电路:采用的是MAX232电压转换芯片,通过电压转换芯片连接串口,实现单片机与arm间的串口通信。见左上图3 软件设计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);/波特率设置,我们设置为9600myCom-setDataBits(DATA_8);/数据位设置,我们设置为8位数据位myCom-setParity(PAR_NO

10、NE);/奇偶校验设置,我们设置为无校验myCom-setStopBits(STOP_1);/停止位设置,我们设置为1位停止位myCom-setFlowControl(FLOW_OFF);/数据流控制设置,我们设置为无数据流控制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 制作与调试过程首先在收集资料的基础上画好原理图,自己编写单片机程序,然后用proteus仿真软件验证功能的正确性。在仿真实现的情况下,做出硬件电路板,首先通过下载接口将硬件电路与电脑连接,这个下载接口不仅仅可以下载程序还可以给芯片供电,接好下载线后,测

14、试芯片是否可以正常工作,在芯片和各个模板电路能正常工作的情况下,将之前写好的程序下载到硬件电路上。之后就开始用Qt编写ARM的程序,花了两天的时间终于编写好了ARM的c+程序,在编译通过之后。就开始在虚拟机中运行测试,之后到实验室将虚拟机与ARM实验箱通过串口连接起来。在ARM实验箱的显示屏上验证倒计时秒表功能与实训要求是否相符合,即将Qt写好的程序先拷贝到虚拟机下运行,再通过Qt的嵌入式开发工具链编译链接生成实验箱可以执行的文件,将这个可执行文件拷贝到实验箱与虚拟机共享目录下运行,在实验箱上观察秒表倒计时显示是否与题目要求099倒计时相符合,同时验证报警指示功能是否与实训要求相符合,接着就是

15、测试四个功能的作用是否是题目要求相匹配,我首先按下暂停/运行按键,观察秒表到时候是否可以正常运行,再在暂停状态下按下秒表复位,验证秒表是否可以实现复位功能,在接着在此状态下验证加计时和减计时的功能是否可以实现。接着拔掉电脑的串口线,通过串口线连接单片机与实验箱,验证各个按键功能和显示显示是否可以同步,同时是否可以互相控制。我在硬件电路完美实现的情况下,按照的上面的调试过程去做,结果是没有遇到什么不正常的问题,我的硬件做出来就可以正常工作了。4 电路测试硬件电路完成之后验证基本功能,即对数码管显示功能的测试,通过编写一个简单的小程序给数码管相应的 I/O 赋值,观察数码管是否可以正常;接着就是验

16、证按键是否可以正常使用,在验证数码管小程序的基础之上加入按键功能,对按键I/O 进行修改这样完成了对四个按键的测试;蜂鸣器和指示灯的测试就是对相应I/O 赋值观蜂鸣器是否可以发出声音和指示灯是否可以正常显示。串口的测试就是编写单片机和 ARM 小程序,进行简单的通信观察彼此是否可以收发字符串。正确测试电路这些基本功能之后就可以进行试训程序的编写了。4.1 指标测试1、099 秒倒计时的正常显示;2、报警声音和指示灯在倒计时结束时能按规定运行;3、四个按键分别可以实现秒表的暂停/运行,复位,加计时,减计时;4、可以扩展其他功能(数码管的多位显示,报警功能)4.2 误差分析实训过程中对于电路测试中

17、出现了一些误差,首先出现的就是数码管的显示,通过对数码管引脚图的分析,最后成功解决;还有就是功能按键不起作用,通过对按键引脚电平的从测试(在按下前后状态下),最后也成功解决此误差;还有就是程序误差,实验箱与单片机之间不能实现同步控制,最后通过对程序的修改也成功解决。附 录1、 电路原理图2、 PCB图3、 UI截面图4、 片机程序#include #define uchar unsigned char#define uint unsigned intunsigned char cnt;/ 区分数码管显示位/ 按键锁定unsigned char KEY = 0;unsigned char spe

18、ak = 1;unsigned char led = 0;/蜂鸣器 不响/指示灯 不亮int mg=43,ms=21;/数码管整数位(099)小数位(099) 初始化显示数字unsigned chartab=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /数码管0-9断码表void uart_isr() interrupt 4I/O中断/中断方式4,串行口/*接收模块0 xBB 表示接下来要接收两个数码管数据单片机串行口数据缓冲器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)/计数器初始化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() /按键、蜂鸣器初始状态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)/数码管动态扫描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;/发送中断标志位TIvoid m

22、ain()Com_Init();Timer_Init();Show_Init();while(1)/*发送模块暂停/启动:启动停止按键加:整数位上限加一减:整数位上限减一复位:清除当前数字 恢复*/if(!KEY)if(!P2_0) /暂停/启动delay();if(!P2_0)send(0 x01);KEY=1;if(!P2_1) /加计数按键delay();if(!P2_1)send(0 x02);KEY=1;if(!P2_2)/减计数按键delay();if(!P2_2)send(0 x03);KEY=1;if(!P2_3) /复位按键delay();if(!P2_3)send(0 x0

23、4);KEY=1;if(P2_0 & P2_1 & P2_2 & P2_3) /锁定按键 使其只能按一次发一次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);/波特率设置,我们设置为9600myCom-setDataBits(DATA_8);/数据位设置,我们设置为8位数据位myCom-setParity(PAR_NONE);/奇偶校验设置,我们设置为无校验myCom-setStopBits(STOP_1);/停止位设置,我们设置为1位停止位myCom-setFlowControl(FLOW_OFF);/数据流控制设置,我们设置为无数据流控制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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论