历史上的今天
返回首页

历史上的今天

今天是:2024年12月20日(星期五)

正在发生

2021年12月20日 | 出租车计价器的项目设计

2021-12-20 来源:eefocus

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

我用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)


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

推荐阅读

史海拾趣

Emerging Display Technolgies公司的发展小趣事

随着虚拟现实(VR)、增强现实(AR)等技术的快速发展,微型显示技术的需求日益增加。一家新兴显示技术公司,凭借其在微纳加工和光学设计方面的技术优势,成功研发出了高性能的微型显示屏。这种显示屏具有体积小、分辨率高、功耗低等特点,为VR/AR设备提供了更加逼真的视觉体验。

Hi-G Relays公司的发展小趣事

随着虚拟现实(VR)、增强现实(AR)等技术的快速发展,微型显示技术的需求日益增加。一家新兴显示技术公司,凭借其在微纳加工和光学设计方面的技术优势,成功研发出了高性能的微型显示屏。这种显示屏具有体积小、分辨率高、功耗低等特点,为VR/AR设备提供了更加逼真的视觉体验。

Electro-Films Inc Semi-Films Div公司的发展小趣事

在20世纪80年代初,Electro-Films Inc. 的创始人意识到了电子行业中对高性能薄膜材料的需求日益增加。因此,公司决定成立一个专门负责薄膜材料研发的部门,即Semi-Films Division。这个部门在成立之初就面临着巨大的挑战,但团队凭借对技术的执着追求和不懈努力,成功开发出了具有优良电气性能和机械性能的薄膜产品,为公司赢得了首批客户。

Andon Electronics公司的发展小趣事

近年来,随着全球环保意识的提高,绿色环保和可持续发展成为各行各业关注的焦点。Semi-Films Division 也积极响应这一趋势,将绿色环保理念融入到公司的生产和经营中。公司采用环保的生产工艺和材料,减少了对环境的污染和破坏。同时,公司还积极参与各种环保活动和项目,推动整个行业的绿色发展和可持续发展。这些努力不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

福斯特半导体(Foster)公司的发展小趣事

进入21世纪后,随着全球电子产业的蓬勃发展,Semi-Films Division 开始积极拓展国际市场。公司参加了多个国际性的电子产品展览会,与全球各地的客户建立了联系。同时,公司还加大了对海外市场的投入,设立了多个海外办事处和代理商,为客户提供更加便捷的服务。这些举措使得 Semi-Films 的产品逐渐走向世界,成为国际知名的薄膜材料供应商。

Friedrich Lütze GmbH公司的发展小趣事

进入21世纪,随着信息技术的飞速发展和工业4.0时代的到来,电子行业面临着前所未有的技术变革。Friedrich Lütze GmbH 积极应对这一挑战,致力于将物联网(IoT)、大数据、人工智能等先进技术融入产品之中,推动公司向智能化、网络化方向转型升级。公司通过建立智能制造体系,提升生产效率和产品质量,同时开发出更加智能、便捷的工业自动化解决方案,为客户提供更加全面的服务。

问答坊 | AI 解惑

单片机应用系统断电时的数据保护方法

 在测量、控制等领域的应用中,常要求单片机内部和外部RAM中的数据在电源掉电时不丢失,重新加电时,RAM中的数据能够保存完好,这就要求对单片机系统加接掉电保护电路。掉电保护通常可采用以下三种方法:一是加接不间断电源,让整个系统在掉电 ...…

查看全部问答>

编译过程出现这个错误什么原因??如何修改??吃饭不下

  <汇编器提示> COPYRIGHT MANLEY ELECTRONICS CO., LTD. 2001-2006    <汇编器提示> ASSEMBLY COMPLETE.  0 WARNING(S), 1 ERROR(S)       ERROR #14 IN 560 (VCJPDH.ASM, LINE 560): TAR ...…

查看全部问答>

超高亮度LED的应用示例

replyreload += \',\' + 768280;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

版主,我有问题请教:

版主,我有问题请教:     我用ST—LINK在线调试芯片,程序烧录进MCU一次后,再次连接时,MCU与ST—LINK链接不上!以后一直连不上。连续两个板子都是一样的情况。 STVD报错:×× Connection error(usb://usb):gdi-error[40701]pt ...…

查看全部问答>

关于库函数的使用

本人想利用按键作为外部中断,通过中断服务程序打开定时器,使用定时器TIM1更新中断。再次发生外部中断时关闭定时器中断。按键触发的是EXTI线[15:10]中断,优先级低于TIM1更新中断,在设置优先级是使用库函数,在网上搜到了一段,如下:   &n ...…

查看全部问答>

MSP430F541x, MSP430F543x ,MSP430F543xA,MSP430F541x,MSP430F55xxA官方示例代码

附件中代码是TI提供的MSP430F541x, MSP430F543x ,MSP430F543xA,MSP430F541xA, MSP430F55xx 官方示例代码,可以作为MSP430使用过程中最可靠的代码参考 [ 本帖最后由 wstt 于 2012-5-31 20:52 编辑 ]…

查看全部问答>

ARM7 数据位移动

请问各位大神,ARM7 有没有好的方法时数组里的各个数据分别移动一位 并让第二个的第0位接到第一位的第七位上 依次类推 数组好长。…

查看全部问答>

CLKOUT的圆是什么?

CLKOUT的那个圆点是什么,在PCB上生成什么,在别人电路图看到的,已经是pdf看不到原型. …

查看全部问答>

IIHZ/IILZ是什么意思

看74LVC4245A资料,里面有IIHZ/IILZ,请问是什么意思?…

查看全部问答>

高性能数据采集系统增强数字X射线和MRI的图像

高性能数据采集系统增强数字X射线和MRI的图像数字X射线 (DXR)、磁共振成像和其他医疗设备要求数据采集系统具备小型、高性能、低功耗等特性,以满足竞争市场上医生、病人和制造商的需求。本文展示一款高精度、低功耗信号链,可解决多通道应用(如数 ...…

查看全部问答>