【广告公司网站源码模板】【android充值源码】【推理游戏源码】停车计费源码_停车计费源码是什么

时间:2024-12-28 10:24:17 来源:支持自定义直播影视源码 分类:焦点

1.如何用vb做个停车场管理系统
2.C语言停车场管理系统
3.20个python3大项目开发源代码(含可执行程序及源码)
4.出租车计价器
5.智慧停车方案+源码
6.EDA课程设计,用VHDL编程做出租车计费器

停车计费源码_停车计费源码是停车停车什么

如何用vb做个停车场管理系统

       åŸºäºŽä½ çš„描述停车场管理系统,我们可以为你提供一份适用于初学者的代码,

       å¦‚有具体需求,可以我们联系,,联系我们需要提供你的问题和电子邮件,有可能帮你,但是绝对救急,请用BaiduHi为我留言,

       æ­¤å›žå¤é’ˆå¯¹æ‰€æœ‰æ¥è®¿è€…和需求者有效,

       ES:\\7FB6FBECC7BBC8

C语言停车场管理系统

       /*----------------------------------------------------------------

       // Copyright (C) 沈阳工程学院信息安全工作室

       // 版权所有。

       //

       // 文件名:模拟停车场问题.cpp

       // 文件功能描述:模拟停车场问题

       //

       //

       // 创建标识:

       //

       // 修改标识:

       // 修改描述:完成编码

       //----------------------------------------------------------------*/

       //头文件

       #include <iostream>

       #include <malloc.h>

       #include <string>

       #include <windows.h>

       //常量定义

       #define MAX_STOP 4 //定义停车场最大停车数

       #define MAX_PLATE //定义车牌号最大长度

       #define TIME_COUNT "秒" //定义时间单位

       #define TIME_MS_TO_CONUT //定义时间进制,意为由TIME_COUNT到毫秒的进制

       #define UNIT_PRICE //定义单位时间收费标准

       using namespace std; //使用std命名空间

       //数据结构定义

       //定义存储汽车信息的结构体

       typedef struct

       {

        char license_plate[MAX_PLATE]; //汽车牌照号码,定义为一个字符指针类型

        char state; //汽车当前状态,字符p表示停放在停车位上,字符s表示停放在便道上,每辆车的初始状态用字符i来进行表示

        int time; //汽车停入停车场时的时间,用来计时收费

       }CAR;

       //定义模拟停车场的栈结构

       typedef struct

       {

        CAR STOP[MAX_STOP]; //汽车信息的存储空间

        int top; //用来指示栈顶位置的静态指针

       }SeqStack;

       //定义模拟便道的队列结构

       typedef struct node

       {

        CAR WAIT; //汽车信息的存储空间

        struct node *next; //用来指示队列位置的动态指针

       }QNode; //链队列节点的类型

       //定义链队列的收尾指针

       typedef struct

       {

        QNode *front,*rear;

       }LQueue; //将头尾指针封装在一起的链队

       //函数声明

       int Empty_LQueue(LQueue *q); //判队空

       int LeaveCheck(SeqStack parking , char *license_plate); //检查离开的车是否在停车场中

       int QueueLength(LQueue *q); //判队长度

       int Out_LQueue(LQueue *&sidewalk , char *license_plate); //出队操作

       int StackEmpty(SeqStack parking); //判断栈是否为空

       int StackFull(SeqStack parking); //判断栈是否为满

       int StackPop(SeqStack &parking); //出栈操作

       int StackTop(SeqStack parking , char *license_plate , int &time);//取栈顶元素

       void Car_come(SeqStack &parking , LQueue *&sidewalk); //有车到来时的操作

       void Car_leave(SeqStack &parking , LQueue *&sidewalk); //有车离开的操作

       void Display(SeqStack parking); //显示停车场内的所有信息 调试时用

       void InitStack(SeqStack &parking); //初始化栈

       void InitList(LQueue *&sidewalk); //初始化队列

       void In_LQueue(LQueue *&sidewalk , char *license_plate); //进队操作

       void Input_Check(char *license_plate); ////检验输入的车牌是否合法

       void StackPush(SeqStack &parking , char *license_plate , int stop_time);//进栈操作

       void main()

       {

        //定义变量

        SeqStack parking;

        LQueue *sidewalk = NULL;

        char *choice = new char;

        int flag = 1; //定义一个变量 判断是否退出

        //初始化一个为空的停车场

        InitStack(parking);

        //初始化一个为空的便道

        InitList(sidewalk);

        //运行界面及功能选择

        while(flag)

        {

        cout<<"\n\t 停车场模拟管理系统 \n\n";

        cout<<"\t|--------------------------------------------------|\n\n";

        cout<<"\t|本程序为停车场的模拟管理系统,有车到来时请按C键。|\n\n";

        cout<<"\t|然后根据屏幕提示进行相关操作,有车要走时请按l键。|\n\n";

        cout<<"\t|然后根据屏幕提示进行相关操作,查看停车场请按D键。|\n\n";

        cout<<"\t|然后根据屏幕提示进行相关操作,要退出系统请按Q键。|\n\n";

        cout<<"\t|--------------------------------------------------|\n\n";

        cout<<"请选择操作:";

        gets(choice);

        if(1 != strlen(choice))

        {

        cout<<"请正确输入选项!";

        continue;

        }

        else

        {

        switch(*choice)

        {

        case 'c':

        case 'C':

        {

        Car_come(parking,sidewalk);break;

        }

        case 'l':

        case 'L':

        {

        Car_leave(parking,sidewalk);break;

        }

        case 'q':

        case 'Q':

        {

        flag=0;break;

        }

        case 'd':

        case 'D':

        {

        Display(parking);break;

        }

        default:

        cout<<"选择不正确!请重新选择!\n";

        }

        }

        }

       }

       //有车到来时的操作

       void Car_come(SeqStack &parking , LQueue *&sidewalk)

       {

        //定义变量

        char license_plate[MAX_PLATE];

        cout<<"请输入车辆的车牌号码:";

        Input_Check(license_plate);

        //判断停车场是否已满,满则进入便道,不满进入停车场

        if(StackFull(parking))

        {

        In_LQueue(sidewalk , license_plate); //进入便道

        cout<<"停车场已满请在便道等候,您的位置为"<<QueueLength(sidewalk)

        <<endl;

        }

        else

        {

        StackPush(parking , license_plate , GetTickCount()); //进入停车场

        cout<<"请进入停车场中的"<<parking.top+1<<"号停车位\n";

        }

       // Display(parking);

       }

       //有车离开时的操作

       void Car_leave(SeqStack &parking , LQueue *&sidewalk)

       {

        //定义变量

        SeqStack tmpparking; //定义临时停车场

        char leave_license_plate[MAX_PLATE]; //要离开的车牌号

        char license_plate[MAX_PLATE]; //存放从停车场中读出来的车牌信息

        int time;

        InitStack(tmpparking); //初始化临时停车场

        //判断停车场中是否有车

        if(StackEmpty(parking))

        {

        cout<<"当前停车场中没有车\n";

        return; //退出子函数

        }

        cout<<"请输入要离开的车牌照:";

        Input_Check(leave_license_plate);

        cout<<"当前停车场中有"<<parking.top+1<<"辆车\n";

        if(LeaveCheck(parking , leave_license_plate)) //判断车是否在停车场中

        {

        //车在停车场中

        cout<<"您的车在"<<LeaveCheck(parking , leave_license_plate)<<"号车位上\n";

        while(StackTop(parking , license_plate , time)

        && (strcmp(parking.STOP[parking.top].license_plate , leave_license_plate) != 0))

        {

        strcpy(parking.STOP[parking.top].license_plate , license_plate);

        cout<<"牌照为"<<license_plate<<"的车暂时退出停车场"<<parking.top+1<<"号位\n";

        StackPush(tmpparking , license_plate , time); //停车场中的车暂时退出 进入临时停车场

        StackPop(parking); //出栈

        }

        cout<<"牌照为"<<license_plate<<"的车离开停车场"<<parking.top+1<<"号位\n";

        cout<<"您在停车场中停了"<<(GetTickCount()-time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl; //输出所停时间信息

        cout<<"应缴费用为"<<(GetTickCount()-time)/TIME_MS_TO_CONUT*UNIT_PRICE<<"元\n";; //输出费用信息

        StackPop(parking); //出栈

        //将临时停车场中的车停回停车场

        while(StackEmpty(tmpparking) != 1)

        {

        StackTop(tmpparking , license_plate , time);

        StackPush(parking , license_plate , time);

        cout<<"牌照为"<<license_plate<<"的车进入停车场"<<parking.top+1<<"号位\n";

        license_plate[0] = '\0';

        StackPop(tmpparking);

        }

        if(parking.top+1 == MAX_STOP-1) //判断车离开前停车场是否停满

        if(QueueLength(sidewalk)) //如果停满则判断便道上是否有车

        {

        //便道中有车 则从便道中停入停车场

        Out_LQueue(sidewalk , license_plate); //出队

        StackPush(parking , license_plate , GetTickCount()); //入栈

        cout<<"在便道中牌照为"<<license_plate<<"的车进入停车场"<<parking.top+1<<"号位\n";

        }

        }

        else

        //车不在停车场中

        cout<<"您的车不在停车场中!\n";

       }

       //初始化顺序栈

       void InitStack(SeqStack &parking)

       {

        parking.top = -1;

       }

       //判栈空

       int StackEmpty(SeqStack parking)

       {

        if(parking.top == -1)

        return 1;

        else

        return 0;

       }

       //判栈满

       int StackFull(SeqStack parking)

       {

        if(parking.top == MAX_STOP-1)

        return 1;

        else

        return 0;

       }

       //入栈

       void StackPush(SeqStack &parking , char *license_plate , int stop_time)

       {

        parking.top++;

        strcpy(parking.STOP[parking.top].license_plate , license_plate);

        parking.STOP[parking.top].state = 'p';

        parking.STOP[parking.top].time = stop_time;

       }

       //出栈 返回栈顶指针

       int StackPop(SeqStack &parking)

       {

        if(StackEmpty(parking))

        return 0;

        else

        return parking.top--;

       }

       //取栈顶元素

       int StackTop(SeqStack parking , char *license_plate , int &time)

       {

        if(StackEmpty(parking))

        return 0;

        else

        {

        strcpy(license_plate , parking.STOP[parking.top].license_plate);

        time = parking.STOP[parking.top].time;

        return 1;

        }

       }

       //显示所有

       void Display(SeqStack parking)

       {

        if(parking.top == -1)

        printf("停车场为空\n");

        else

        {

        while(parking.top != -1)

        {

        cout<<"车牌号为:"<<parking.STOP[parking.top].license_plate;

        cout<<",停在"<<parking.top + 1 <<"号车位上";

        cout<<",已停"<<(GetTickCount()-parking.STOP[parking.top].time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl;

        parking.top--;

        }

        }

       }

       //初始化队列

       void InitList(LQueue *&sidewalk)

       {

        sidewalk = (LQueue *)malloc(sizeof(LQueue));

        sidewalk->front=sidewalk->rear = NULL;

       }

       //入队

       void In_LQueue(LQueue *&sidewalk,char *license_plate)

       {

        QNode *car_on_sidewalk;

        car_on_sidewalk = (QNode *)malloc(sizeof(QNode)); //为新节点开辟新空间

        strcpy(car_on_sidewalk->WAIT.license_plate , license_plate); //将数据写入节点

        car_on_sidewalk->WAIT.state = 's'; //写入停车信息

        car_on_sidewalk->WAIT.time = GetTickCount(); //写入停车时间

        car_on_sidewalk->next = NULL;

        if(Empty_LQueue(sidewalk)) //队空则创建第一个节点

        sidewalk->front = sidewalk->rear = car_on_sidewalk;

        else

        {

        //队非空插入队尾

        sidewalk->rear->next = car_on_sidewalk;

        sidewalk->rear = car_on_sidewalk;

        }

       }

       //判队空

       int Empty_LQueue(LQueue *q)

       {

        if(q->front == NULL)

        return 1;

        else

        return 0;

       }

       //判队长度 返回队长

       int QueueLength(LQueue *q)

       {

        QNode *p=q->front;

        int i=0;

        while(p != NULL)

        {

        i++;

        p=p->next;

        }

        return i;

       }

       //出队 成功返回1 队空返回0

       int Out_LQueue(LQueue *&sidewalk,char *license_plate)

       {

        QNode *car_on_sidewalk;

        if(Empty_LQueue(sidewalk)) //如果队空返回0

        return 0;

        car_on_sidewalk = sidewalk->front;

        strcpy(license_plate , car_on_sidewalk->WAIT.license_plate);//取出队头元素

        if(sidewalk->front == sidewalk->rear) //队中只有一个元素

        sidewalk->front = sidewalk->rear=NULL; //删除元素

        else

        sidewalk->front = sidewalk->front->next; //队头指针后移

        free(car_on_sidewalk); //释放指针

        return 1;

       }

       //检查离开的车是否在停车场中 返回车在停车场中位置 不在则返回0

       int LeaveCheck(SeqStack parking,char *license_plate)

       {

        int flag = parking.top+1; //定义变量记录当前车在停车场中位置

        if(StackEmpty(parking))

        return 0;

        else

        {

        //查找离开车所在位置

        while(parking.top != -1 && strcmp(parking.STOP[parking.top].license_plate , license_plate) != 0)

        {

        flag--;

        parking.top--;

        }

        return flag;

        }

       }

       //检验输入的车牌是否合法

       void Input_Check(char *license_plate)

       {

        int flag = 1;

        int i;

        string tmpstr;

        while(flag)

        {

        cin>>tmpstr;

        getchar();

        if(tmpstr.length()<MAX_PLATE)

        {

        for(i=0;i<;i++)

        license_plate[i] = tmpstr.c_str()[i];

        flag = 0;

        }

        else

        cout<<"输入有误,请重新输入:";

        }

       }

       ä»¥å‰çš„课设 你看看吧 纯手工的~~

个python3大项目开发源代码(含可执行程序及源码)

       高效学习源代码的关键在于实践操作,通过运行代码、计费计费调试、源码源码绘制类图流程图、停车停车记录问题、计费计费广告公司网站源码模板整理笔记和持续练习,源码源码android充值源码可以深入理解代码逻辑与运行机制。停车停车步骤如下:

       1. 运行程序,计费计费观察其表现,源码源码初步感受代码功能与效果。停车停车

       2. 调试源码,计费计费使用断点,源码源码跟踪执行流程,停车停车推理游戏源码注意函数调用栈。计费计费

       3. 绘制类图和流程图,源码源码梳理重要类及其关系。

       4. 记录不理解的财神精品源码内容或问题,逐个解决。

       5. 写文章或笔记,系统性地梳理学习成果。

       6. 重复上述步骤,涂鸦跳跳源码持续深入学习。

       本文提供了个Python3项目开发的源代码资源,含可执行程序和源码,适合不同层次学习者。包括:

       1. AI智能联系人管理系统

       2. Excel数据分析师

       3. Word助手

       4. 火车票分析助手

       5. 甜橙音乐网服务端代码

       6. 微信机器人功能

       7. 智能停车场车牌识别计费系统

       8. 毕业生信息审核系统

       9. 工资计算系统

       . 轨道交通客流预测系统

       . 驾驶员疲劳检测系统

       . 进销存管理系统

       . 股票系统

       . AI对话系统

       . 脉象识别系统

       . 商品销售数据分析系统

       . 天然气产气量预测系统

       . 高频基金交易系统

       . 资产管理系统

       . 动物机器人桌面控制系统

       这些资源适合用于项目实践、毕业设计或项目答辩,可提升编程能力与项目经验。请下载并实践这些代码,探索并改进它们,以满足特定需求或扩展功能。

出租车计价器

       ä¸€ã€é¢˜ç›®ï¼šA题 设计并制作一个用于出租车的计费系统。

       äºŒã€è®¾è®¡è¦æ±‚

       1、基本要求:

       ï¼ˆ1)制作一个模拟车轮用直流电动机(或步进电机)驱动,现场模拟以下运行情况的收费情况:

       u 假设车轮的周长为一米。

       u 起步价为三公里五元,白天每公里三元,晚上每公里四元。

       u 运行五公里之后,停三分钟,再运行五公里之后乘客下车,由于演示的时间的需要,途中停车超过一分钟开始收费,超过的时间每分钟一元。

       ï¼ˆ2)能够手动修改单价。

       ï¼ˆ3)具有数据的复位功能。

       ï¼ˆ5)数据输出

       u 单价输出 至少2位

       u 路程输出 至少2位

       u 总金额输出 至少3位

       2、发挥部分:

       ï¼ˆ1)能够在掉电的情况下存储单价等数据。

       ï¼ˆ2)能够显示、调节当前的系统时间,并根据当前的系统时间进行计费(6时至时为白天,时至第二天6时为晚上)。

       ï¼ˆ3)有语音报价功能。

       1.2 方案比较与论证

       1.2.1控制器模块

       æ–¹æ¡ˆä¸€ï¼šé‡‡ç”¨å¯ç¼–程逻辑器件CPLD 作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑我们放弃了此方案。

       æ–¹æ¡ˆäºŒï¼šé‡‡ç”¨å‡Œé˜³å…¬å¸çš„位单片机,它是位控制器,具有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点。处理速度高,尤其适用于语音处理和识别等领域,采用此单片机能够很方便的实现发挥部分的语音报价功能,但此单片机较难买到,而且价格稍贵,故放弃了此方案。

       æ–¹æ¡ˆä¸‰ï¼šé‡‡ç”¨Atmel公司的ATS单片机作为主控制器,此单片机是内核的CMOS 8位单片机,片内含8k空间的可反复擦些次的Flash读写存储器,具有 bytes的随机存取数据存储器(RAM),个IO口,你知道厂房装修合同样板。2个位可编程定时计数器。其价格低廉,非常适合用于小系统的开发,开采用ISP在线编程,程序的下载和修改也很方便。题目所要求的系统对控制器的要求不高,我们综合多方面考虑选用了此方案。

       1.2.2车轮转速探测模块

       æ–¹æ¡ˆä¸€ï¼šç”¨å…‰æ•ç”µé˜»ç»„成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到车轮码盘的白色部分时,光线发射强烈,光线照射到车轮码盘的黑色部分时,光线发射较弱。因此光敏电阻在白色部分和黑色部分上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。此方案易受外界光线的干扰。

       æ–¹æ¡ˆäºŒï¼šé‡‡ç”¨éœå°”传感器最为探测器件,霍尔传感器的两部分分别安装在车轮和固定电路板上,根据车轮转动时将变化的磁场强度转换为脉冲电信号,此方案能够使对车轮计数精确,工作稳定,但成本较高。

       æ–¹æ¡ˆä¸‰ï¼šé‡‡ç”¨çº¢å¤–对管,当红外发射管发射出的红外线照到码盘的白色部分和黑色部分时,其反射的红外线强度不同,通过红外接收管接收后经电压比较器LM比较后即可输出高低电平。此方案成本低,容易实现,且灵敏度较高。

       æ ¹æ®æœ¬ç³»ç»Ÿçš„设计要求,对车轮转速的探测受外界的干扰较小,而采用采用红外对管工作电路简单,调试方便,所以我们选择此方案。

       1.2.3时钟控制模块

       æ–¹æ¡ˆä¸€ï¼šé‡‡ç”¨.MHz的晶振产生震荡后经多个LS进行次2分频,产生精确的秒信号,自行搭建时间电路。此方案具有较好的原创性,但电路搭建起来较为复杂,工作不够稳定,也不方便调节。

       æ–¹æ¡ˆäºŒï¼šç›´æŽ¥é‡‡ç”¨å•ç‰‡æœºå†…部的时钟信号。这样能够大大简化硬件的设计,但断电后不能工作,而且大量占用单片机有限的内存资源。

       æ–¹æ¡ˆä¸‰ï¼šé‡‡ç”¨DS专用时钟芯片。DS是功能强大的实时时钟芯片,内置锂电池,内置晶振。提供二进制数和BCD码两种数据表示方式。可切换小时制和小时制时间表示。具有闹钟功能。可编程方波输出。提供字节非易失存储空间,用于断电保存数据。

       ç”±äºŽæœ¬ç³»ç»Ÿçš„很多功能都是基于时间的基础上实现的,因此对时钟的要求较高,故我们选择方案三。

       1.2.4显示模块

       æ–¹æ¡ˆä¸€ï¼šç”¨æ•°ç ç®¡è¿›è¡Œæ˜¾ç¤ºã€‚数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用,但显示的内容仅仅局限于数字,人机界面不够友好因此我们放弃了此方案。

       æ–¹æ¡ˆäºŒï¼šç”¨LCD液晶进行显示。LCD由于其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速而得到了广泛的应用。由于本此系统需要显示的内容较多,为达到较好的人机交互界面,我们选择了此方案。

       1.3最终选择方案

       u 采用ATS单片机作为主控制器。

       u 采用红外对管+LM作为车轮转速探测模块。

       u 采用DS作为实时时钟控制芯片。

       u 采用LCD液晶作为显示模块。

       u 采用普通的直流电机和自制的车轮及码盘作为模拟车轮。

       1.4系统结构图

       æŒ‰é”®ï¼š

       çº¢å¤–感应模块

       MCU

       ATS

       DS系统时间,断电保存数据

       LCD液晶显示

       æ¨¡æ‹Ÿè½¦è½®

       å›¾1 系统结构框架

       ç¬¬äºŒç« :各部分电路原理与设计

       2.1单片机主控模块的设计

       Atmel公司的ATS是内核的单片机。不用烧写器而只用串口或者并口就可以往单片机中下载程序。

       æˆ‘们所设计的单片机最小系统板采用的双龙公司的并口下载标准,且在板上留有下载线插座,这样可以非常方便的实现通过PC机的并口往单片机中下载程序。同时将稳压电源部分也附在其上,经过稳压后的+5V电源为除电机外的其他系统模块提供工作电源。

       å•ç‰‡æœºæŽ§åˆ¶æ¨¡å—的示意图如图9所示:

       å›¾2 单片机主控模块

       å•ç‰‡æœºçš„I/O口分配如下:

       P0,P2.5~P2.7 LCD模块

       P1,P2.0~P2.3,P3.3 实时时钟模块

       P3.0~P3.1,P3.5~P3.7 按键开关

       P3.2 红外探测模块

       2.2红外探测模块的设计

       æˆ‘们通过将红外接收二极管的不同压降与基准电压送入电压比较器LM进行比较,输出对应的高低电平信号,送到单片机进行处理。其电路原理图如下:

       å›¾3 红外探测模块

       åœ¨å›¾3中,可调电阻RW可以调节比较器的门限电压,经示波器观察,输出波形相当规则,可以直接够单片机查询使用。

       ç”±äºŽæˆ‘们的码盘采用二分法进行设计,黑白两种颜色各占原周的一半,因此单片机每接收到一个高电平信号则模拟车轮转了一圈,通过计算每秒钟单片机接收到的高电平信号个数即可方便的计算出车轮的速度和所走的里程。

       2.3模拟车轮的设计

       å°è½¦çš„速度和里程的测量是通过光电对管检测码盘实现的。我们采用普通的直流电机和玩具车的车轮,自制码盘,做成模拟车轮,供测量用。

       è€ƒè™‘到电机运行时对电压的干扰,电机的电源直接由输入的未经过稳压的电源提供,试用期解除劳动合同。并设立独立的开关,有人工控制,这样更符合实际的工作情况。

       ä¸ºé˜²æ­¢å…‰ç”µç®¡äº§ç”Ÿè¯¯åŠ¨ä½œï¼Œæˆ‘们将光电码盘分为2份黑白相间的圆盘,每份各占圆周的一半,如图4:

       å›¾4 模拟车轮码盘

       å°†å…¶ç´§è´´åœ¨è½¦è½®çš„内侧。在封装盒右侧打一个方孔,红外对管通过方孔对光电码盘进行检测就可以得到车轮转过的圈数。从而计算出小车前进的路程。

       æœ¬ç³»ç»Ÿå‡è®¾è½¦è½®çš„周长为1米,假设单片机每秒检测到黑白信号的变化为n,共走了k秒则小车走过的路程为S=nk米。

       2.4实时时钟控制模块的设计

       æˆ‘们采用的DS功能强大,内置锂电池,内置晶振,可以作为实时电子钟,为整个系统提供时钟,很好地解决了题目发挥部分“能够显示、调节当前的系统时间,并根据当前的系统时间进行计费(6时至时为白天,时至第二天6时为晚上)”的要求。同时利用其闹钟功能对探测信号进行采样,精确的计算出车速。由于芯片还提供字节非易失存储空间,因此我们将题目要求的各种价格的设置方便的保存在里面,达到断电保存数据的功能。

       å›¾5 时钟模块电路图

       2.5人机交互界面的设计

       ä¸ºä½¿ç³»ç»Ÿæœ‰æ›´è‰¯å¥½çš„人机交互界面,我们将LCD液晶显示模块,操作按键,系统复位开关和车轮控制开关集中于封装盒的面板上,方便用户操作,如下图:

       å›¾6 人机交互界面

       2.6系统总体电路图

       å›¾7 系统总电路图

       å›¾8 系统装箱后的内部实物图

       ç¬¬ä¸‰ç« ï¼šç³»ç»Ÿç¨‹åºè®¾è®¡

       3.1系统程序所实现的功能

       u 实时显示总金额,总里程,车速,已走过时间,系统时间。

       u 可在线修改系统时间。

       u 可修改起步价及起步距离。

       u 可修改每超过一公里加收费用。

       u 可修改途中停车超过时间开始收费的时间及单价。

       3.2程序任务分配

       è¡¨1 程序任务分配

       å¤–部中断0(来自车轮)

       å¤–部中断1(来自时钟)

       ä¸»å‡½æ•°

       æ›´æ–°è·¯ç¨‹ï¼ŒåŠ æ€»ä»·ï¼Œå¤ä½è®¡æ—¶å™¨ï¼Œå¦‚果显示屏使用权在INT0,就更新显示。

       æ˜¾ç¤ºå±ä½¿ç”¨æƒç”¨screen变量表示。

       è®¡ç®—速度,计算行车时间,计时并在停车超时后加钱。根据显示屏使用权判断是否更新显示。

       æ ¹æ®real_time变量的值决定是否把系统时间更新到屏幕上。

       è¯»å–按键。决定控制逻辑。

       3.3主程序流程图

       å¼€å§‹

       åˆå§‹åŒ–LCD、实时时钟

       ä»Žå­˜å‚¨å™¨è¯»å‡ºå•ä»·ç­‰æ•°æ®

       æ˜¾ç¤ºlogo

       ä»»æ„é”®

       ç©ºé—²çŠ¶æ€ï¼Œæ˜¾ç¤ºç³»ç»Ÿæ—¶é—´

       æœ‰é”®æŒ‰ä¸‹

       ç©ºé—²çŠ¶æ€

       è®¡è´¹çŠ¶æ€

       è®¾ç½®é”®?

       N

       Y

       è®¾ç½®

       ç­‰å¾…按键

       æ˜¯2键?

       N

       Y

       åˆå§‹åŒ–计费屏幕,进入计费状态

       æ˜¯3键

       Y

       æŸ¥çœ‹ç³»ç»Ÿæ—¶é—´ï¼Œå»¶æ—¶4秒

       N

       æ˜¯4键?

       Y

       åœæ­¢è®¡è´¹ï¼Œè¿›å…¥ç©ºé—²çŠ¶æ€

       N

       æŒ‰ä¸‹2键复位

       3.4各数据在中存储地址

       è¡¨2 各数据在中存储地址

       åœ°å€

       å˜é‡

       åŠŸèƒ½

       0x0e

       d

       //起步价 d 公里 p 角

       0x0f

       p

       0x

       day_price

       //白天每公里价格,单位:角

       0x

       night_price

       //夜晚每公里价格,单位:角

       0x

       x

       //中途停车超过y分钟之后按x角每分钟计价

       0x

       y

       3.5中断服务0程序流程图

       è§¦å‘中断

       è·¯ç¨‹åŠ ä¸€ç±³

       å…è®¸ä½¿ç”¨æ˜¾ç¤ºå±?

       è®¡æ—¶å™¨å¤ä½

       è·¯ç¨‹ï¼ï¼èµ·æ­¥è·¯ç¨‹ï¼Ÿ

       è·¯ç¨‹>起步路程?

       Y

       N

       Y

       æ›´æ–°è·¯ç¨‹æ˜¾ç¤º

       å‘总金额加上公里价

       N

       æ›´æ–°æ€»é‡‘额显示

       Y

       N

       Y

       å…¬é‡Œè®¡ç¨‹å™¨å¤ä½

       ä¸­æ–­2服务程序的timer_state和timer_count变量

       counter_变量

       å…¬é‡Œè®¡ç¨‹å™¨åŠ 1

       å…¬é‡Œè®¡ç¨‹å™¨ï¼ï¼?

       ç»“束

       N

       Y

       å‘总金额加上公里价

       å…è®¸ä½¿ç”¨æ˜¾ç¤ºå±?

       æ›´æ–°æ€»é‡‘额显示

       Y

       N

       å…¬é‡Œè®¡ç¨‹å™¨å¤ä½

       0号中断服务程序:

       è½¦è½®è½¬åŠ¨ä¸€åœˆè§¦å‘一次

       3.6 中断服务2程序流程图

       è§¦å‘中断

       ç³»ç»Ÿåœ¨è®¡è´¹çŠ¶æ€ï¼Ÿ

       Y

       N

       éœ€è¦åŒæ­¥æ—¶é—´ï¼Ÿ

       Y

       N

       ç»“束

       é€Ÿåº¦=现在的路程—一秒之前的路程

       è¡Œè½¦æ—¶é—´åŠ ä¸€ç§’

       è®¡æ—¶å™¨åŠ ä¸€ç§’

       è®¡æ—¶ç­‰äºŽæœ€å¤§åœè½¦æ—¶é—´ï¼Ÿ

       N

       æ€»é‡‘额加每分钟价

       è¿›å…¥åœè½¦è¶…时状态

       Y

       åœè½¦è¶…时状态?

       Y

       æ¯åˆ†é’ŸåŠ é’±

       N

       å°†ç³»ç»Ÿæ—¶é—´å’Œæ—¥æœŸåŒæ­¥åˆ°å±å¹•ä¸Š

       2号中断服务程序:

       æ¯ç§’钟触发一次

       ç¬¬å››ç« :系统调试结果与分析

       4.1调试方法与仪器

       è¡¨3 测试仪器设备清单

       ä»ªå™¨åç§°

       åž‹å·

       ç”¨é€”

       æ•°é‡

       PC机

       è”想

       è°ƒè¯•åŠä¸‹è½½ç¨‹åº

       1

       æ•°å­—万用表

       UNI-TA

       æµ‹é‡å„电路工作情况

       1

       ç§’表

       è®°å½•æ—¶é—´

       1

       ç›´æµç¨³åŽ‹ç”µæº

       ALKIMIA

       æä¾›ç”µæº

       1

       4.2调试步骤与测试数据

       4.2.1系统时间与秒表实际时间测量

       å¼€æœºåŽæŒ‰â€œå¼€å§‹â€é”®è¿›å…¥è®¡æ—¶å·¥ä½œçŠ¶æ€ï¼ŒåŒæ—¶å¯åŠ¨ç§’表进行及时对比,分别对工作时间为1分钟,2分钟,3分钟,4分钟,5分钟进行测量比较,结果如表2

       è¡¨4 系统时间测试比较

       æµ‹è¯•æ—¶é—´

       ç³»ç»Ÿæ˜¾ç¤ºæ—¶é—´

       ç§’表测量时间

       s

       s

       .s

       s

       s

       .s

       s

       s

       .s

       s

       s

       .s

       s

       s

       .s

       4.2..2车轮转速测试

       æœ¬ç³»ç»Ÿçš„设计对探测信号的下降沿进行触发,因此当红外对管探测到的码盘从白色转为黑色时,单片机中断触发,计数器加一。

       å¯åŠ¨è®¡è´¹ç³»ç»Ÿï¼ŒåŒæ—¶æ‰‹å·¥è½¬åŠ¨è½¦è½®ä¸€å‘¨ï¼Œæ˜¾ç¤ºå±ä¸Šè·¯ç¨‹æ˜¾ç¤º1m,在转动车轮几圈,LCD的显示数值均与实际相符。

       4.2.3计费系统测试

       è¡¨5 不同情况下的计费结果测试

       è®¡è´¹æ—¶é—´æ®µ

       è¡Œé©¶é‡Œç¨‹

       è¡Œé©¶æ—¶é—´

       ä¸­é€”停车时间

       è®¡è´¹ä»·æ ¼

       ç™½å¤©

       m

       s

       0

       5.0元

       ç™½å¤©

       m

       s

       0

       .0元

       æ™šä¸Š

       m

       s

       0

       .0元

       æ™šä¸Š

       m

       s

       s

       .0元

       4.2.4数据设定及断电储存功能

       åœ¨å¾…机状态下按“设置”键,分别修改起步价4km内8元,白天每公里5元,晚上每公里7元,修改系统时间,然后保存,关机,断开电源,等待5分钟之后重新开机,发现数据为修改后的数据,即数据的设定及断电储存功能有效。

       4.3测试结果分析

       é€šè¿‡è°ƒè¯•å’Œç³»ç»Ÿæµ‹è¯•ï¼Œå‘现系统能很好地实现预期的目的,实现了除语音功能外的其他所有功能,工作性能稳定,计费精确。系统时间实时运行,准确,里程的显示误差在1m以内。很好的完成了赛题的要求。

       ç¬¬äº”章:系统性能总结及特点

       5.1 实现基本要求功能

       è¡¨4 基本功能的实现情况

       åŸºæœ¬è¦æ±‚功能

       åŠŸèƒ½å®žçŽ°æƒ…况

       åŸºæœ¬è¦æ±‚第(1)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(2)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(3)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(4)项

       å®žçŽ°

       åŸºæœ¬è¦æ±‚第(5)项

       å®žçŽ°

       5.2 实现发挥部分功能

       è¡¨5 发挥功能的实现情况

       å‘挥要求功能

       åŠŸèƒ½å®žçŽ°æƒ…况

       å‘挥要求第(1)项

       å®žçŽ°

       å‘挥要求第(2)项

       å®žçŽ°

       å‘挥要求第(3)项

       æœªå®žçŽ°

       5.3 增加的其他功能

       u 与计费系统相关的所有参数用户均可修改并储存。

       u 兼有万年历和数字电子钟功能。

       u 一体化人机交互界面控制面板,硬件系装箱,提高机械强度,安全性能和美观度。

       ç¬¬å…­ç« ï¼šé™„录

       é™„录一 系统程序源代码

       /