资源简介

本设计的是一个基于单片机AT89C51的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。 在上电时四位共阳极74EG-MPX4-CA数码管显示最初的起步价,里程收费,汽车行驶时间,通过按键可以切换起步价,里程收费,汽车行驶时间。通过按键模拟出租车的运行,暂停,停止。在74EG-MPX4-CA液晶上可以显示运行的时间,运行时暂停的时间,以及所用的费用。在这里主要是以AT89C51单片机为核心控制器,P3口接74EG-MPX4-CA液晶显示模块,P0口接按键的,通过按键输入。

资源截图

代码片段和文件信息

/**************************************  

   计价规则:

  用时间模拟路程,前三秒以内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

评论

共有 条评论