汇编语言计数器出租车计费课程设计.docx
- 文档编号:29172107
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:33
- 大小:1.51MB
汇编语言计数器出租车计费课程设计.docx
《汇编语言计数器出租车计费课程设计.docx》由会员分享,可在线阅读,更多相关《汇编语言计数器出租车计费课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
汇编语言计数器出租车计费课程设计
提供全套毕业设计,欢迎咨询
《单片机原理与应用》
课程设计报告
院系:
湖南工业大学理学院
专业(级):
12电子科学
(1)班
姓名:
学号:
指导教师:
职称:
完成日期:
2014年12月12日
目录
1引言1
2 设计任务与要求2
2.1设计任务2
2.2设计要求3
3方案总体设计3
3.1显示时间方案的选择2
3.2总体设计2
3.3总体设计2
4硬件设计3
4.1.0单片机最小系统3
4.1.1STC89C52单片机特性参数4
4.1.2STC89C52RC主要引脚功能5
4.1.3STC89C52RC的中断源5
4.1.4时钟电路5
4.1.5复位电路6
4.2数码换显示电路6
4.3整体电路9
5软件设计9
5.1KEILC简介9
5.2程序流程图9
5.3keil调试过程18
6系统仿真与实现20
6.1proteus仿真软件简介20
6.2仿真调试过程20
6.3实物制作22
7设计总结23
参考文献24
(页码有误,大家可以改一下)
1引言
十进制加法计算器的原理与设计是单片机课程设计课题中的一个。
在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。
2 设计任务与要求
2.1外部脉冲自动计数,自动显示。
2.1.1设计一个255计数器:
0-255计数,计满后自动清0,重新计数(在数码管中显示)。
255计数设计思路:
255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。
然后对TL1的内容进行相应的二进制---十进制转换:
首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。
接着将相应的十进制数进行译码,并在LED数码管上显示出来。
每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。
2.1.2设计一个50000计数器:
0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
2.2设计一个出租车计费系统:
起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前4位显示数码管显示里程数,后4位数码管显示价钱(角,元,十元,百元)
2.3设计要求
要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真实现2.1外部脉冲计数;程序仿真测试通过后,再下载到单片机实训板上执行1.2出租车计费系统。
3方案总体设计
3.1显示时间方案的选择
方案一:
采用数码管显示,半导体数码管不仅具有工作电压低、体积小、寿命长、可靠性高等优点,而且响应时间短(一般不超过0.1us),亮度也比较高。
方案二:
采用液晶显示,液晶显示器的最大优点是功耗极小。
但是,由于它本身不会发光,仅仅靠反射外界光线显示字形,所以亮度很差。
通过上述两种方案的对比,显然可以发现,对于交通灯时间的显示,数码管显示更加适合,可靠,所以选择方案一。
4硬件设计
4.1.0单片机最小系统
单片机最小系统由一块单片机、一个时钟电路和一个复位电路组成。
如图3所示。
图1
4.1.1STC89C52RC主要参数
STC89C52RC单片机8K字节程序存储空间;512字节数据存储空间;内带2K字节EEPROM存储空间;可直接使用串口下载;8K字节程序存储空间;256字节数据存储空间。
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz;
4.用户应用程序空间为8K字节;
5.片上集成512字节RAM;
6.通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻,设计电路时需要注意这点。
共3个16位定时/计数器,分别为T0,T1,T2.
4.1.2STC89C52RC主要引脚功能
STC89C51引脚图如图4所示,其主要芯片功能如下所示。
图2STC89C52引脚图
VCC:
电源电压
GND:
接地
P0口:
P0口是一组8位双向I/O口。
P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。
P1口:
P1是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。
P2口:
P2是一个带有内部上拉电阻的8位准双向I/O口
P3口:
P3口是一组带有内部上拉电阻的8位准双向I/0口
RST:
复位输入
程序储存允许(
)输出是外部程序存储器的读选通信号
/VPP:
外部访问允许
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端
XTAL2:
振荡器反相放大器及内部时钟发生器的输:
出端
4.1.3STC89C52RC的中断源
89C52有6个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、三个片内定时/计数器溢出中断TF0,TF1,TF2、一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。
4.1.4时钟电路
此次设计的时钟电路由一个12MHz的晶振和两个22PF的陶瓷贴片电容组成。
89C52芯片内部有一个高增益反相放大器,用于构成振荡器。
引线XTAL1和XTAL2分别为反向放大器的输入和输出,两端跨接石英晶体及两个电容就可构成稳定的自激振荡器。
而电容器C1,C2起稳定振荡频率,并对振荡频率有微调作用,C1和C2可在20-100PF之间取值,这里取22PF。
电路如图3所示。
图3时钟电路
4.1.5复位电路
手动按钮复位需要人为在复位输入端RST上加入高电平。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。
手动按钮复位的电路如所示。
由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。
通常采用手动复位和上电自动复位结合,其电路如图6所示。
图4复位电路
4.2数码换显示电路
显示电路既可以选用液晶显示器,也可以选用数码管显示。
我采用的是数码管显示电路。
用八个共阴极数码管显示,LED是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。
共
阴数码管的码表为如表2所示。
表2共阴数码管码表
0
1
2
3
4
5
6
7
8
9
0x3f
0x06
0x5b
0x4f
0x66
0x6d
0x7d
0x07
0x7f
0x6f
在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口。
LED数码管的显示原理:
数码管有段选与位选两个使能端,由于采用共阴极数码管,要把数码管点亮,就必须给位选选通,至于显示什么数字,只需给段选输入数据即可。
通过给52单片机P0口送入初始值,并用P0口来控制段选位,P2.6、P2.7口来控制位显来实现动态显示,来显示各灯所在状态的显示时间。
在设计中,我们采用LED数码管动态显示,用P0口驱动显示。
由于P0口的输出级时,数码管显示的亮度不够,根据以前学习的知识及学长们的经验,只需给P0口强势上拉10K排阻,经实验验证,P0口上拉10K排阻后,数码管显示较亮。
电路图如图7所示。
图5数码管显示电路
其中单片机P0口与数码管各引脚之间的连接关系分别为:
ØP0.0------a
ØP0.1------b
ØP0.2------c
ØP0.3------d
ØP0.4------e
ØP0.5------f
ØP0.6------g
ØP0.7------Dp
其中a,b,c,d,e,f,g,Dp在数码管上的位置如图8所示。
图6数码管
4.3整体电路
将各模块电路整合到一起就形成了系统工作电路,如图7所示。
在altiumdesigner中画出电路原理图,检查电路没有错误后,可在proteus环境下进行仿真,就可看到整个系统的工作状态,即可模拟出实际交通灯的工作状态。
图7整个电路工作原理图
5软件设计
5.1KEILC简介
KEILC51标准C编译器为8051微控制器的软件开发提供C语言环境,同时保留了汇编代码高效,快速的特点。
C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision2IDE可为它们提供单一而灵活的开发环境。
C51V7版本是目前最高效、灵活的8051开发平台。
它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。
5.2程序流程
5.2.1计数程序流程图
255计数程序流程图
5.2.2循环计数0~255
ORG0000H
GEEEQU20H
SHIEQU21H
BAIEQU22H
LJMPMIAN
ORG0030H
MIAN:
MOVP2,#0
MOVSP,#90H
MOVTMOD,#60H
MOVTH1,#00H;此指令可有可无
MOVTL1,#00H
SETBTR1
LOOP:
ACALLDISPLAY
SJMPLOOP
;显示子程序
DISPLAY:
MOVA,TL1
MOVB,#100
DIVAB
MOVBAI,A
MOVA,B
MOVB,#10
DIVAB
MOVSHI,A
MOVGEE,B
MOVDPTR,#TAB
MOVR0,#3
MOVA,BAI;输入百位
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0DFH
SETBP2.7
NOP
ACALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVA,SHI;输入十位
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0BFH
SETBP2.7
NOP
ACALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVA,GEE;输入个位
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#7FH
SETBP2.7
NOP
ACALLDELAY
MOVP0,#0FFH
CLRP2.7
RET
DELAY:
MOVR3,#80
DJNZR3,$
RET
TAB:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
END
5.2.2循环计数0~50000
ORG0000H
GEEEQU20H
SHIEQU21H
BAIEQU22H
QIAEQU23H
WANEQU24H
LJMPMIAN
ORG0003H
LJMPINTO
ORG0030H
MIAN:
MOVP2,#0
MOVSP,#90H
SETBEA
SETBEX0
SETBIT0
MOVGEE,#0
MOVSHI,#4
MOVBAI,#3
MOVQIA,#2
MOVWAN,#1
LOOP:
ACALLDISPLAY
SJMPLOOP
;显示子程序
DISPLAY:
MOVDPTR,#TAB
MOVA,WAN
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0F7H
SETBP2.7
NOP
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVA,QIA
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0EFH
SETBP2.7
NOP
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVA,BAI
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0DFH
SETBP2.7
NOP
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVA,SHI
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0BFH
SETBP2.7
NOP
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVA,GEE
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#7FH
SETBP2.7
NOP
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
RET
;中断程序
INTO:
LCALLDELAY1
PUSHACC
MOVA,WAN
CJNEA,#5,LOOP1
MOVWAN,#0
SJMPLOOP2
LOOP1:
INCGEE
LOOP2:
MOVA,GEE
CJNEA,#10,GOO
MOVGEE,#0
INCSHI
MOVA,SHI
CJNEA,#10,GOO
MOVSHI,#0
INCBAI
MOVA,BAI
CJNEA,#10,GOO
MOVBAI,#0
INCQIA
MOVA,QIA
CJNEA,#10,GOO
MOVQIA,#0
INCWAN
GOO:
POPACC
RETI
DELAY:
MOVR3,#80
DJNZR3,$
RET
DELAY1:
MOVR1,#2
LOOP4:
MOVR0,#255
LOOP3:
NOP
NOP
DJNZR0,LOOP3
DJNZR1,LOOP4
RET
TAB:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
END
5.2.2出租车计费系统
ORG0000H
GEEEQU20H
SHIEQU21H
BAIEQU22H
QIAEQU23H
MGEEQU24H
MSHEQU25H
MBAEQU26H
MQIEQU27H
LJMPMIAN
ORG0013H
LJMPINTO
ORG0030H
MIAN:
MOVR5,#20
MOVR6,#25
MOVP2,#0
MOVSP,#90H
SETBEA
SETBEX1
SETBIT1
MOVGEE,#0
MOVSHI,#0
MOVBAI,#0
MOVQIA,#0
MOVMGE,#0
MOVMSH,#5
MOVMBA,#0
MOVMQI,#0
LOOP:
ACALLDISPLAY
LJMPLOOP
;显示子程序
DISPLAY:
MOVDPTR,#TAB
MOVA,QIA
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0FEH
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVA,BAI
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0FDH
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVDPTR,#TABO
MOVA,SHI
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0FBH
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
MOVDPTR,#TAB
MOVA,GEE
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0F7H
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
;计费千
MOVDPTR,#TAB
MOVA,MQI
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0EFH
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
;计费百
MOVA,MBA
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0DFH
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
;计费十
MOVDPTR,#TABO
MOVA,MSH
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#0BFH
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
;计费个
MOVDPTR,#TABI
MOVA,MGE
MOVCA,@A+DPTR
MOVP0,A
SETBP2.6
NOP
CLRP2.6
MOVP0,#7FH
SETBP2.7
LCALLDELAY
MOVP0,#0FFH
CLRP2.7
RET
;中断程序
INTO:
;LCALLDELAY1
PUSHACC
MOVA,QIA
CJNEA,#9,LOOP1
MOVQIA,#0
SJMPLOOP2
LOOP1:
INCGEE
LOOP2:
MOVA,GEE
CJNEA,#10,GOO
MOVGEE,#0
INCSHI
MOVA,SHI
CJNEA,#10,GOO
MOVSHI,#0
INCBAI
MOVA,BAI
CJNEA,#10,GOO
MOVBAI,#0
INCQIA
;2km时加费
GOO:
DJNZR5,TO
MOVR5,#5
INCMGE
MOVR4,MGE
CJNER4,#5,TO
MOVMGE,#0
TO:
DJNZR6,G
MOVR6,#5
MOVA,MGE
CJNEA,#1,BO
AJMPG
BO:
INCMSH
MOVA,MSH
CJNEA,#10,G
MOVMSH,#0
INCMBA
MOVA,MBA
CJNEA,#10,G
MOVMBA,#0
INCMQI
MOVA,MQI
CJNEA,#10,G
MOVMQI,#0
G:
POPACC
RETI
DELAY:
MOVR3,#80;延迟子函数
DJNZR3,$
RET
DELAY1:
MOVR1,#40;延迟子函数
LOOP4:
MOVR0,#255
LOOP3:
NOP
NOP
DJNZR0,LOOP3
DJNZR1,LOOP4
RET
TAB:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
TABO:
DB0BFH,86H,0DBH,0CFH,0E6H
DB0EDH,0FDH,87H,0FFH,0EFH
TABI:
DB3FH,7FH,7DH,66H,5BH
END
(编程注意“0”与“o”的区别)
5.3调试过程
在Keil中将程序代码编完后,点击rebuild键,编译看一开始,出现了好几个错误,经过好久的调试与更改后,编译时没报错,但是有些电路功能还是没弄出来,最后接近快一天的时候才将整个程序编出,终于将程序调试出来了。
编译成功后,先在keil中进行调试仿真。
图8
在keil中调试完成后,接着进一步软件测试,即可进行电路仿真。
6系统仿真与实现
6.1proteus仿真软件简介
Proteus是世界上著名的EDA工具仿真软件,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 计数器 出租车 计费 课程设计