附录1 程序清单 #include
//调用单片机头文件
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535
uchar miao,fen = 0,shi;
uchar flag_bai_hei; //白天的晚上的标志位 uchar value;
uint bai_3l_price = 60; //白天3千米内的单价 6元 uint bai_3w_price = 18; //白天3千米外的单价/千米
uint wan_3l_price = 70; //晚上3千米内的单价/千米 uint wan_3w_price = 22; //晚上3千米外的单价/千米
uint distance = 0; //行使的距离 uint zong_jia; //总的价 bit flag_300ms = 0; bit flag_1s ;
bit flag_time_en = 0;
#include \
/***********************1ms延时函数*****************************/ void delay_1ms(uint q) { }
#include \
20
1.8元
uint bai_wait_price = 5; //白天等待时的单价/分钟 0.5元
7元 2.2元
uint wan_wait_price = 10; //晚上等待时的单价/分钟 1元
uint i,j; for(i=0;i for(j=0;j<120;j++); void write_iic_data() { } /****************自动初始化保存的数据*******************/ void zidong_chushifa_iic() { } /****************读出来保存的数据**********************/ void read_iic_data() { value = read_24c02(200); value = read_24c02(200); if(value != 0x91) { } delay_1ms(300); value = 0x91; write_iic_data(); write_24c02(200,value); //保存数据 //新的单片机初始单片机内问EEPOM 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); //保存数据 21 } 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); /****************独立按键处理函数************************/ #define key_io P2 uchar key_can; void key() { static uchar key_new = 0,key_old = 0,key_value = 0; key_io |= 0x3f; if(key_new == 0) { if((key_io & 0x3f) == 0x3f) { key_value ++; key_value = 0; //按键松开松手检测 else if(key_value >= 5) //按键松开 22 } } } key_value = 0; key_new = 1; //按键松开后进入等待按键状态 else { } key_can = 20; if((key_new == 0) && (key_old == 1)) { switch(key_io & 0x3f) { } write_sfm2(2,0,key_can); //按键按下显示按键值 case 0x3e: key_can = 1; break; //得到按键值 case 0x3d: key_can = 2; break; //得到按键值 case 0x3b: key_can = 3; break; //得到按键值 case 0x37: key_can = 4; break; //得到按键值 case 0x1f: key_can = 5; break; //得到按键值 case 0x2f: key_can = 6; break; //得到按键值 if((key_io & 0x3f) != 0x3f) //按键按下 { } key_value = 0; key_new = 0; //按键松开后进入等待松开按键状态 key_value ++; key_value =0; //按键按下消抖 else if(key_value >= 5) // } key_old = key_new; #include \ 23 /*********************对应菜单内的处理函数******************/ void menu_dis() { if(menu_1 == 0) { if(key_can == 6) { } if(key_can == 5) { } if(key_can == 2) { } if(flag_300ms == 1) { flag_300ms = 0; if(distance <= 30)//3公里内的价格 { if(flag_bai_hei == 0) { if(fen <= 3) zong_jia = bai_3l_price; flag_time_en = ~flag_time_en; flag_time_en = 0; shi = 0; fen = 0; miao = 0; zong_jia = 0; distance = 0; //清零 从新计价 distance ++; write_sfm4(1,0,distance); 24