# 单片机——汽车计价表（lcd+按键+数字屏）（proteus8.9和KeilC51）

• 题目描述
• 原理讲解
• 代码实现
• 原理图
• 完整代码

`````` 出租车计费程序
单价
5点之后10点之前  2元
10点之后5点之前  4元
停车
5分钟之后 票价为当时的一半
在5分钟之内不收钱
``````

``````	按键作用
START     出租车开始计费
STOP      出租车到达目的地
WAIT      出租车开始停车，5分钟之后开始计费
WAIT-STOP 出租车提车结束，开始正常行驶
``````

``````#include
#include

#define uint unsigned int
#define uchar unsigned char

sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;

sbit keysp=P3^0;
sbit keyst=P3^1;

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code wenzi[]={"DJ: LC: JE:"};

void delay(uint xms){
uint i,j;
for(i=xms;i>0;i--){
for(j=110;j>0;j--);
}
}

void write_com(uchar com){
en=0;rs=0;rw=0;
P0=com;delay(5);
en=1;delay(5);en=0;
}

void write_dat(uchar dat){
en=0;rs=1;rw=0;
P0=dat;delay(5);
en=1;delay(5);en=0;
}

uint money=0,kg=0,sum=0;
uint h=23,m=0,s=0;
uint count=0;
uint number=0,n=0;
uint wait =0,waitsum=0;
uint flag=0;
void main(){
uint i;

IT0=1;IT1=1;
EA=1;
EX0=1;EX1=1;

TMOD=0x11;
TH0=(65536-50000)/256;TL0=(65536-50000)%256;
TH1=(65536-50000)/256;TL1=(65536-50000)%256;
TR0=1;TR1=0;
EA=1;ET0=1;ET1=1;

write_com(0x01);
write_com(0x06);
write_com(0x0c);
write_com(0x38);

while(1){
write_com(0x80+0x04); write_dat(h/10+'0');
write_com(0x80+0x05); write_dat(h%10+'0');
write_com(0x80+0x06); write_dat(':');

write_com(0x80+0x07); write_dat(m/10+'0');
write_com(0x80+0x08); write_dat(m%10+'0');
write_com(0x80+0x09); write_dat(':');

write_com(0x80+0x0A); write_dat(s/10+'0');
write_com(0x80+0x0B); write_dat(s%10+'0');

write_com(0x80+0x40); for(i=0;i<3;i++) write_dat(wenzi[i]);
write_com(0x80+0x43); write_dat(money+'0');///

write_com(0x80+0x44); for(i=3;i<7;i++) write_dat(wenzi[i]);
write_com(0x80+0x48); write_dat(kg+'0');

write_com(0x80+0x49);for(i=7;i<12;i++) write_dat(wenzi[i]);
write_com(0x80+0x4d); write_dat(sum/10+'0');
write_com(0x80+0x4e); write_dat(sum%10+'0');

if(keysp==0){
delay(10);
if(keysp==0){
wait=m;
flag=1;
}while(!keysp);
}
if(keyst==0){
delay(10);
if(keyst==0){
waitsum=sum-kg*money;
flag=0;

}while(!keyst);
}

}

}

void start() interrupt 0{
TR1=1;
number=0,n=0;
flag=0;
}
void startstop() interrupt 2{
TR1=0;
kg=0;
sum=0;

}

void time() interrupt 1{
TH0=(65536-50000)/256;TL0=(65536-50000)%256;
count++;
//if(count%20==0){
s++;
if(s==60){s=0;m++;}
//}
if(m==60){m=0;h++;}
if(h==24){h=m=s=0;}
if(h>=22||h<=5){money=4;}
else{money=2;}

}
void month() interrupt 3{
TH1=(65536-50000)/256;TL1=(65536-50000)%256;
number++;

//if(number%20==0){
n++;
if(n==60){
if(flag==0){
kg++;
sum=kg*money+waitsum;
}else{
if((m-wait)>5){
sum=sum+money/2;
}
}
n=0;
}
//}

}

``````

(0)

• ## 三相SPWM发生器HEF4752在变频调速系统中的应用

三相SPWM发生器HEF4752在变频调速系统中的应用 0    引言 随着电力电子技术及大规模集成电路的发展，基于集成SPWM电路构成的变频调速系统以其结构简单、运行可靠、节能效果显著、性价比高等

2022-08-17
0 0 0
• ## 基于高性能多DSP互连技术

基于高性能多DSP互连技术由于现代数字信号处理器(dsp)设计、半导体工艺、并行处理和互连与传输技术的进步，现代高性能dsp的处理能力得到极大发展。但在移动通信、雷达信号处理和实时图像处理等复杂电子系

2022-08-17
3 0 0
• ## 基于IPSec的嵌入式网络安全应用研究

基于IPSec的嵌入式网络安全应用研究1 引言 嵌入式网络技术是近几年随着计算机网络技术的普及和发展而发展起来的一项新兴概念和技术，它通过为现有嵌入式系统增加因特网接入能力来扩展其功能，一般指设备通

2022-08-17
0 0 0
• ## 步进AC到DC电源转换

Marotta Controls 通过其第四个变体 PS11200 扩展了其 1-STEP 开关电源产品线。PS11200 旨在取代传统的 400-A 解决方案，这些解决方案通常在更大的占位面积内产生

2022-08-17
0 0 0
• ## 电源设计的基本原理与关键部件

了解电源设计的基本原理对于避免故障和确保高速单片机、存储芯片和逻辑IC满足设计预期非常重要。在本文中，英锐恩单片机开发工程师将介绍电源设计的基本原理，提供确保电子电路性能可靠所需的知识。一、为什么正确

2022-08-17
0 0 0

2022-08-17
0 0 0
• ## 电化学阻抗谱法的基本原理 EIS在锂电池状态检测中的应用

本文阐述了电化学阻抗谱法的基本原理，电解质与电极材料中的界面反应机理，以及它在锂离子电池的状态监测、正极材料、负极材料研究中的应用，从而可以提高电池的性能，延长电池的寿命。一、EIS的简介电化学阻抗谱

2022-08-17
0 0 0
• ## 为什么要给机器人配上腿

麻省理工学院（MIT）的仿生学实验室最近让迷你猎豹机器人（Mini Cheetah）的速度打破了记录：虽然它还比不上飞人博尔特，但它可能已经比你跑得快了。此外，这个机器人没有视力，而麻省理工学院的研究

2022-08-17
0 0 0
• ## 传统UV固化与LED可固化敷形涂料的比较

LED 可固化敷形涂料在需要快速周转时间的用例中获得了关注，例如汽车、白色家电和工业控制产品。除了高固化速度外，LED 可固化的敷形涂料还对环境和化学元素具有很强的抵抗力。本文深入探讨了 LED 可固

2022-08-17
0 0 0