找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1185|回复: 3
收起左侧

51单片机proteus仿真 保存已行驶的里程并显示 如何修改程序

[复制链接]
ID:1007713 发表于 2022-3-3 17:40 | 显示全部楼层 |阅读模式
300黑币
这个图如何使得出租车停止行驶时,保存已行驶的里程和费用并显示。对应程序怎么改?
11111.png

#include<reg51.h>#define uchar unsigned char
#define  uint unsigned int
sbit        RESET                =        P3^7;
int        Price =        100, Mile =        0;
uchar        count =        0;
uchar code tab_d[10] = {0x3F,        0X06,        0X5B,        0X4F,        0X66,        0X6D,        0X7D,        0X07,        0X7F,        0X6F};
uchar code tab_wei[8] = {0x7f,        0xbf,        0xdf,        0xef,        0xf7,        0xfb,        0xfd,        0xfe};
void        delay(uint t)
{
        uchar        i=0;
        while(t--)
                for        (i;        i<120;i++);
}


void        display(uchar d,uchar x,uchar w)
{
        P2        =        0XFF;
        P2        =        tab_wei[w];
        P0        =        0;
        P0        =        tab_d[d] | x;
        delay        (100);
}


void        refresh()
{
        display(0,0,0);
        display(Mile%10,0,1);
        display(Mile/10%10,0x80,2);      
        if        (Mile>= 100)               
                        display(Mile/100%10,0,3);               
        if        (Mile >= 1000)               
                        display(Mile/1000%10,0,4);      
        display(Price%10,0,5);
        display(Price/10%10,0x80,6);      
        if        (Price>= 100)
                display(Price/100%10,0,7);
        if        (Price>=1000)
                display(Price/1000%10,0,8);
}
void timer1        ()        interrupt 1
{
        count++;
        Mile +=        1;
        if(        count==10)
        {
                count=0;
                if        (Mile>=30&&Mile<160)
                                Price +=16;
                if        (Mile>=160)
                                Price +=18;
                }
}
void init()
{
        P0                        =        0;
        P2                        =        0XFF;
        TMOD                =        0X0E;   
        IT0                        =        1;                        
        TH0                        =        255;      
        TL0                        =        255;
        TR0                        =        1;
        IE                        =        0X82;
}


void        judgeReset()
{
        if(RESET ==        0)
        {
                Price =        100;
                Mile = 0;
        }
}
void        main()
{
                init        ();               
                while        (1)
                {
                        judgeReset        ();
                        refresh                        ();
                        }                       
}

最佳答案

查看完整内容

如果你的脉冲是根据从出租车获取的脉冲数,比如说轮子转一圈,给一个脉冲这样的话,程序没有什么问题,在出租车停下来的时候,没有脉冲信号,显示也就停在那了,如果你要在proteus中这么做的话,需要在脉冲和单片机之间加一个按键
回复

使用道具 举报

ID:251390 发表于 2022-3-3 17:41 | 显示全部楼层
如果你的脉冲是根据从出租车获取的脉冲数,比如说轮子转一圈,给一个脉冲这样的话,程序没有什么问题,在出租车停下来的时候,没有脉冲信号,显示也就停在那了,如果你要在proteus中这么做的话,需要在脉冲和单片机之间加一个按键
回复

使用道具 举报

ID:123289 发表于 2022-3-4 11:43 | 显示全部楼层
写程序总有一个目的吧。
修改程序也有一样,请问修改要达成什么目的呢?
回复

使用道具 举报

ID:68800 发表于 2022-3-4 16:16 | 显示全部楼层
你这个应该是增加一个脉冲信号开关模拟停车状态,然后程序增加延时判断程序一定时间内没有脉冲信号即把数据写入存储内

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表