资源简介
本设计的是一个基于单片机AT89C51的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。
在上电时四位共阳极74EG-MPX4-CA数码管显示最初的起步价,里程收费,汽车行驶时间,通过按键可以切换起步价,里程收费,汽车行驶时间。通过按键模拟出租车的运行,暂停,停止。在74EG-MPX4-CA液晶上可以显示运行的时间,运行时暂停的时间,以及所用的费用。在这里主要是以AT89C51单片机为核心控制器,P3口接74EG-MPX4-CA液晶显示模块,P0口接按键的,通过按键输入。
![](http://www.nz998.com/pic/63949.jpg)
代码片段和文件信息
/**************************************
计价规则:
用时间模拟路程,前三秒以内8.00元,若超出3秒
每增加一秒,价格增加1元。用数码管显示价钱和
时间(用一个按键控制显示时间或价钱)。
**************************************/
#include
#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 ij;
uint code Seg[19]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x000x80};
//数码管译码表: { 0 , 1 , 2 , 3 , 4 ,5 6 7 8 9 0 . } P}
uchar jpskskey_do;//键盘缓存,上次有按键按下标志位,按键已处理标志位
uint count_10ms=0second=0;
float cost; //价钱
void delay(uint tt) //延时函数
{
uint i;
for(;tt>0;tt--)
for(i=0;i<200;i++);
}
void LED(uint d1uint 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.0*(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(211);
delay(5);
}
while(j%2==1) // 时间显示
{
LED(1second/10);
delay(5);
LED(2second%10);
delay(5);
LED(3count_10ms/10);
delay(5);
LED(4count_10ms%10);
delay(5);
LED(211);
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();
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 656696 2020-06-16 15:57 123.doc
文件 2651 2013-01-08 23:35 出租车计价器.c
文件 124395 2013-12-22 15:48 出租车计价器.DSN
文件 742 2013-12-22 15:48 出租车计价器.PWI
相关资源
- 基本放大电路multisim仿真.ms14
- STC8951系列单片机中方指南
- 一个labview仿真的函数信号发生器.vi
- 60个HFSS 仿真模型库
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- Quartus II 15.0中仿真Altera三速以太网I
- Quartus II 15.0中仿真Altera三速以太网I
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 瑞利信道的仿真,包括信号的调制,
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 数据库课设:图书管理系统报告
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- proteus仿真 AT89C51输出各种波形
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 计算机图形学课设 画板
- 一种红外遥控编解码仿真
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 毕业论文之温度传感器DS18B20(源码
- 51单片机基于protues的几个仿真实例
- 教学计划编制系统
评论
共有 条评论