利用51单片机设计速度里程表概要.docx
《利用51单片机设计速度里程表概要.docx》由会员分享,可在线阅读,更多相关《利用51单片机设计速度里程表概要.docx(12页珍藏版)》请在冰豆网上搜索。
利用51单片机设计速度里程表概要
沈阳航空航天大学电子信息工程学院
电子设计应用软件训练总结报告
学生姓名:
专业:
班级:
学号:
指导教师:
训练时间:
2012年7月16日至2012年7月20日
电子信息工程学院电子设计应用软件训练任务
【训练任务】:
1、熟练掌握PROTEUS软件的使用;
2、按照设计要求绘制电路原理图;
3、能够按要求对所设计的电路进行仿真。
【基本要求及说明】:
1、按照设计要求自行定义电路图纸尺寸;
2、设计任务如下:
设计一个简易速度里程表。
要求:
1)能够实时测量当前速度与走行里程(由
脉冲信号代替车轮的转数传感器);2)通过按键可选择里程/速度显示切换。
3、按照设计任务在Proteus中绘制电路原理图;
4、根据设计任务的要求编写程序,画出程序流程图,并在Proteus下进行仿真,
实现相应功能。
3、按照设计任务在Proteus6Professional中绘制电路原理图;
4、根据设计任务的要求编写程序,在Proteus下进行仿真,实现相应功能。
【按照要求撰写总结报告】
成绩评定表
评语、建议或需要说明的问题:
指导教师签字:
日期:
成绩
一、任务说明
本次课程设计任务为:
本课程设计为设计一个简易速度里程表。
要求它能实现实时测量当前速度与走行里程(由脉冲信号代替车轮的转数传感器);并且通过按键可选择里程/速度显示切换。
按照设计任务在Proteus中绘制电路原理图;根据设计任务的要求编写程序,画出程序流程图,并在Proteus下进行仿真。
二、绘制原理图
原理图绘制步骤:
1.建立文件。
进入ISIS系统,选择菜单栏中的“文件”“新建设计”新建一个文件,然后选择菜单栏中的“系统”“设置图纸大小”来设置电路图纸的尺寸为A4,如图1所示。
然后将文件保存到预先建立的文件夹中。
设计窗口便新建完毕,如图2所示。
图1图纸尺寸设定
图2新建的设计窗口
2.元件的查找及放置。
首先点击工具箱左上角的“P”按钮,如图3。
弹出“PickDevices”操作界面,如图4。
在关键字窗口输入所需器件名称,如80C51,系统会自动搜索到此元件,如图5所示。
将所有元件搜索到以后按相应位置在图纸上放置好。
本实验所需的元器件如表1。
图3按钮“P”所在位置
图4“PickDevices”操作界面
图580C51元件搜索窗口
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
unsignedcharcodeled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
intcount=0,licheng=0,sudu=0,ge,shi,bai,qian,m;
sbitxuanzhe=P1^0;
voiddelay()
{
inti,j;
for(i=80;i>0;i--)
for(j=10;j>0;j--);
}
voiddisplay()
{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;
}
voidmain()
{
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();
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
if(m==20)
{m=0;
sudu=0;
}
}
voidzhongduan()interrupt0
{
EX0=0;
licheng++;
sudu++;
EX0=1;
}