加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

基于51单片机出租车计价器设计的C语言程序计费器

(2018-12-01 08:53:26)
标签:

出租车计价器

出租车计费器

设计

分类: 单片机
        这是一款51单片机出租车计价器设计的C语言程序,来源于网络,放在这现供需要者参考。

计价器设计的C语言程序(程序贴在这里可能不全),完整的程序请自己下载https://pan.baidu.com/s/1nx6w-8FE4kE1Q0OlB8htUA

#include                  //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

uchar d_miao,d_fen = 0,d_shi;
uchar flag_bai_hei;         //白天的晚上的标志位
uchar value;
uint bai_3l_price = 60;        //白天3千米内的单价       6元
uint bai_3w_price = 18;        //白天3千米外的单价/千米         1.8元
uint bai_wait_price = 5;       //白天等待时的单价/分钟         0.5元

uint wan_3l_price = 70;        //晚上3千米内的单价/千米         7元
uint wan_3w_price = 22;        //晚上3千米外的单价/千米         2.2元
uint wan_wait_price = 10;       //晚上等待时的单价/分钟         1元

uint distance = 0;    //行使的距离
uint zong_jia;        //总的价
bit flag_200ms = 0;
bit flag_1s ;
bit flag_time_en = 0;

uchar flag_time_xs = 1;    //显示时间和等待时间切换

sbit beep = P3^7;   //蜂鸣器IO口定义

uchar i;

sbit clk = P1^3;          //ds1302时钟线定义
sbit io =  P1^4;          //数据线
sbit rst = P1^5;          //复位线
                                                //秒  分   时   日   月  年   星期         
uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //写地址
uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //读地址
uchar code init_ds[]  ={0x55,0x17,0x15,0x01,0x05,0x15,0x13};   
uchar idata miao,fen,shi,ri,yue,week,nian;

uchar t1_num,t2_num;        //计时间中断的次数
unsigned long  speed1,juli,time2;
float f_hz,speed_km,speed_m;
uchar TH11,TL11;
uchar flag_en;   //开始计算速度使能
uchar flag_stop_en;   //要确定车子是否停下了

uint juli_s;             //每秒走的距离
uint juli_z;         //总路程
float zhijing = 0.75;  //直径 0.55M
bit flag_1s = 1;             //1s
uchar menu_1;        //菜单设置变量
uchar menu_2;        //菜单设置变量
uint shudu;   //定义速度的变量
uint bj_shudu = 80;         //报警速度

uchar flag_ds_en;

long zong_lc;        //总量程


#include "lcd1602.h"

void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i
                for(j=0;j<120;j++);
}

#include "iic.h"

void write_iic_data()
{
        write_24c02(0,flag_bai_hei);
        write_24c02(1,bai_3l_price % 256);   //保存数据
        write_24c02(2,bai_3l_price / 256);   //保存数据
        write_24c02(3,bai_3w_price % 256);   //保存数据                 
        write_24c02(4,bai_3w_price / 256);   //保存数据                
        write_24c02(5,bai_wait_price % 256);   //保存数据               
        write_24c02(6,bai_wait_price / 256);   //保存数据             
        write_24c02(7,wan_3l_price % 256);   //保存数据
        write_24c02(8,wan_3l_price / 256);   //保存数据
        write_24c02(9,wan_3w_price % 256);   //保存数据                 
        write_24c02(10,wan_3w_price / 256);   //保存数据                
        write_24c02(11,wan_wait_price % 256);   //保存数据               
        write_24c02(12,wan_wait_price / 256);   //保存数据             
}

           
void read_iic_data()
      
        flag_bai_hei = read_24c02(0);        
        bai_3l_price = read_24c02(2);
        bai_3l_price = bai_3l_price * 256 + read_24c02(1);
        bai_3w_price = read_24c02(4);
        bai_3w_price = bai_3w_price * 256 + read_24c02(3);
        bai_wait_price = read_24c02(6);
        bai_wait_price = bai_wait_price * 256 + read_24c02(5);

        wan_3l_price = read_24c02(8);
        wan_3l_price = wan_3l_price * 256 + read_24c02(7);
        wan_3w_price = read_24c02(10);
        wan_3w_price = wan_3w_price * 256 + read_24c02(9);
        wan_wait_price = read_24c02(12);
        wan_wait_price = wan_wait_price * 256 + read_24c02(11);

}
uchar key_can;         //按键值

void key()         //独立按键程序
{
        static uchar key_new;
        key_can = 20;                   //按键值还原
        P3 |= 0x78;                     //对应的按键IO口输出为1
        if((P3 & 0x78) != 0x78)                //按键按下
        {
                delay_1ms(1);                     //按键消抖动
                if(((P3 & 0x78) != 0x78) && (key_new == 1))
                                                              //确认是按键按下
                        key_new = 0;
                        switch(P3 & 0x78)
                        {
                                case 0x70:  key_can = 1;  break;         //得到按键值
                                case 0x68:  key_can = 2;  break;         //得到按键值
                                case 0x58:  key_can = 3;  break;         //得到按键值
                                case 0x38:  key_can = 4;  break;         //得到按键值
                        }
                        beep = 0;
                        delay_1ms(50);
                        beep = 1;                
                      
        }
        else 
                key_new = 1;        
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
完整程序请自行到百度网盘下载:完整的程序请自己下载https://pan.baidu.com/s/1nx6w-8FE4kE1Q0OlB8htUA


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有