客车计价器1Word文件下载.docx
- 文档编号:20370416
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:21
- 大小:172.26KB
客车计价器1Word文件下载.docx
《客车计价器1Word文件下载.docx》由会员分享,可在线阅读,更多相关《客车计价器1Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
AT89C52单片机;
控制;
软件编程
目录
1设计基本要求1
2系统的组成及工作原理1
2.1系统的硬件构成及功能1
2.2AT89C52单片机及其引脚说明2
3硬件电路方案设计4
3.1方案比较与确定4
3.2显示单元电路设计5
3.3键盘显示模块设计6
3.4掉电保护模块设计6
4系统软件设计7
4.1系统主程序设计7
4.2定时中断服务程序8
4.3显示服务程序9
4.4键盘服务程序9
5系统调试与测试10
6心得体会及致谢10
参考文献12
附录1元件清单13
附录2源程序14
1设计基本要求
本次课程设计利用单片机技术来实现一台多功能出租车计价器,具有性能可靠、电路简单、成本低等特点。
(1)显示:
可以显示金额、时间、单价。
(2)计费功能:
不同情况具有不同的收费标准:
白天、晚上、途中等待;
并能进行手动修改单价。
(3)按键功能:
转换按键:
对白天/黑夜收费标准的转换;
修改按键:
对单价进行调整;
复位按键:
计数器能将记录数据自动清零。
2系统的组成及工作原理
2.1系统的硬件构成及功能
本系统的硬件设计主要包括单片机AT89C52、数据显示部件、模拟行驶时间单元、及计价单元的设计。
在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。
利用单片机丰富的IO端口,及其控制的灵活性,实现基本的时间计价功能和价格选择、总价显示控制等功能。
不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。
具体电路参见附录中“多功能出租车计价器总体电路图”如图2.1单片机控制方案图。
89C52
单片机
单价显示
金额显示
键盘控制
AT24C02
掉电存储
串口显示驱动电路
里程计算
2.1单片机控制方案图
2.2AT89C52单片机及其引脚说明
AT89C52是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含8KB的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,具有高性价比。
AT89C52是一个有40个引脚的芯片,引脚配置如图2.2AT89C52引脚配置所示。
图2.2AT89C52引脚配置
AT89C52芯片的40个引脚功能为:
VCC:
电源电压。
GND:
接地。
RST:
复位输入。
当RST变为高电平并保持2个机器周期时,将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRTO位可打开或关闭该功能。
DISKRTO位缺省为RESET输出高电平打开状态。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡放大器的输出。
P0口:
一组8位漏极开路型双向I/O口。
也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,P1接收低8位地址。
P1口部分端口引脚及功能如表2-1P1口特殊功能所示。
表2-1P1口特殊功能
P1口引脚
特殊功能
P1.5
MOSI(用于ISP编程)
P1.6
P1.7
SCK(用于ISP编程)
P2口:
一个带内部上拉电阻的8位双向I/O口。
P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。
Flash编程和程序校验期间,P2亦接收低8位地址。
P3口:
一个带内部上拉电阻的8位双向I/O口。
P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。
作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2-2P3口特殊功能所示。
P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号。
表2-2P3口特殊功能
P3口引脚
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
PSEN/:
程序储存允许输出是外部程序存储器的读先通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的PSEN/信号。
EA/VPP外部访问允许。
欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
Flash存储器编程时,该引脚加上+12V的编程电压VPP。
3硬件电路方案设计
3.1方案比较与确定
客车计价器基本功能部分是根据里程数来完成总金额的输出。
实现方法有两种。
方案一:
采用数字电路控制。
其原理方框图如图3.1所示。
采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单,性能不够稳定,而且不能调节单价,也不能根据天气调节计费标准,电路不够实用。
图3.1数字电路实现框图
方案二:
采用单片机控制。
利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。
本方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
3.2显示单元电路设计
由于设计要求有时间、金额、单价,所以采用6位LED数码管的分屏显示。
显示电路由6位LED数码管组成。
电路如图3.2所示,8255A用于连接51单片机和LED数码管,51单片机的P0.0~P0.7分别顺序对应8255A的D0~D7,8255A的PA口为数码管的位选,PA为0xdf时,选择右一数码管。
以次类推。
PB口为数码管段选,PB为0xa0时,数码管显示为零。
各个数码管显示原理示意图见图3.2:
图3.2数码管显示原理示意图
3.3键盘显示模块设计
键盘采用4*4矩阵按键,接在8255A的PC口,当有键按下时,相对应的接口被置0。
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
如图3.3所示,行线接PC.0~PC.3,列线接PC.4~PC.7。
图3.3矩阵键盘电路
按键S3:
复位按键。
按下该键,所以数据自动清零。
按键S4:
白天和黑夜计价方式的切换键。
按键S12:
开始计价按键。
外中断0按键:
表示汽车停止,并同时开始时间计价。
3.4掉电保护模块设计
掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。
掉电保护的芯片较多,如AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
掉电保护电路图如下图3.4所示:
图3.4掉电保护电路图
4系统软件设计
本系统的软件设计主要可分为主程序模块、定时计数中断程序、时间计数中断服务程序、、显示子程序服务程序、键盘服务程序五大模块。
下面对各部分模块作介绍。
4.1系统主程序设计
在主程序模块中,需要完成对各接口芯片的初始化、客车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、时间寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计时和计价等不同的操作。
主程序流程图如图4.1所示。
当按下S12时,就启动计价,将根据时间寄存器中的内容计算,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。
到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。
图4.1
程序总流程
4.2定时中断服务程序
在定时中断服务程序中,每1/20s产生一次中断,当产生20次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。
其程序流程如图4.2所示。
图4.2定时中断服务程序
4.3显示服务程序
数码管在一般情况下显示时间,总价格,单价三项数据。
程序流程图如图4.3:
图4.3显示服务程序
4.4键盘服务程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。
三个按键分别对应三个简单的子程序。
如果按键S3被按下,单片机复位键:
实时数据自动清零。
如果按键S4被按下,白天黑夜计价方式切换,按一次进入白天计价方式,两次进入黑夜计价方式,循环按键。
5系统调试与测试
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
测试包括时间计价测试、掉电存储测试。
根据系统设计方案,本系统的调试共分为三大部分:
由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试。
在软件编程时,应充分利用原理图,不然会在编程时导致硬件与软件不能对应起来,使程序无法实现功能,还有在编程时子程序的名称应与其功能对应,否则会使别人在读程序的时候不能及时理解程序含义,而且在软件调试时逻辑一定要清晰,不然在找错时会浪费很多时间。
6心得体会及致谢
经过这些天有关于客车计价器的课程设计,使我对单片机的应用有了更深的了解。
在课程设计的过程中,还是碰到了许多的问题。
比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;
对于代码的前后顺序及调用掌握得还不够好;
对于一些相关的应用软件没能熟练掌握。
通过这几天晚上的苦想和反复调试,以及参考网上的程序,最终还是把问题解决了。
通过这次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握,凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。
在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;
这次设计给了我极大的鼓舞和信心,相信在以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。
通过本次课程设计,又使我学到了许多书本上无法学到的知识,也使也深该体会到单片机技术应用领域的广泛,不仅使我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。
在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:
AT89C52单片机及其引脚说明,为本次课程设计提供了一定的资料。
也为以后的进一步学习打下了坚实的基础。
最后要感谢学校给了我们这次课程设计的机会,让我们将理论能运用于实践提供了条件,感谢指导老师谭老师对我们设计电路的指导与论证,同时也要感谢系里各位老师对于我们方案的敲定、元器件的选择、电路板的制作、元件的焊接的建议与指导,感谢同学们对我们组的支持。
祝愿老师们工作顺利,同学们学业有成!
参考文献
[1]张友德、赵志英、涂时亮.单片微型机原理、应用与实验上海:
复旦大学出版社2005.12.
[2]徐光翔.
单片机原理接口及应用
南京大学出版社
.
[3]张淑清等.单片微型计算机接口技术及其应用北京:
国防工业出版社.
[4]王晓君等.MCS-51及兼容单片机原理与选型北京:
电子工业出版社.
[5]张鑫、华臻、陈书谦.《单片机原理及应用》[M].电子工业出版社,2005.P110~136.
[6]丁元杰、吴大伟.《单片微机实题集与实验指导书》[M].机械工业出版社.2004.P124~125.
[7]AT89C52概述[EB/OL]:
附录1元件清单
名称
型号
数量
电阻
1KΩ10Ω
若干
电容
10433
单片机芯片
AT89C52
1
扩展芯片
8255A
三极管
9015
6
数码管
2
开关
按键
19
USB串口线
USB串口电源线
掉电保护芯片
发光二极管
数字万用表
DT9203
单片机仿真器
STC_ISP
双踪稳压稳流电源
DH1718E-5
数字示波器
TDS1002
电烙铁
附录2源程序
#include<
reg52.h>
absacc.h>
#defineucharunsignedchar
#defineuintunsignedint
#definePAXBYTE[0xd9ff]
#definePBXBYTE[0xdbff]
#definePCXBYTE[0xddff]
#defineCONXBYTE[0xdfff]
//sbitcs=P2^5;
//sbitA1=P2^1;
//sbitA0=P2^0;
ucharcount=0,k;
uinttemp,s,t;
ucharcodetable[]={
0xa0,0xbb,0x62,0x2a,
0x39,0x2c,0x24,0xba,
0x20,0x28,0xff};
voiddelay(uintz)//毫秒延时函数
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=120;
y>
y--);
}
display1(ucharbai,ucharshi,ucharge)//计价显示函数
PB=table[bai];
PA=0x37;
delay(5);
PA=0xff;
PB=table[shi];
PA=0x2f;
PB=table[ge];
PA=0x1f;
}
display2(ucharshiw,ucharwan,ucharqian)//路程或时间显示函数
PB=table[shiw];
PA=0x3e;
PB=table[wan];
PA=0x3d;
PB=table[qian];
PA=0x3b;
ucharkeyscan()//键盘扫描函数
uchartem;
PC=0x10;
tem=PC;
tem=tem&
0x0f;
if(tem==0x08)
{
delay(5);
if(tem==0x08)
{
while(PC==0x18);
return1;
}
}
if(tem==0x04)
return2;
if(tem==0x02)
return3;
elsereturn0;
voidmain()//主函数
ucharch,bai,shi,ge,sbai,sshi,sge,tbai,tshi,tge,key,b=1;
CON=0x81;
//设置8255控制字
EA=1;
EX0=1;
EX1=1;
TMOD=0x11;
IT1=1;
IT0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
ET0=1;
while
(1)
temp=30;
display1(0,3,0);
//选择白天与黑夜计价方式
delay(30);
key=keyscan();
if(key==1)
while(b)
{
if(ch==0)
{
temp=40;
display1(0,4,0);
delay(30);
key=keyscan();
if(key==1)
{ch++;
if(key==3)
b=0;
}
if(ch==1)
temp=30;
display1(0,3,0);
ch++;
if(ch==2)
ch=0;
}
if(key==3)//确认件按下开始计价
TR0=1;
while
(1)
sbai=s/100;
sshi=(s/10)%10;
sge=s%10;
tbai=t/100;
tshi=(t/10)%10;
tge=t%10;
bai=temp/100;
shi=(temp/10)%10;
ge=temp%10;
if(k==1)
display2(tbai,tshi,tge);
if(k==0)
display2(sbai,sshi,sge);
display1(bai,shi,ge);
voidinter0()interrupt0//外中断0表示停车按时间计价
{
EX0=0;
delay(6);
TR0=0;
k++;
TR1=1;
if(k==2)
{P1=0;
ET1=0;
TR1=0;
k=0;
voidtime0()interrupt1//路程计数
{ucharc;
c++;
if(c==20)
s++;
c=0;
if(s>
5)
temp=temp+10;
voidtime1()interrupt3//时间计数
uchara;
a++;
if(a==20)
{t++;
//P1=0;
a=0;
temp=temp+5;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 客车 计价器
![提示](https://static.bdocx.com/images/bang_tan.gif)