出租车计价器的项目设计

最新更新时间:2022-01-18来源: eefocus关键字:出租车  计价器  51单片机 手机看文章 扫描二维码
随时随地手机看文章

最近接到一个项目,是位一款出租车计价器设计一套软硬件系统

我用51单片机设计了一个方案,效果还不错,欢迎大家共同留言学习,讨论


废话不多说,先上实物图

在这里插入图片描述

AD设计原理图

在这里插入图片描述
在这里插入图片描述

出租车计价器元件清单

元件名称 单位(只) 型号 参数 备注

单片机 2 AT89S52

整流二极管 20 IN4007

电容 10 30P

电容 10 104

电解电容 8 100UF/50V

电解电容 2 220UF/50V

电解电容 10 10UF/25

微动开关(按钮) 12

74ls164 8

自锁开关 2 (白色,六脚的)

排针 2排

晶振 2 11.0592M

精调电阻 5 103 3296W 10K

排线 1米 20p

稳压管 2 LM7805

稳压管 2 LM7812

焊锡丝 若干

散热片 3 YB-20

三极管 20个 2TY 贴片(PNP)

万能板 3块

掉电保护 2 24c02

L298N 2

七段数码管 8 LG5011BSR

光耦 2 TP521-4

接线端子 8个 2P

管座 5 40P

管座 5 16P

热缩管 1米 直径1.5mm

铜柱 8 长20mm

直流电机 1

电源线 1

变压器 1

深度传感器 3 MOCH26A

驱动 1 L297和L292


C语言代码源程序


#include

#include

#include


#define uchar unsigned char

sbit P3_4=P3^4;

sbit jia=P2^0;//价格加

sbit jian=P2^1;//价格减

sbit gl=P2^2; //公里

sbit hp=P2^3; //换屏

sbit j=P2^4;//记数


unsigned char keycnt=0;

unsigned char cnt=0;

bit write=0; //写24C08 的标志;

//code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};

//code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};

code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,};

uchar sz[6];

int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g,u,v,w,z;


d=46; //单价

e=00; //公里数

f=05;


u=12;//时

v=00;//分

w=00;//秒

//jiage=d*e; //金额

/24C08 读写驱动程序

sbit scl=P3^4; // 24c08 SCL

sbit sda=P3^5; // 24c08 SDA

void delay1(unsigned char x)

