资源描述
提供全套毕业设计,欢迎咨询
《单片机原理与应用》
课程设计报告
院 系 :
湖南工业大学理学院
专业(级):
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.1 STC89C52单片机特性参数 4
4.1.2 STC89C52RC主要引脚功能 5
4.1.3 STC89C52RC的中断源 5
4.1.4 时钟电路 5
4.1.5 复位电路 6
4.2 数码换显示电路 6
4.3 整体电路 9
5 软件设计 9
5.1 KEIL C简介 9
5.2 程序流程图 9
5.3 keil调试过程 18
6 系统仿真与实现 20
6.1 proteus仿真软件简介 20
6.2 仿真调试过程 20
6.3 实物制作 22
7 设计总结 23
参 考 文 献 24
(页码有误,大家可以改一下)
25
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.1 STC89C52RC主要参数
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.2 STC89C52RC主要引脚功能
STC89C51引脚图如图4所示,其主要芯片功能如下所示。
图2 STC89C52引脚图
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:复位输入
PSEN(————)程序储存允许(PSEN(————))输出是外部程序存储器的读选通信号
EA(——)/VPP:外部访问允许
XTAL1:振荡器反相放大器及内部时钟发生器的输入端
XTAL2:振荡器反相放大器及内部时钟发生器的输:出端
4.1.3 STC89C52RC的中断源
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所示。在altium designer 中画出电路原理图,检查电路没有错误后,可在proteus环境下进行仿真,就可看到整个系统的工作状态,即可模拟出实际交通灯的工作状态。
图7 整个电路工作原理图
5 软件设计
5.1 KEIL C简介
KEILC51标准C编译器为8051微控制器的软件开发提供C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2IDE可为它们提供单一而灵活的开发环境。C51V7版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。
5.2 程序流程
5.2.1计数程序流程图
开始
初始化堆栈,定时器初始化
清零相关RAM地址单元
TF1=1?
调用显示子程序
脉冲数加1
即20H加1
20H=100?
21H加1
20清零
计算出脉冲数的个,十,百位
分别存放于30H,31H,32H
(20H=54)&(21H=2?)
脉冲数计到255后重新计数
即20H,21H清零
说明:1. 20H存放脉冲的个位和十位数值,21H存放脉冲的百位和千位数值。
2.计算脉冲数的个位和十位数值:(20H)/10的商即十位数值存放于31H,余数即个位数值存放于30H。
3. 计算脉冲数的百位数值:(20H)/10的余数即百位数值存放于32H。
例如:脉冲数212(十进制),(20H)=12,(21H)=2。脉冲的个位数值(30H)=2, 脉冲的十位数值(31H)=1, 脉冲的百位数值(32H)=2.
255计数程序流程图
5.2.2循环计数0~255
ORG 0000H
GEE EQU 20H
SHI EQU 21H
BAI EQU 22H
LJMP MIAN
ORG 0030H
MIAN:MOV P2,#0
MOV SP,#90H
MOV TMOD,#60H
MOV TH1, #00H ;此指令可有可无
MOV TL1, #00H
SETB TR1
LOOP:ACALL DISPLAY
SJMP LOOP
;显示子程序
DISPLAY: MOV A,TL1
MOV B,#100
DIV AB
MOV BAI,A
MOV A,B
MOV B,#10
DIV AB
MOV SHI,A
MOV GEE,B
MOV DPTR,#TAB
MOV R0,#3
MOV A,BAI ;输入百位
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0DFH
SETB P2.7
NOP
ACALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV A,SHI ;输入十位
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0BFH
SETB P2.7
NOP
ACALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV A,GEE ;输入个位
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#7FH
SETB P2.7
NOP
ACALL DELAY
MOV P0,#0FFH
CLR P2.7
RET
DELAY: MOV R3,#80
DJNZ R3,$
RET
TAB: DB 3FH, 06H, 5BH, 4FH, 66H
DB 6DH, 7DH, 07H, 7FH, 6FH
END
5.2.2循环计数0~50000
ORG 0000H
GEE EQU 20H
SHI EQU 21H
BAI EQU 22H
QIA EQU 23H
WAN EQU 24H
LJMP MIAN
ORG 0003H
LJMP INTO
ORG 0030H
MIAN:MOV P2,#0
MOV SP,#90H
SETB EA
SETB EX0
SETB IT0
MOV GEE,#0
MOV SHI,#4
MOV BAI,#3
MOV QIA,#2
MOV WAN,#1
LOOP:ACALL DISPLAY
SJMP LOOP
;显示子程序
DISPLAY: MOV DPTR,#TAB
MOV A,WAN
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0F7H
SETB P2.7
NOP
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV A,QIA
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0EFH
SETB P2.7
NOP
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV A,BAI
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0DFH
SETB P2.7
NOP
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV A,SHI
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0BFH
SETB P2.7
NOP
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV A,GEE
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#7FH
SETB P2.7
NOP
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
RET
;中断程序
INTO: LCALL DELAY1
PUSH ACC
MOV A,WAN
CJNE A,#5,LOOP1
MOV WAN,#0
SJMP LOOP2
LOOP1: INC GEE
LOOP2: MOV A,GEE
CJNE A,#10,GOO
MOV GEE,#0
INC SHI
MOV A,SHI
CJNE A,#10,GOO
MOV SHI,#0
INC BAI
MOV A,BAI
CJNE A,#10,GOO
MOV BAI,#0
INC QIA
MOV A,QIA
CJNE A,#10,GOO
MOV QIA,#0
INC WAN
GOO: POP ACC
RETI
DELAY: MOV R3,#80
DJNZ R3,$
RET
DELAY1:MOV R1,#2
LOOP4:MOV R0,#255
LOOP3:NOP
NOP
DJNZ R0,LOOP3
DJNZ R1,LOOP4
RET
TAB: DB 3FH, 06H, 5BH, 4FH, 66H
DB 6DH, 7DH, 07H, 7FH, 6FH
END
5.2.2出租车计费系统
ORG 0000H
GEE EQU 20H
SHI EQU 21H
BAI EQU 22H
QIA EQU 23H
MGE EQU 24H
MSH EQU 25H
MBA EQU 26H
MQI EQU 27H
LJMP MIAN
ORG 0013H
LJMP INTO
ORG 0030H
MIAN:MOV R5,#20
MOV R6,#25
MOV P2,#0
MOV SP,#90H
SETB EA
SETB EX1
SETB IT1
MOV GEE,#0
MOV SHI,#0
MOV BAI,#0
MOV QIA,#0
MOV MGE,#0
MOV MSH,#5
MOV MBA,#0
MOV MQI,#0
LOOP:ACALL DISPLAY
LJMP LOOP
;显示子程序
DISPLAY: MOV DPTR,#TAB
MOV A,QIA
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0FEH
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV A,BAI
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0FDH
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV DPTR,#TABO
MOV A,SHI
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0FBH
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
MOV DPTR,#TAB
MOV A,GEE
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0F7H
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
;计费千
MOV DPTR,#TAB
MOV A,MQI
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0EFH
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
;计费百
MOV A,MBA
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0DFH
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
;计费十
MOV DPTR,#TABO
MOV A,MSH
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#0BFH
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
;计费个
MOV DPTR,#TABI
MOV A,MGE
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
NOP
CLR P2.6
MOV P0,#7FH
SETB P2.7
LCALL DELAY
MOV P0,#0FFH
CLR P2.7
RET
;中断程序
INTO: ; LCALL DELAY1
PUSH ACC
MOV A,QIA
CJNE A,#9,LOOP1
MOV QIA,#0
SJMP LOOP2
LOOP1: INC GEE
LOOP2: MOV A,GEE
CJNE A,#10,GOO
MOV GEE,#0
INC SHI
MOV A,SHI
CJNE A,#10,GOO
MOV SHI,#0
INC BAI
MOV A,BAI
CJNE A,#10,GOO
MOV BAI,#0
INC QIA
;2km时加费
GOO: DJNZ R5,TO
MOV R5,#5
INC MGE
MOV R4,MGE
CJNE R4,#5,TO
MOV MGE,#0
TO: DJNZ R6,G
MOV R6,#5
MOV A,MGE
CJNE A,#1,BO
AJMP G
BO: INC MSH
MOV A,MSH
CJNE A,#10,G
MOV MSH,#0
INC MBA
MOV A,MBA
CJNE A,#10,G
MOV MBA,#0
INC MQI
MOV A,MQI
CJNE A,#10,G
MOV MQI,#0
G: POP ACC
RETI
DELAY: MOV R3,#80 ;延迟子函数
DJNZ R3,$
RET
DELAY1:MOV R1,#40 ;延迟子函数
LOOP4:MOV R0,#255
LOOP3:NOP
NOP
DJNZ R0,LOOP3
DJNZ R1,LOOP4
RET
TAB: DB 3FH, 06H, 5BH, 4FH, 66H
DB 6DH, 7DH, 07H, 7FH, 6FH
TABO: DB 0BFH, 86H, 0DBH, 0CFH, 0E6H
DB 0EDH, 0FDH, 87H, 0FFH, 0EFH
TABI: DB 3FH, 7FH, 7DH, 66H, 5BH
END
(编程注意“0”与“o”的区别)
5.3调试过程
在Keil中将程序代码编完后,点击rebuild键,编译看一开始,出现了好几个错误,经过好久的调试与更改后,编译时没报错,但是有些电路功能还是没弄出来,最后接近快一天的时候才将整个程序编出,终于将程序调试出来了。编译成功后,先在keil中进行调试仿真。
图8
在keil中调试完成后,接着进一步软件测试,即可进行电路仿真。
6 系统仿真与实现
6.1 proteus仿真软件简介
Proteus是世界上著名的EDA工具仿真软件,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等。
proteus的操作
(一)硬件电路图的接法操作
1.放置选择(删除)元器件 2.移动元器件 3.缩放视图 4.连接导线 5.仿真,调试
(二) 单片机系统PROTEUS设计与仿真过程
Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开 发和改进手段之一。全部过程都是在计算机上通过Proteus来完成的。其过程一般也可分为三步:
1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等,简称Proteus电路设计。
2.在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试, 最后生成目标代码文件(*.hex)。简称Proteus源程序设计和生成目标代码文件。
3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。简称Proteus仿真。
6.2 仿真调试过程
在Keil中调试完成后,再到proteus中进行仿真。首先在proteus中需要的元件依次找出来,根据电路所需要实现的功能画好电路原理图,当检查电路完全没有错误后,双击芯片,再将在keil中生成的hex文件导入芯片,接着点击play键开始进行电路仿真。
图9 状态一
状态一:开始仿真后,便进行0~255的循环计数
图10 状态二
状态二:用仿
展开阅读全文