用单片机做出租车计费器,仿真了结果没有变化,想知道怎么改。

img


代码

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
    
sbit rw=P2^1;
sbit rs=P2^0;
sbit en=P2^2;
sbit b=P0^7;
void lcd_init();
void wr_com(uchar command);
void wr_data(uchar data0);
void lcd_clear();
void lcd_set();
void busy();
void display();
void printstring(uchar*s);
void display1();
void key1();
sbit K=P1^0;
sbit K1=P1^1;
sbit K2=P1^2;
sbit K3=P1^3;
sbit K4=P1^4;
sbit g=P2^7;
sbit aa=P2^3;
sbit bb=P2^4;
sbit cc=P2^5;

sbit led_run=P3^0;
sbit led_await=P3^1;
sbit led_stop=P3^2;

bit f_start;
bit jump_in;
bit jump_out;
void key();
uchar code
table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x70};
uchar dispbuf[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar dispbuf1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

uchar v,v1; uchar i;

void init();
void chuli();
void chuli1();
void delay(uchar t);
void clear();

void set(uchar x);
void set1(uchar y); uchar command;

uchar count,count1;
uchar second,minite,second1,minite1;
unsigned int tt,tt1;
unsigned char value1=50,value2=25,value3=15;
unsigned int money;void main()
{
    init();
    lcd_init();
    while(1)
    {
        key1();
        chuli();
        display();
        if(jump_in==1)
        {
            jump_in=0;
            lcd_init();
            while(1)
            {
                key();
                chuli1();
                display1();
                if(jump_out==1)
                {
                    lcd_init();
                    jump_out=0;
                    clear();
                    break;
                }
            }
        }
    }
}
void clear(){
    TR0=0;
    TR1=0;
    money=0;
    second=0;
    second1=0;
    minite=0;
    minite1=0;
    value1=50;
    value2=25;
    value3=15;
    led_run=1;
    led_await=1;
    led_stop=1;
    v=0;
    v1=0;
    for(i=0;i<15;i++)
    {
        dispbuf[i]=0;
        dispbuf1[i]=0;
    }
}

void init(){
    TMOD=0x11;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    TH1=(65536-50000)/256;
    TL1=(65536-50000)%256;
    ET0=1;
    ET1=1;
    EA=1;
    TR0=0;
    TR1=0;
}
void t0_(void) interrupt 1 using 0
{
    count++;
    if(count==20)
    {
        count=0;
        second++;
        if(second==60)
        {
            second=0;
            minite++;
            if(minite==99)
            {
                minite=0;
            }
        }
    }
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    dispbuf1[0]=minite/10;
    dispbuf1[1]=minite%10;
    dispbuf1[2]=second/10;
    dispbuf1[3]=second%10;
}
void t1_(void) interrupt 3 using 3
{
    count1++;
    if(count1==20)
    {
        count1=0;
        second1++;
        if(second1==60)
        {
            second1=0;
            minite1++;
            if(minite1==99)
            {
                minite1=0;
            }
        }
    }
    TH1=(65536-50000)/256;
    TL1=(65536-50000)%256;
    dispbuf1[4]=minite1/10;
    dispbuf1[5]=minite1%10;
    dispbuf1[6]=second1/10;
    dispbuf1[7]=second1%10;
}

void lcd_init()
{
    wr_com(0x3c);
    wr_com(0x06);
    wr_com(0x0c);
    wr_com(0x01);
}
void wr_com(uchar command)
{
    busy();
    rs=0;
    rw=0;
    P0=command;
    en=1;
    en=0;
}
void wr_data(uchar data0)
{
    busy();
    rs=1;
    rw=0;
    P0=data0;
    en=1;
    en=0;
}
void busy()
{
    while(1)
    {
        en=0;
        rs=0;
        rw=1;
        P0=0xff;
        en=1;
        if(b!=1)break;
    }
    en=0;
}
void chuli()
{
    dispbuf[0]=value1/100%10;
    dispbuf[1]=value1/10%10;
    dispbuf[2]=value1%10;
    dispbuf[3]=value2/100%10;
    dispbuf[4]=value2/10%10;
    dispbuf[5]=value2%10;
    dispbuf[6]=value3/100%10;
    dispbuf[7]=value3/10%10;
    dispbuf[8]=value3%10;
}
void display()
{
    set(0);
    printstring("step :");
    wr_data(table[dispbuf[0]]);
    wr_data(table[dispbuf[1]]);
    printstring(".");
    wr_data(table[dispbuf[2]]);
    
    set(16);
    printstring("mileage :");
    wr_data(table[dispbuf[3]]);
    wr_data(table[dispbuf[4]]);
    printstring(".");
    wr_data(table[dispbuf[5]]);
    
    set1(0);
    printstring("await :");
    wr_data(table[dispbuf[6]]);
    wr_data(table[dispbuf[7]]);
    printstring(".");
    wr_data(table[dispbuf[8]]);
    /*
    set1(16);
    printstring("run :");
    wr_data(table[dispbuf1[0]]);
    wr_data(table[dispbuf1[1]]);
    printstring(":");
    wr_data(table[dispbuf1[2]]);
    wr_data(table[dispbuf1[3]]);
    */
}

void chuli1()
{
    if(f_start==1)
    {
        tt=minite*60+second;
        tt1=minite1;
        money=value1+value2*0.1*tt+value3*tt1;}
    else if(f_start==0)
    {
        money=0;
    }
    dispbuf1[8]=money/100%10;
    dispbuf1[9]=money/10%10;
    dispbuf1[10]=money%10;
}

void display1()
{
    set(0);
    printstring("run:");
    wr_data(table[dispbuf1[0]]);
    wr_data(table[dispbuf1[1]]);
    printstring(":");
    wr_data(table[dispbuf1[2]]);
    wr_data(table[dispbuf1[3]]);
    
    set(14);
    printstring("await:");
    wr_data(table[dispbuf1[4]]);
    wr_data(table[dispbuf1[5]]);
    printstring(":");
    wr_data(table[dispbuf1[6]]);
    wr_data(table[dispbuf1[7]]);
    
    set1(0);
    printstring("sum is:");
    wr_data(table[dispbuf1[8]]);
    wr_data(table[dispbuf1[9]]);
    printstring(".");
    wr_data(table[dispbuf1[10]]);
    
}
void printstring(uchar *s)
{
    while(*s)
    wr_data(*s++);
}
void key()
{
    if(K3==0)
    {
        delay(50);
        if(K3==0)
        {
            while(K3==0);
            v1++;
            if(v1==4) v1=0;
        }
    }
    switch(v1)
    {
        case 1:f_start=1;TR0=1;TR1=0;led_run=0;led_await=1;led_stop=1;aa=1;bb=0;cc=1;break;
        case 2:TR0=0;TR1=1;led_run=1;led_await=0;led_stop=1;aa=0;cc=0;break;
        case 3:TR0=0;TR1=0;led_run=1;led_await=1;led_stop=0;break;
    }
    if(K4==0)
    {
        delay(50);
        if(K4==0)
        {
            while(K4==0);
            jump_out=1;
        }
    }
}
void delay(uchar t)
{
    while(--t);
}
void set(uchar x)
{
    command=0x80+x;
    wr_com(command);
}
void set1(uchar y)
{
    command=0xc0+y;
    wr_com(command);
}
void key1()
{
    if(K==0)
    {
        delay(100);
        if(K==0)
        {
            while(K==0);
            v++;
            if(v==4) v=0;
        }
    }
    switch(v)
    {
        case 0:break;
        case 1:if(K1==0){while(K1==0);value1=value1+10;}break;
        case 2:if(K1==0){while(K1==0);value2=value2+5;}break;
        case 3:if(K1==0){while(K1==0);value3=value3+5;}break;}
    if(K2==0)
    {
        delay(50);
        if(K2==0)
        {
            while(K2==0);
            jump_in=1;
        }
    }
}