51单片机简易出租车计费系统仿真设计( proteus仿真+程序+报告+讲解视频)
仿真图proteus 8.9及以上
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0036
出租车计费系统设计内容:
1、用定时器时间模拟路程
2、前三秒以内8.00元,若超出3秒每增加一秒,价格增加1元。
3、用数码管显示价钱和时间
4、创新内容(用一个按键控制显示时间或价钱)
资料下载链接(可点击):
【腾讯文档】S0036 网盘链接
https://docs.qq.com/doc/DS0dNclRQU1pNWFpn
以下为本设计资料展示图:
开始仿真
开始仿真后前三秒以内8.00元,若超出3秒每增加一秒,价格增加1元。
数码管显示价钱或时间,通过按键切换显示。
部分程序代码
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit p00=P0^0 ;
sbit p01=P0^1 ;
sbit p02=P0^2 ;
sbit p37=P3^7 ;
uint i,j;
uint code Seg[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x80};
//数码管译码表: { 0 , 1 , 2 , 3 , 4 ,5 6 7 8 9 0 . } P}
uchar jps,ks,key_do;//键盘缓存,上次有按键按下标志位,按键已处理标志位
uint count_10ms=0,second=0;
float cost; //价钱
void delay(uint tt) //延时函数
{
uint i;
for(;tt>0;tt--)
for(i=0;i<200;i++);
}
void LED(uint d1,uint d2)
{
if(d1==1) P0=(P0|0xf0)&0x1f;
if(d1==2) P0=(P0|0xf0)&0x2f;
if(d1==3) P0=(P0|0xf0)&0x4f;
if(d1==4) P0=(P0|0xf0)&0x8f;
P0=P0|0x0f;
P1=Seg[d2];
}
int keyscan() //键盘扫描函数
{
int t=0;
if(p00==0) { t=1; jps=1;}
if(p01==0) { t=1; jps=2;}
if(p02==0) { t=1; jps=3;}
return(t);
}
void money() //价钱计算
{
count_10ms++;
if(count_10ms==100)
{count_10ms=0;second++;}
if(second<=3) cost=8.0;
else if(second>3) cost=8.0+1*(second-3);
}
void ledshow()
{
while(j%2==0) // 价钱显示
{
LED(1,(int) (cost/10) );
delay(5);
LED(2,(int) cost%10 );
delay(5);
LED(3,(int) (cost*10)%10 );
delay(5);
LED(4,(int) (cost*100)%10 );
delay(5);
LED(2,11);
delay(5);
}
while(j%2==1) // 时间显示
{
LED(1,second/10);
delay(5);
LED(2,second%10);
delay(5);
LED(3,count_10ms/10);
delay(5);
LED(4,count_10ms%10);
delay(5);
LED(2,11);
delay(5);
}
}
void Time_fun() interrupt 1 //10ms中断函数
{
uint k;
if(k==15) { k=0; p37=1; }
else k++;
TH0=(0xffff-10000)/256; //10ms
TL0=(0xffff-10000)%256; //10ms
if(i%2==1) money(); // 暂停/播放
if((ks==1)&&(keyscan()==1)&&(key_do==0))
{
k=0;
p37=0; //按键提示音
key_do=1;
if(jps==1) i++; // 暂停/播放键
if(jps==2) j++; // 时间价钱显示转换
if(jps==3) // 清零键
{
count_10ms=0;
second=0;
cost=0;
}
}
ks=keyscan();
if(ks==0) key_do=0;
}
main()
{
TMOD=0x01; //Time0为16计数器
TH0=(0xffff-10000)/256;
TL0=(0xffff-10000)%256;
TR0=1; //打开定时器
IE=0x82; //EA=1 ET0=1 打开中断
while(1)
{
ledshow();
}
}
报告格式规范,字数4528,含各种框图。
部分内容
2.1出租车计价器简介
以单片机AT89C51为核心设计一款多功能出租车计价器,该计价器能实现按时间和里程综合计算车价,能显示时间、总车价等相关信息显示。它比市场上的一些计价器使用更方便,功能更全,还具有有效防止司机作弊和系统稳定性好的优点。
2.2 设计要求
基于单片机的出租车计价器系统设计,基本实现出租车计价器的部分功能。
2.3 设计方案论证
根据系统的设计要求,用时间模拟路程设计出租车计价器,选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示等功能。选用时间模拟路程省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。
该系统的总体设计思路如下:将设计好的时间间隔发送到单片机上,经过51单片机处理,将把时间和价钱在显示电路上显示,本系统显示器用4位共阳LED数码管以动态扫描法实现。
按照系统设计功能的要求,确定系统由5个模块组成:主控制器、时钟电路,复位电路,振荡电路和显示电路。
本课题以是AT89C51单片机为核心设计的一种出租车计价器,系统整体硬件电路包括,时钟电路,复位电路,振荡电路和显示电路,单片机主板电路等组成。
系统框图主要由主控制器、单片机复位、时钟振荡、LED显示、总体电路结构框图如图2.3所示。
下载方式见文章开头视频
资料下载链接(可点击):