沈阳航空航天大学电子信息工程学院
电子设计应用软件训练
总结报告
学生姓名: 专 业: 电子信息工程 班 级: 学 号:
指导教师: 贾亮
训练时间:2013年 7月8日至 2013年7月12日
电子信息工程学院电子设计应用软件训练任务
【训练任务】:
1、熟练掌握PROTEUS软件的使用; 2、按照设计要求绘制电路原理图; 3、能够按要求对所设计的电路进行仿真。 【基本要求及说明】:
1、按照设计要求自行定义电路图纸尺寸; 2、设计任务如下:
设计一个8路模拟信号,8路开关信号的数据采集系统。用数码管显示采集通道和结果,循环显示各通道数据;用发光二极管显示开关量输入。 3、按照设计任务在Proteus 6 Professional中绘制电路原理图;
4、根据设计任务的要求编写程序,在Proteus下进行仿真,实现相应功能。 【按照要求撰写总结报告】
成绩:_____ 一、 任务说明
基于单片机MSP430F249内部ADC12对八路数据采集电路的主要原理是:通
电子设计应用软件训练总结报告
过电位计控制输入信号(电压值)的幅值,经单片机内部AD对八路信号进行实时同步采样,并通过数码管循环显示八路采样通道和采样结果。
本课题只要掌握单片机AD应用,LED数码管的接口方式,ADC的工作原理,LED数码管的驱动原理,就能实现Proteus仿真。
二、原理图绘制说明
数据采集电路的原理框图1所示。
现场信号数据采集器1 数据采集器2 主控系数据存现场信号现场信号数据采集器8 图1 数据采集电路的原理框图
数据显
使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养我们的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境进行初步的设计与仿真,在不需要硬件投入的条件下,我们觉得,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。
此次是用proteus绘制原理图,其具体的使用步骤如下:
1.运行该软件后,新建一个设计文件,然后开始查找任务中所用到的元器件,查找界面如图2所示元件查找界面。
2
电子设计应用软件训练总结报告
图2 元器件查找界面
2.将查找的元器件放置到界面中,并进行相应的引脚连线,本次是采用标注的方式进行引脚连接,标注符号相同的表示引脚相连接,具体操作是先将引脚引出一小段导线,右击导线选择放置网络标号,标注标号界面如图3所示。
图3 标注标号界面
3.按上述步骤选择单片机MSP430F249如图4单片机元件图。
3
电子设计应用软件训练总结报告
.
图4 单片机元件图
ADC输入口为P6口,八个通道同时采样。从P6.0—P6.7分别对应八个AD输入通道。 4.按照题目设计要求连接好各元件,完成后的原理图如附录Ⅰ所示。
三、PROTEUS软件对原理图进行仿真
1.单片机MSP430应用IAR开发软件,编辑相应AD控制程序,然后编译将编译结果生成HEX文件,然后连接好仿真电路。在PROTEUS绘制好原理图后,点击
调入
已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。将生成的HEX文件下载到Program File中。目标文件格式有许多不同的种类。最初每种类型计算机都拥有自身独特的格式,但随着Unix和其他可移植操作系统的问世,人们定义了例如COFF和ELF这些格式,并在不同的系统上使用它们。通常,链接器的输入和输出使用相同的文件格式,库文件和可执行文件格式也是一样使用相同的格式。
设计或选择一种目标文件格式是计算系统整体设计的关键部分。它影响着链接器的性能并因此影响着程序员在开发时的总耗时;如果格式是用于可执行文件,那么格式的设计还会影响程序的开始运行花费的时间,以及影响到系统对用户请求的反应速度。大部分目标文件格式以区块的方式来组织,每一区块中都装载着同种数据。在虚
4
电子设计应用软件训练总结报告
拟内存系统需要这些块的时候,它可以通过将这些块分页后调入,无需进一步处理就可使用。
然后点击左下角仿真按键,开始仿真。原理图如附录I。双击单片出现如图5 HEX文件输入界面。
图5 HEX文件输入界面
2.八个模拟信号采集的仿真由数码管显示,通过调节滑头可以改变模拟量的输入,八个模拟量如图6八路模拟信号所示。
图6 八路模拟信号
5
电子设计应用软件训练总结报告
3.采集到的模拟量经AD转换后有数码管显示,第一个数码管显示通道,第二、三、四个分别显示百位、十位、个位,采集一通道的结果显示窗口如图7数码管显示所示。
图7 数码管显示
4.八路开关信号的数据采集结果由八个发光二级管显示,单片机P1口为开关信号输入,P2口为LED灯输出,当开关信号为00001100时结果如图8八路开关信号指示所示。
如图8八路开关信号指示
5.输入八路模拟信号通过数码管显示结果。如图9八路模拟信号显示结果所示
如图9八路模拟信号显示结果
6
电子设计应用软件训练总结报告
6.主程序流程图如图10所示
开始 N i=1 Y 开关选择通开关信号数据采集 模拟量采集 数据处理 模数转换 显示结果 显示结果
图10 主程序流程图
四、总结
做了一周的课程设计,对于单片机的实际应用方面让我感受颇深。对于本专业的学生,我深知不进行自主的实践,永远也学不到真东西。
在课设刚开始拿到题目觉得挺简单,书上也有类似的程序,有点散漫。但当我真正的去思考开始着手做程序时才发现自己还有好多要去学习。Proteus仿真软件对我来说还是比较陌生的,有很多硬件都找不到,查阅了Proteus相关的入门书籍后才能自如的运用软件。
之后便是程序的编写,根据课设任务的要求,写出了程序的一个大概流程,按着程序流程图一步一步的得到了能实现数据输入输出的程序,期间经过了多次调试,修改。最终得到完整的程序,心里还是小有成就感的。
问题随之又来,当我将写好的程序进行实物仿真时,和我想的结果完全不同,写入程序的开发板并没有像软件仿真时那样得出期望的结果,最后经过查阅资料将程序、Proteus仿真、硬件的端口一一对应,才得出了争确的结果。
总之,要想做好一个硬件,理论知识基础,动手能力也必须过关,二者缺一不可,我会继续努力学习这方面的知识,通过类似课设这种方式锻炼自己,达到学以致用。
7
电子设计应用软件训练总结报告
五、参考文献
1.张毅刚.单片机原理及应用. [M]哈尔滨:哈尔滨工业大学出版社,2004. 2.彭伟.单片机C语言程序设计实训100例. [M]北京:电子工业出版社,2011. 3.周坚.单片机C语言轻松入门.第2版,[M]北京:北京航空航天大学出版社,2011. 4.胡启明,葛祥磊.Proteus从入门到精通100例. [M]北京:电子工业出版社,2012 5.谢龙汉.Proteus电子电路设计及仿真,[M]北京:电子工业出版社,2011.
6.洪利、章杨.MSP430单片机原理与应用实例详解.[M]北京:北京航空航天大学,2010.
8
电子设计应用软件训练总结报告
附录Ⅰ 仿真电路图
9
电子设计应用软件训练总结报告
附录Ⅱ 程序
#include \"msp430x24x.h\" #define uint unsigned int #define uchar unsigned char
static unsigned int results[8]; // Needs to be global in this example void display(); void delay(); uchar i;
/***设置数码管显示****/
#define L1_OFF P5OUT|=0x01 //关L1 #define L1_NO P5OUT&=~0x01 //点亮L0 #define L2_OFF P5OUT|=0x02 //关L1 #define L2_NO P5OUT&=~0x02 //点亮L1 #define L3_OFF P5OUT|=0x04 //关L2 #define L3_NO P5OUT&=~0x04 //点亮L2 #define L4_OFF P5OUT|=0x08 //关L2 #define L4_NO P5OUT&=~0x08 //点亮L2
uchar const Led1[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //不带小数点编码
uchar Led2[]={0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xCD, 0x87, 0xCF, 0xEF}; //带小数点编码
10
电子设计应用软件训练总结报告
uint x;
uchar Disbuf[4],flag; void RefreshDis(uint Data) {
float temp; unsigned long t;
temp=((float)(Data))*5/4096; t=(unsigned long)(temp*100); Disbuf[0]=Led2[t/100%10]; Disbuf[1]=Led1[t/10%10]; Disbuf[2]=Led1[t%10]; }
/****转换数据处理及显示****/ void display(void ) {
P4OUT=Disbuf[0];//x/100%10]; L2_NO; delay(); L2_OFF;
P4OUT=Disbuf[1];//x/10%10]; L3_NO; delay(); L3_OFF;
P4OUT=Disbuf[2];//x%10]; L4_NO; delay(); L4_OFF; }
void delay(void) { uint m;
for(m=500;m>0;m--); }
void delayms(uint t) {
11
电子设计应用软件训练总结报告
uint i; while(t--)
for(i=1330;i>0;i--); //进过参数的调整 }
void main() {
WDTCTL = WDTPW + WDTHOLD; uchar i; P3DIR=0XFF; P5SEL=0;
P5DIR=0x0F; P4SEL=0;
P4DIR=0XFF; P4OUT=0xFF; P5OUT=0x00; SVSCTL =0x00;
/****设置AD寄存器****/
P6SEL = 0xFF; ADC12CTL0 = ADC12ON+MSC+SHT0_2; ADC12CTL1 = SHP+CONSEQ_1; ADC12MCTL0 = INCH_0; ADC12MCTL1 = INCH_1; ADC12MCTL2 = INCH_2; ADC12MCTL3 = INCH_3; ADC12MCTL4 = INCH_4; ADC12MCTL5 = INCH_5; ADC12MCTL6 = INCH_6; ADC12MCTL7 = INCH_7+EOS; ADC12IE = 0x80; ADC12CTL0 |= ENC; flag=0;
ADC12CTL0|=ADC12SC; _BIS_SR(LPM0_bits+ GIE); while(1) {
12
//p4.6 .7输出 //P5段选编码输出 // Enable A/D channel inputs // Turn on ADC12, set sampling time // Use sampling timer, single sequence // ref+=AVcc, channel = A0 // ref+=AVcc, channel = A1 // ref+=AVcc, channel = A2 // ref+=AVcc, channel = A3, end seq. // ref+=AVcc, channel = A4 // ref+=AVcc, channel = A5 // ref+=AVcc, channel = A6 // ref+=AVcc, channel = A7, end seq. // Enable ADC12IFG.3 / Enable conversions //启动ADC转换器 //进入低功耗睡眠模式**/ 电子设计应用软件训练总结报告
for(i=1;i<=8;i++) {
RefreshDis(results[i]); uint n; for(n=70;n>0;n--) {
P4OUT=Led1[i]; //通道显示 L1_NO; delay(); L1_OFF;
ADC12CTL0|=ADC12SC; display(); P3OUT=P1IN; } } if(flag) {
ADC12CTL0|=ADC12SC; flag=0;
_BIS_SR(LPM1_bits+ GIE); } } }
/****ADC12中断服务****/
#pragma vector=ADC12_VECTOR __interrupt void ADC12ISR (void) {
results[0] = ADC12MEM0; results[1] = ADC12MEM1; results[2] = ADC12MEM2; results[3] = ADC12MEM3; results[4] = ADC12MEM4; results[5] = ADC12MEM5;
//启动ADC转换器 //进入低功耗睡眠模式**/ // Move results, IFG is cleared // Move results, IFG is cleared // Move results, IFG is cleared // Move results, IFG is cleared // Move results, IFG is cleared // Move results, IFG is cleared
13
电子设计应用软件训练总结报告
results[6] = ADC12MEM6; // Move results, IFG is cleared results[7] = ADC12MEM7; // Move results, IFG is cleared flag=1;
_BIC_SR_IRQ(LPM1_bits);
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0, SET BREAKPOINT HERE }
14