1、 基于Proteus的单片机 出租车计价器的设计 课程: 学院: 班级: 姓名: 学号: 小组其他成员: 指导老师: 一、 设计背景 随着出租车行业的发展,对出租车计费器的要求也越来越高。二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展,其实现方法经历了由分立元件、SSI、MSI到LSI、VLSI以及UVLSI的过程。同时为了提高系统的可靠性与通用性,微处理器和专业集成电路(ASIC)逐渐取代了通用全硬件LSI电路,而单片机开发的系统以其体积小、重量轻、功耗低、速度快、
2、成本低、保密性好而脱颖而出。 现在各大中城市出租车行业都已普及自动计费器,所以计费器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计费器的普及也是毫无疑问的,所以未来汽车计费器的市场还是十分有潜力的。 二、设计方案 1.设计功能: 计价功能:3.5公里以内(含3.5公里)价格为8 元, 超过3.5公里以后每0.5公里加0.8 元, 不足0.5公里按0.5公里计。 2.设计过程: 分为软件设计及硬件设计两个主要部分。其中,软件设计包括基于C语言的单片机源程序设计。硬件设计包括四个模块的设计即:主控模块,通信模块,电源
3、模块,按键及显示模块。 三、软件设计 1.设计流程单片机的软件设计流程 如右图所示 其中初始化模块由硬件初始化和软件初 始化两部分组成, 硬件初始化主要是 对单片机及其它相关芯片进行初始 化; 而软件初始化主要是对各种软件 标志进行初始化, 同时将断电前保存 的各种状态数据读入单片机的RAM中。 2.单片机源程序 #include "at89x51.h" #include "intrins.h" #define uchar unsigned char uchar a,b=0,temp=0x01; unsigned char table[]=
4、{ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF }; unsigned char table1[]={ 0xBF,0x3F,0x3F,0x3F,0x3F,0xBF,0x3F,0x3F}; int m=0,n=10,ge=0,shi=0,h=0; uchar n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0;
5、
void delay (uchar t)
for(t1=0;t1<10;t1++)
for(t2=0;t2 6、 P0=table[n2];
delay(1);
P2_1=1;
}
else
{
P0=table[n2+n];
delay(1);
P2_1=1;
}
P2_2=0;
P0=table[n3];
delay(10);
P2_2=1;
P2_3=0;
P0=table[n4];
delay(1);
P2_3=1;
P2_4=0;
P0=table[n5];
delay(1);
7、 P2_4=1;
P2_5=0;
P0=table[n6];
delay(1);
P2_5=1;
P2_6=0;
P0=table[n7];
delay(1);
P2_6=1;
P2_7=0;
P0=table[n8];
delay(1);
P2_7=1;
}
void display1()
{
{
n7=n7+8;
}
if(n7<10)
{
n7=n7;
}
else
{
8、
n7=n7-10;
n6++;
}
if(n6==20) //
{
n6=10;
n5++;
}
if(n5==10)
{
n5=0;
n4++;
}
}
void main()
{
TMOD=0X01; TH0=0X00;
TL0=0X00;
ET0=1;
TR0=1;
init();
while(1)
{
if( P1_1==0 ) {
EA=0;
ini 9、t();
break;
}
if(P1_0==0 )
{
EA=1;
}
else
{
EA=0;
}
display ();
}
}
void int0() interrupt 1
{
TH0=0X00;
TL0=0X00;
b++;
h++;
if(b==3) {
b=0;
if(n3<10)
{
n3++;
}
if(n3= 10、10)
{
n3=0;
n2++;
}
if(n2==10)
{
n2=0;
n1++;
}
if(n1<1)
{
n4=n5=n7=n8=0;
n6=18;
}
// 运行到9.99
if(n1==9 && n2==9 && n3==9)
{
n1=m-9;
n2=0;
n3=0;
}
if(h>3000 && h<5700) //
{
if( n3==0 || n3==5)
11、
display1();
}
if((n1==3 && n2==5 && n3==0) || (n1>3 && n2==0 && n3==0) || (n1>3 && n2==5 && n3==0))
display1();
}
}
3.仿真电路图
四、硬件设计
系统主要由一个STC89C52 单片机、74LS373、两个4 位数码管等组成。通用STC89C52 单片机芯片作为整个电路的核心部分、74LS373 作为LED 段选控制、开关输入控制信号。
包含主控 12、通信,按键及显示,
电源四个模块。
如右图所示。
1.主控模块
(1)STC89C52处理芯片
①主要性能:
与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、全静态操作:0Hz~33Hz 、三级加密程序存储器 、 32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针、掉电标识符 。
②功能特性描述:
STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用高密度 13、非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 STC89C52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、 14、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K字节在系统可编程 Flash
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0具有内部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉 15、高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2 的触发输入(P1.1/T2EX)。
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR) 时,P2 口送 16、出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3.5 T1(定时/计数器1)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据 17、存储器读选通)
RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP——外部访问允许,欲使CP 18、U仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
③引脚图:见下图
(2)74LS373
①功能说明:
373为三态输出的八 D 透明锁存器。373 的输出端 O0~ O7 可直接与总线相连。当三态允许控制端 OE 为低电平时,O0~O7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0~O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部 19、的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。
②引脚图:见上图
Dn
LE
OE
On
H
H
L
H
L
H
L
L
X
L
L
Q0
X
X
H
高阻态
③引出端符号:
D0~D7 数据输入端
OE 三态允许控制端(低电平有效)
LE 锁存允许端
O0~O7 输出端
④真值表:见右图
2.通信模块
右图为通信模块组成图, 它
主要由单片机的两个I/ O 口、
和一些电阻电容等组成。
图中电阻均为10kΩ , 电 20、容均为
10μF;单片机的P30 为串行数据
接收脚、P31 为串行数据发送脚,
3.按键及显示模块
该模块由一片74LS373、20 个数
码管及组成。该模块有三个开关键,
分别设为A、B、C开关。空车状态
按下C开关,计费器进入载客
状态; 空车状态按下B 开关,
计费器进入计费状态; 若按下
A 开关,再次进入空车状态。
4.电源模块
该模块为稳压电源, 用于将输入电源变为稳定的5V 电源。
五、调试
为检验设计的电路和程序, 将调试的程序固化到制作的实物电路板单片机中, 得到的实物运行实验结果与Proteus 的仿真结果完全一致。
21、
六、总结
1.作品设计总结
该设计结果完成了设计方案中所要求的功能。
通过出租车计费系统的设计中, 利用Proteus 软件极大地提高了工作效率, 这对于单片机应用系统、电子电路的开发等都有很大的实用价值。
2.个人课程心得
经过这段时间电子技术综合设计的学习,我更多的懂得了查找资料对电子设计的重要性。作为一个经验极其缺乏的学生来说,想通过老师在课堂上的讲解就能精通一门课程,尤其是想自己设计一个有点创新和复杂性的东西来,我个人认为那是不现实的。毕竟在课时有限的教学中,老师也只能讲解一些比较基础的重点的内容,所以作为一个大学生,我们要充分利用手上的工具和图书馆庞大的书籍,我们 22、要不断的在探索中学习。
本次的实习,我们小组做的是出租车计费系统的设计。在课程开始之后,我们小组就去查找相关资料,经过几天的资料收集之后,我们开始动手尝试。我们分工合作,每人承担不同的任务,但又互相配合,互相帮助。我懂得了团队合作的重要性。
另外在本次实习中,我也复习了单片机原理及数字电子技术的一些相关知识,如时钟电路的工作原理,单片机基本程序设计原理,这些课堂知识为本次的学习做了辅导,正是有了这些知识,才使得我在实习过程中能够收获很大。因此作为一个在校大学生,虽然实践的机会比较少,但我一定要充分利用这些有限的课堂时间学到更多的知识。在学习的过程中有要不断的思考研究,利用每次机会充分锻炼自己!
七、参考文献
[1] 袁小平.电子技术综合设计教程[M].北京:机械工业出版社,2008
[2] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004
[3] 曹国清.可编程逻辑器件及VHDL设计技术[M].徐州:中国矿业大学出版社,2003
[4]李华.MCS - 51 系列单片机实用接口技术[M] .北京:北京航天大学出版社,1999.
[5]周国运.单片机原理及应用:C语言版[M].北京:中国水利水电出版社, 2009
[6]谭浩强.C程序设计[M].北京:清华大学出版社,2004






