沈阳航空航天大学电子信息工程学院
电子
应用软件训练总结报告
学生姓名:
专 业:
班 级:
学 号:
指导教师:
训练时间:2012年 7月16日至 2012年7月20日
电子信息工程学院电子设计应用软件训练任务
【训练任务】:
1、熟练掌握PROTEUS软件的使用;
2、按照设计要求绘制电路原理图;
3、能够按要求对所设计的电路进行仿真。
【基本要求及
】:
1、按照设计要求自行定义电路图纸尺寸;
2、设计任务如下:
设计一个简易速度里程
。要求:1)能够实时测量当前速度与走行里程(由
脉冲信号代替车轮的转数传感器);2)通过按键可选择里程/速度显示切换。
3、按照设计任务在Proteus中绘制电路原理图;
4、根据设计任务的要求编写程序,画出程序
图,并在Proteus下进行仿真,
实现相应功能。
3、按照设计任务在Proteus 6 Professional中绘制电路原理图;
4、根据设计任务的要求编写程序,在Proteus下进行仿真,实现相应功能。
【按照要求撰写总结报告】
成绩评定表
评语、建议或需要说明的问题:
指导教师签字: 日期:
成 绩
一、 任务说明
本次课程设计任务为:本课程设计为设计一个简易速度里程表。要求它能实现实时测量当前速度与走行里程(由脉冲信号代替车轮的转数传感器);并且通过按键可选择里程/速度显示切换。按照设计任务在Proteus中绘制电路原理图;根据设计任务的要求编写程序,画出程序流程图,并在Proteus下进行仿真。
二、绘制原理图
原理图绘制步骤:
1.建立文件。进入ISIS系统,选择菜单栏中的“文件”“新建设计”新建一个文件,然后选择菜单栏中的“系统”“设置图纸大小”来设置电路图纸的尺寸为A4,如图1所示。然后将文件保存到预先建立的文件夹中。设计窗口便新建完毕,如图2所示。
图1 图纸尺寸设定
图2 新建的设计窗口
2. 元件的查找及放置。首先点击工具箱左上角的“P”按钮,如图3。弹出“Pick Devices”操作界面,如图4。在关键字窗口输入所需器件名称,如80C51,系统会自动搜索到此元件,如图5所示。将所有元件搜索到以后按相应位置在图纸上放置好。本实验所需的元器件如表1。
图3 按钮“P”所在位置
图4 “Pick Devices”操作界面
图5 80C51元件搜索窗口
3.布线及调整。将鼠标移至所要连接器件的管脚处,鼠标箭头会变成图6的样式,此时按住鼠标左键拖至对应器件管脚处,松开左键即把两器件连接。如果在连接器件时出现交叉或重叠,可以对连线或元件位置进行适当的调整。布线后电路图如图7所示。
图6 可连线标示
图7 电路原理图
三、Proteus仿真说明
3.1导入仿真文件
原理图绘制好后,先右键点击元件80C51,再点击左键,自动弹出编译话框,如图8所示。选择保存好的后缀为“.HEX”的文件,导入单片机内。
图8 单片机导入文件对话框
3.2进行仿真
单击左下角开始仿真按钮,如图9所示,开始进行仿真。如图10~13所示。
图9 开始仿真按钮
图10 仿真显示
图11 仿真显示
图12仿真显示
图13 仿真显示
四、课程设计体会及合理化建议
通过这次的Proteus仿真实验课设,增强了我的实际动手能力,也让我对单片机的学习更加的有兴趣;在这次课程设计,在老师的耐心指教和与同学之间的讨论的情况下勉强做完,让我体会到实践是检验真理的唯一
的道理,在往后的日子里,我会更加的努力去学习好该学习的东西,争取做到更好,更完美。
五、流程图
1、 主程序流程图
图14 主程序流程图
2、 中断流程图
图15 中断流程图
五、参考文献
[1]谢兴红 .《Msc-51单片机基础与实践》,[M]北京航空航天大学出版社,
2008年一月.
[2]周立功, 《单片机试验与实践》,[M]北京航空航天大学出版社,
2006年十二月.
[3]冯博琴 ,《微型计算机原理与技术接口》,[M]清华大学出版社, 2002年.
[4]林全新,苏丽娟.《单片机原理及接口技术》,[M]人民邮电出版社, 2002年.
表1:元件清单
元件
库
件数
51单片机
AT89C51
1
电阻
RES
3
电解电容
CRYSTAL
1
控制开关
BUTTOU
2
LED数码管
7SEG-MPX1-CA
1
附录
原理图
附录
、程序说明
#include
unsigned char code led[ ]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
int count=0,licheng=0,sudu=0,ge,shi,bai,qian,m;
sbit xuanzhe=P1^0;
void delay()
{
int i,j;
for(i=80;i>0;i--)
for(j=10;j>0;j--);
}
void display()
{ count=count*0.001;
qian=count/1000;
bai=count%1000/100;
shi=count%100/10;
ge=count%10;
P0=led[qian];
P2=0x01;
delay();
P2=0x00;
P0=led[bai];
P2=0x02;
delay();
P2=0x00;
P0=led[shi];
P2=0x04;
delay();
P2=0x00;
P0=led[ge];
P2=0x08;
delay();
P2=0x00;
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EX0=1;
EA=1;
while(1)
{
if(xuanzhe==0)
count=licheng;
else
count=sudu;
display();
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
if(m==20)
{ m=0;
sudu=0;
}
}
void zhongduan() interrupt 0
{
EX0=0;
licheng++;
sudu++;
EX0=1;
}