{ unsigned int i;

for(i=0;i;}

void flash()

{ ; ; }

void x24c08_init() //24c08 初始化子程序

{scl=1; flash(); sda=1; flash();}

void start() //启动(I方C)总线

{sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}

void stop() //停止(I方C)总线

{sda=0; flash(); scl=1; flash(); sda=1; flash();}

void writex(unsigned char j) //写一个字节

{ unsigned char i,temp;

temp=j;

for (i=0;i<8;i++)

{temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}

scl=0; flash(); sda=1; flash();

}

unsigned char readx() //读一个字节

{

unsigned char i,j,k=0;

scl=0; flash(); sda=1;

for (i=0;i<8;i++)

{

flash(); scl=1; flash();

if (sda1) j=1;

else j=0;

k=(k<<1)|j;

scl=0;}

flash(); return(k);

}

void clock() //(I方C)线时钟

{

unsigned char i=0;

scl=1; flash();

while ((sda1)&&(i<255))i++;

scl=0; flash();

}

从24c02 的地址address 中读取一个字节数据/

unsigned char x24c08_read(unsigned char address)

{

unsigned char i;

start(); writex(0xa0);

clock(); writex(address);

clock(); start();

writex(0xa1); clock();

i=readx(); stop();

delay1(10);

return(i);

}

//向24c02 的address 地址中写入一字节数据info/

void x24c08_write(unsigned char address,unsigned char info)

{

EA=0;

start(); writex(0xa0);

clock(); writex(address);

clock(); writex(info);

clock(); stop();

EA=1;

delay1(50);

}

/24C08 读写驱动程序完/

void Delay(unsigned int tc) //延时程序

{

while( tc != 0 )

{unsigned int i;

for(i=0; i<100; i++);

tc–;}

}


/

void jishuqi()

{

if(j0)

{

cnt++;

switch(cnt)

{

case 30:

e++;

cnt=0;

break;

while(hp0);

}

}

}

void disp(void)

{

for(c=5;c>=0;c–)

{

SBUF=tab[sz[c]];

while(!TI);

TI=0;

}

}


/*void KEY() //按键扫描程序

{

unsigned char i,j;

if(jian==0)

{

for(i=20;i>0;i–) //延时去干扰

for(j=248;j>0;j–);


if(hp==0)

{

keycnt++;

switch(keycnt) //按下次数判断

{

case 1: //第一次按下

d=46;

break;


case 2: //第二次按下

d=12;


break;


case 3: //第三次按下

d=78;

keycnt=0; //重新开始判断键值

break;

}

while(hp==0);

}

}

}*/


void shizhong(void)

{

z=TH0*256+TL0;


if(z>1)

{

w++;z=0;

}

if(w>59)

{

v++;w=0;

}


if(v>59)

{

u++;v=0;

}


if(u>23)

{

u=0;

}

}

void led(void) //显示时间

{

if(jian0)

{

u++;

}

if(gl0)

{

v++;

}

if(hp==0)

{

w++;

}


qw=sz[0]=u/10%10;

bw=sz[1]=u%10;

sw=sz[2]=v/10%10;

gw=sz[3]=v%10;

yw=sz[4]=w/10%10;

ww=sz[5]=w%10;

}


void led1(void) //显示 价格 里程 金额

{

//KEY();

if(jian0)

{

d=46;

}

if(gl0)

{

d=78;

}

if(hp==0)

{

e=00;

f=05;

}

qw=sz[0]=d/10%10;

bw=sz[1]=d%10;

sw=sz[2]=e/10%10;

gw=sz[3]=e%10;

yw=sz[4]=f/10%10;

ww=sz[5]=f%10;

jishuqi();


x24c08_write(2,e);


}

void scjs(void)interrupt 3

{

TH1=0X3C;

TL1=0xB0;


a=a+1;

if(a12)

{

a=0;

P3_4=!P3_4;

if(P3_40)

{

//b=TH0256+TL0;

//f=5;

/

if(jia==0)

{d++;}


if(jian==0)

{d–;}


if(gl==0)

{e++;}

*/

if(e>3)

{

g=(e-3)*d/10+5;

f=g;

}


shizhong();


if(jia==0)


鉴于篇幅限制,只能写部分代码,

关键字:出租车  计价器  51单片机 编辑:什么鱼 引用地址:出租车计价器的项目设计

上一篇:扫盲:什么是单片机时序,如何看懂时序图
下一篇:无线充电检测与控制电路

推荐阅读

基于51单片机之间的双向通信(Proteus仿真)
具体功能实现:甲单片机通过按键可以控制乙单片机的LED灯,而乙单片机通过按键可以让连接甲单片机的数码管数字自增加一。使用器件:AT89C51、按键、排阻、4只LED灯、2片MAX232芯片、COM口(CONN-D9F)、数码管、若干电阻Proteus仿真原理图:仿真:乙机控制甲机的数码管显示:甲机控制乙机的LED灯:知识介绍:Proteus布线为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。定时中断系统简图定时器资源定时器个数:3个(T0,T1,T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源。(T0和T1的操作方式是所有51单片机共有的)中断系统执行现程序的过程中,出现某些急
发表于 2023-01-31
基于51单片机用DS1302和LCD1602设计可调式电子日历与时钟
具体功能实现:开机后可以在LCD1602上显示当前的年、月、日、星期、时、分、秒等信息,按下K1键,可以显示实时时钟;按下K2键,选择对年、月、日、时、分、秒的设置;按下K3键,进行加设置;按下K4键,进行减设置;使用器件:仿真原理图:仿真知识介绍 :DS1302实时时钟芯片DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS12
发表于 2023-01-31
基于51单片机实现温度监测报警系统
具体功能实现利用DS18B20实时检测温度并显示在LCD1602显示屏上,同时可以通过K1,K2,K3,K4设置最高温度和最低温度利用AT24C02可以实现掉电不丢失,最后当检测温度大于或小于最高温时,会在LCD1602显示屏上显示OV:H或OV:L。使用器件:AT89C52、LCD1602显示屏、4只按键、AT24C02、DS18B20实际图和运行图 :由测试图中的LCD1602显示屏可以得出:当前室温是24.18℃,最高温限制为21℃,最低温限制为-2℃。知识介绍:AT24C02芯片介绍AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片
发表于 2023-01-31
基于51单片机实现红外控制系统控制电机调速
具体功能实现初始时,数码管上显示0,此时电机不转动;当按下红外遥控上的“1”时,数码管显示1,电机的转速加快;一共分为三个挡位,每升高一个挡位,数码管都会显示对应的挡位数字同时提高电机的转速。器件:AT89C52,8位数码管,红外遥控器,步进电机,扇叶,74HC138译码器,HS0038红外接收探头红外调试前后图 :调试前:调节后知识介绍 :HS0038红外探头HS0038是一款红外接收探头,接收红外信号频率为38kHz,周期约26μs红外遥控红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出通信方式:单工,异步红外LED波长:940nm通信协议标准:NEC标准红外基本发送与接收空闲状
发表于 2023-01-31
基于51单片机理解SG90舵机原理并用按键控制
具体功能实现当按下开关时,舵机的角度分别运行到0°,45°,90°,135°,180°,0°(最后停止位置),其中每转动一个角度时间延时1s。器件:AT89C52,sg90舵机,三根杜邦线公对母,两支按键转动角度展示图:转动至45°转动至180°转动至90°知识介绍:sg90舵机简介由直流电机、减速齿轮组、传感器(可变电阻)和控制电路组成的一套自动控制系统。直流电机是一圈圈转动的,舵机只能在一定角度内转动(有最大旋转角度比如:180度),不能一圈圈转。外部中断:STC89C52有4个外部中断;STC89C52的外部中断有两种触发方式:下降沿触发和低电平触发下降沿触发:当按键按下不松手时只触发一次低电平触发:当按键按下不松手时会持续触
发表于 2023-01-31
51单片机与蜂鸣器实现摩斯电码转换
具体功能实现当我们按下矩阵按键中不同的按键时,在LCD1602显示相应的内容,同时一个按键按下多次可以切换不同的字母或数字,并且LED灯会闪烁。最后当我们按下确认时,蜂鸣器会发出不同频率的声音。器件蜂鸣器,AT89C51,若干按键,LCD1602,两支LED灯,排阻仿真展示图仿真前仿真后知识介绍矩阵按键控制原理如果使用独立按键与单片机连接, 每一个按键都需要单片机的一个 I/O 口, 若某单片机系统需较多按键, 用独立按键便会占用过多的 I/O 口资源。 单片机系统中 I/O 口资源往往比较宝贵, 当用到多个按键时为了减少 I/O 口引脚, 引入了矩阵按键。矩阵按键检测原理按键检测一般通过扫描来实现,先使某一列变为低电平,其余几列为
发表于 2023-01-30

推荐帖子

STM32F401RE程序下载问题
大家好最新在调试NUCLEO-F401RE开发板自己用keil_v5新建工程简单编写了LED闪烁的程序,用mini-USB连接后Debug单步执行可以看到灯闪烁的效果,下载或是把生成的bin文件拷贝到NODE_F401RE中就不可以,但是通过mbed编译生成的bin文件直接拷贝到NODE_F401RE中就可以正常运行了. 求助有经验的大神,这个是什么原因,是哪里的配置不对吗?谢谢大家 STM32F401RE程序下载问题
mininiu5216 stm32/stm8
AMD K8L资料曝光 加入独立核心电源管理
近日于In-Stat微处理器春季论坛上,AMD资深工程师ChuckMoore透露了更多有关K8L微架构的资料,K8L微架构是AMD未来的四核心架构,如同早前台湾某一主机板厂商透露一样,其最主要改善在于共享L3Cache架构,并改用新一代Hyper-Transort传输协议,速度将提升至5.2GB/s。AMD亦会在新一代K8L微架构中改善FloatingPoint浮点运算能力及经常被批评的SSE指令执行效率。ChuckMoore同时透露了K8L架构为了进一步提升省电效果,每颗核心
zbz0529 电源技术
【好书推荐】《C嵌入式编程设计模式》
《C嵌入式编程设计模式》以面向对象的视角,重新审视嵌入式系统,全面总结了嵌入式系统中常见的以及关键的设计模式。《C嵌入式编程设计模式》提出了很多新颖的设计模式,为使用c语言编程的嵌入式系统开发者提供了强有力的工具。通过这些模式,开发者可以用最短的时间设计出性能好、稳定性强、安全性高的嵌入式系统或软件。《C嵌入式编程设计模式》针对嵌人式系统中从内存访问到事件调度,从状态机设计到安全性可靠性保证,对系统的设计以及性能表现的方方面面进行了详细阐述。《C嵌入式编程设计模式》采用uml图形化解释,直观清晰
qinkaiabc 编程基础
USB BLASTER安装成功无法下载程序
不知道为什么下载器板子程序在师哥那都行在我在JTAG就提示Can’taccessJTAGchain USBBLASTER安装成功无法下载程序
ROYALLC FPGA/CPLD
pcb布局问题
请教高手,我用的是Altiumdesigner6.9,原理图已经添加到pcb里,对器件布局的时候,突然所有的器件都变成了绿色,怎样才能恢复原样?pcb布局问题
403091588 微控制器 MCU
ATSAMD51 依靠例程输出了HelloWorld
太费劲了 MPLABXIDE根据例程输出为/0 没办法想用KEIL 可是一直找不到Packet 终于在求助帖下找到 两篇回复 遇到的问题有 Keil编译报错LicentErro 降低为Keil5 没有Erro 带Warning烧录 显示 ATSAMD51依靠例程输出了HelloWorld
程英茂 Microchip MCU
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved