资源目录
压缩包内文档预览:
编号:34123464
类型:共享资源
大小:36.24MB
格式:ZIP
上传时间:2019-12-25
上传人:遗****
认证信息
个人认证
刘**(实名认证)
湖北
IP属地:湖北
25
积分
- 关 键 词:
-
基于
51
单片机
出租车
计价器
设计
- 资源描述:
-
基于51单片机的出租车计价器设计,基于,51,单片机,出租车,计价器,设计
- 内容简介:
-
主程序函数:/出租车计价器/宏定义#define uchar unsigned char#define uint unsigned int /头函数声明#include #include Lcd.h#include Data.h#include DS1302.h#include AT24C02.h/键盘定义sbit K1=P31;sbit K2=P33;sbit K3=P35;sbit K4=P37;sbit K5=P30;sbit K6=P32;sbit K7=P34;sbit K8=P36;sbit FDJ=P20;/模式0时钟 1时钟调整uchar Mode=0;/时钟屏幕调整uchar Wei=0;uchar SS=0;/价格调整uchar JGWei=0;/计价器参数uint Day=0;uint Night=0;uint DanJia=0;uint ZJ=0;uint GL=0;uint Time=0;/白天/晚上uchar DN=0;/公里/时间uchar GT=0;/时间记录uchar TG=0;uchar TT=0;/初始化函数void InitTimer0();/写初值void SETS();/读初值void READS();/主函数void main()/初始化Ds1302_Init();Init_LCD();initeeprom();/SETS();/读取初始参数READS();/定时器初始化InitTimer0();/循环while(1)/时钟模式if(Mode=0)/读时间if(Wei=0)Ds1302_Read_Time();/显示时间display_NYR(time_buf1,Wei,0);else if(Mode=1)/显示计价器信息display_S(Day,Night,DanJia,ZJ,GL,Time,GT,DN);/时间调整if(K8=0)delay(10);/调时if(Mode=0)Wei+;if(Wei=1)SS=1;/闪烁display_NYR(time_buf1,Wei,SS);if(Wei=7)Wei=0;/保存时间Ds1302_Write_Time();Init_LCD();/调节白天/黑夜起价else if(Mode=1)if(DN=0)DN=1;elseDN=0;while(K8=0);/价格调整if(K7=0)delay(10);if(Mode=1)JGWei+;if(JGWei=1)Mode=2;/显示计价器价格Init_LCD_JGTZ();display_D(Day,Night,DanJia,JGWei);else if(Mode=2)JGWei+;display_D(Day,Night,DanJia,JGWei);if(JGWei=4)Mode=1;JGWei=0;/参数初始化/保存SETS();/读初值READS();TG=0;TT=0;ZJ=0;GL=0;Time=0;/白天/晚上DN=0;/公里/时间GT=0;/开启定时器TR0=1;/显示计价器Init_LCD_JJQ();while(K7=0);/+if(K6=0)delay(10);/调时if(Mode=0)/年if(Wei=1)time_buf11+;if(time_buf11=100)time_buf11=0;/月else if(Wei=2)time_buf12+;if(time_buf12=13)time_buf12=1;/日else if(Wei=3)time_buf13+;if(time_buf13=YDay(time_buf11,time_buf12)+1)time_buf13=1;/时else if(Wei=4)time_buf14+;if(time_buf14=24)time_buf14=0;/分else if(Wei=5)time_buf15+;if(time_buf15=59)time_buf15=0;/秒else if(Wei=6)time_buf16+;if(time_buf16=59)time_buf16=0;/显示if(Wei!=0)display_NYR(time_buf1,Wei,SS);/调价else if(Mode=2)/单价if(JGWei=1)DanJia+;if(DanJia999)DanJia=1;/夜间else if(JGWei=2)Night+;if(Night999)Night=1;/白天else if(JGWei=3)Day+;if(Day999)Day=1;display_D(Day,Night,DanJia,JGWei);while(K6=0);/-if(K5=0)delay(10);/调时if(Mode=0)/年if(Wei=1)time_buf11-;if(time_buf11=0xff)time_buf11=99;/月else if(Wei=2)time_buf12-;if(time_buf12=0)time_buf12=12;/日else if(Wei=3)time_buf13-;if(time_buf13=0)time_buf13=YDay(time_buf11,time_buf12);/时else if(Wei=4)time_buf14-;if(time_buf14=0xff)time_buf14=23;/分else if(Wei=5)time_buf15-;if(time_buf15=0xff)time_buf15=59;/秒else if(Wei=6)time_buf16-;if(time_buf16=0xff)time_buf16=59;/显示if(Wei!=0)display_NYR(time_buf1,Wei,SS);/调价else if(Mode=2)/单价if(JGWei=1)DanJia-;if(DanJia=0)DanJia=999;/夜间else if(JGWei=2)Night-;if(Night=0)Night=999;/白天else if(JGWei=3)Day-;if(Day=0)Day=999;display_D(Day,Night,DanJia,JGWei);while(K5=0);/退出if(K4=0)delay(10);/计价器模式if(Mode=1)Mode=0;FDJ=1;TG=0;TT=0;ZJ=0;GL=0;Time=0;/白天/晚上DN=0;/公里/时间GT=0;/开启定时器TR0=0;/显示计价器Init_LCD();while(K4=0);/暂停if(K2=0)delay(10);/计价器模式if(Mode=1)/公里模式if(GT=0)GT=1;elseGT=0;while(K2=0);/清零if(K3=0)delay(10);/计价器模式if(Mode=1)TG=0;TT=0;ZJ=0;GL=0;Time=0;while(K3=0);/开启计价器模式if(K1=0)delay(10);/为时钟模式if(Mode=0)Mode=1;/参数初始化/读初值READS();TG=0;TT=0;ZJ=0;GL=0;Time=0;/白天/晚上DN=0;/公里/时间GT=0;/开启定时器TR0=1;/显示计价器Init_LCD_JJQ();while(K1=0);/初始化函数void InitTimer0(void) TMOD = 0x01; TH0 = 0x0D8; TL0 = 0x0F0; EA = 1; ET0 = 1; TR0 = 0;/暂时不开定时器FDJ=1;/定时器0中断10msvoid Timer0Interrupt(void) interrupt 1 TH0 = 0x0D8; TL0 = 0x0F0; /赋初值 /公里模式 if(GT=0) /如果是公里模式 FDJ=0; /电机工作TG+; /if(TG100)/如果是大于100/if(TG10)TG=0;/清零GL+;/公里+ /时间模式 else /如果是时间模式 FDJ=0; /电机工作TT+; /tt+if(TT100)/如果大于100/if(TT10)TT=0; /归零Time+; /时间+ /计算钱数 /公里数小于5 if(GL600)ZJ=Day+(Time-540)/60*DanJia/10;elseZJ=Day;elseif(Time600)ZJ=Night+(Time-540)/60*DanJia/10;elseZJ=Night; else if(DN=0)if(Time600)ZJ=Day+(GL-40)/10*DanJia+(Time-540)/60*DanJia/10;elseZJ=Day+(GL-40)/10*DanJia;elseif(Time600)ZJ=Night+(GL-40)/10*DanJia+(Time-540)/60*DanJia/10;elseZJ=Night+(GL-40)/10*DanJia; /读初值void READS()uchar SH=0,SL=0;uint temp=0;delay(10);SL=read_add(0x01);delay(10);SH=read_add(0x02);temp=SH;temp=temp8;temp=temp+SL;Day=temp;delay(10);SL=read_add(0x03);delay(10);SH=read_add(0x04);temp=SH;temp=temp8;temp=temp+SL;Night=temp;delay(10);SL=read_add(0x05);delay(10);SH=read_add(0x06);temp=SH;temp=temp8;delay(10);write_add(0x01,SL);delay(10);write_add(0x02,SH);temp=Night;SL=temp&0x00ff;SH=temp8;delay(10);write_add(0x03,SL);delay(10);write_add(0x04,SH);temp=DanJia;SL=temp&0x00ff;SH=temp8;delay(10);write_add(0x05,SL);delay(10);write_add(0x06,SH);/*主程序函数到此为止*/LCD1602.H文件:/此函数提供与屏幕显示相关的函数及声明/管脚定义sbit rs=P14;sbit lcden=P10;/屏幕初始化/时间初始化uchar code table0= / / ;uchar code table1= : : ;/计价器状态uchar code table4=D . 0Y P . 0Y;uchar code table5= . 0Y . km;/价格调整uchar code table6= P . 0Y ;uchar code table7=N . 0Y D . 0Y;/等待函数void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/LCD写命令void write_com(uchar com)rs=0;lcden=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;/LCD写数据void write_date(uchar date)rs=1;lcden=0;P0=date;delay(1);lcden=1;delay(1);lcden=0;/初始化okvoid Init_LCD()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table0num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table1num);/计价器状态void Init_LCD_JJQ()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table4num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table5num);/计价器价格调整void Init_LCD_JGTZ()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table6num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table7num);/起步价白天+起步晚上+单价+总价+公里+时间+模式+夜间或者白天void display_S(uint Day,uint Night,uint DJ,uint ZJ,uint GL,uint Time,uchar Mode,uchar DN)/单价显示模式if(DN=0)write_com(0x80);write_date(D);/起步价if(Day100)write_com(0x80+1);write_date( );write_date(0+Day/10);write_date(.);write_date(0+Day%10);else if(Day1000)write_com(0x80+1);write_date(0+Day/100);write_date(0+Day/10%10);write_date(.);write_date(0+Day%10);elsewrite_com(0x80);write_date(N);/单价if(Night100)write_com(0x80+1);write_date( );write_date(0+Night/10);write_date(.);write_date(0+Night%10);else if(Night1000)write_com(0x80+1);write_date(0+Night/100);write_date(0+Night/10%10);write_date(.);write_date(0+Night%10);/单价if(DJ100)write_com(0x80+10);write_date( );write_date(0+DJ/10);write_date(.);write_date(0+DJ%10);else if(Night1000)write_com(0x80+10);write_date(0+DJ/100);write_date(0+DJ/10%10);write_date(.);write_date(0+DJ%10);/总价if(ZJ100)write_com(0x80+0x40);write_date( );write_date( );write_date(0+ZJ/10);write_date(.);write_date(0+ZJ%10);else if(ZJ1000)write_com(0x80+0x40);write_date( );write_date(0+ZJ/100);write_date(0+ZJ/10%10);write_date(.);write_date(0+ZJ%10);else if(ZJ10000)write_com(0x80+0x40);write_date(0+ZJ/1000);write_date(0+ZJ/100%10);write_date(0+ZJ/10%10);write_date(.);write_date(0+ZJ%10);/公里模式if(Mode=0)if(GL100)write_com(0x80+0x40+8);write_date( );write_date( );write_date( );write_date(0+GL/10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);else if(GL1000)write_com(0x80+0x40+8);write_date( );write_date( );write_date(0+GL/100);write_date(0+GL/10%10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);else if(GL10000)write_com(0x80+0x40+8);write_date( );write_date(0+GL/1000);write_date(0+GL/100%10);write_date(0+GL/10%10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);else if(GL60000)write_com(0x80+0x40+8);write_date(0+GL/10000);write_date(0+GL/1000%10);write_date(0+GL/100%10);write_date(0+GL/10%10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);/时间模式else write_com(0x80+0x40+8);write_date( );write_date(0+Time/600);write_date(0+Time/60%10);write_date(:);write_date(0+Time%60/10);write_date(0+Time%60%10);write_date( );write_date( );/写年月日时分秒 W闪烁位置 M是否闪烁void display_NYR(uchar *Data,uchar W,uchar M)if(M=1)/打开闪烁 write_com(0x0F); write_com(0x80+5);else/关闭闪烁write_com(0x06);write_com(0x06);/年write_com(0x80+4);write_date(0+Data1/10);write_date(0+Data1%10);/月write_com(0x80+7);write_date(0+Data2/10);write_date(0+Data2%10);/日write_com(0x80+10);write_date(0+Data3/10);write_date(0+Data3%10);/时write_com(0x80+0x40+4);write_date(0+Data4/10);write_date(0+Data4%10);/分write_com(0x80+0x40+7);write_date(0+Data5/10);write_date(0+Data5%10);/秒write_com(0x80+0x40+10);write_date(0+Data6/10);write_date(0+Data6%10);/选择switch(W)case 1:write_com(0x80+5);break;case 2:write_com(0x80+8);break;case 3:write_com(0x80+11);break;case 4:write_com(0x80+0x40+5);break;case 5:write_com(0x80+0x40+8);break;case 6:write_com(0x80+11+0x40);break;/起步价白天+起步晚上+单价+模式void display_D(uint Day,uint Night,uint DJ,uchar Mode)/打开闪烁 write_com(0x0F);/单价if(DJ100)write_com(0x80+6);write_date( );write_date(0+DJ/10);write_date(.);write_date(0+DJ%10);else if(DJ1000)write_com(0x80+6);write_date(0+DJ/100);write_date(0+DJ/10%10);write_date(.);write_date(0+DJ%10);/晚间if(Night100)write_com(0x80+0x40+1);write_date( );write_date(0+Night/10);write_date(.);write_date(0+Night%10);else if(Night1000)write_com(0x80+0x40+1);write_date(0+Night/100);write_date(0+Night/10%10);write_date(.);write_date(0+Night%10);/白天if(Day100)write_com(0x80+0x40+10);write_date( );write_date(0+Day/10);write_date(.);write_date(0+Day%10);/白天else if(Day1000)write_com(0x80+0x40+10);write_date(0+Day/100);write_date(0+Day/10%10);write_date(.);write_date(0+Day%10);/选择switch(Mode)case 1:write_com(0x80+10);break;case 2:write_com(0x80+0x40+5);break;case 3:write_com(0x80+0x40+14);break;/*LCD1602.H文件到此为止*/根据年和月返回当月的天数:/知道 年和月返回 月的最大值uchar YDay(uchar Y,uchar M)uint temp=2000;temp=temp+Y;if(M=1|M=3|M=5|M=7|M=8|M=10|M=12)return 31;else if(M=4|M=6|M=9|M=11)return 30;elseif(temp%400!=0|temp%4!=0)return 28;elsereturn 29;/*根据年和月返回当月的天数 到此为止*/1302.H文件:/DS1302相关内容的定义与声明/管脚定义sbit SCK=P15;sbit SDA=P16;sbit RST=P17;/复位脚#define RST_CLRRST=0/电平置低#define RST_SETRST=1/电平置高/双向数据#define IO_CLRSDA=0/电平置低#define IO_SETSDA=1/电平置高#define IO_RSDA /电平读取/时钟信号#define SCK_CLRSCK=0/时钟信号#define SCK_SETSCK=1/电平置高#define ds1302_sec_add0x80/秒数据地址#define ds1302_min_add0x82/分数据地址#define ds1302_hr_add0x84/时数据地址#define ds1302_date_add0x86/日数据地址#define ds1302_month_add0x88/月数据地址#define ds1302_day_add0x8a/星期数据地址#define ds1302_year_add0x8c/年数据地址#define ds1302_control_add0x8e/控制数据地址#define ds1302_charger_add0x90 #define ds1302_clkburst_add0xbeextern unsigned char time_buf18;/空年月日时分秒周extern unsigned char time_buf8 ;/空年月日时分秒周unsigned char time_buf18 = 20,11,4,12,0,0,0,2;/空年月日时分秒周unsigned char time_buf8 ; /空年月日时分秒周/*- 向DS1302写入一字节数据-*/void Ds1302_Write_Byte(unsigned char addr, unsigned char d)unsigned char i;RST_SET;/写入目标地址:addraddr = addr & 0xFE; /最低位置零for (i = 0; i 1;/写入数据:dfor (i = 0; i 1;RST_CLR;/停止DS1302总线/*- 从DS1302读出一字节数据-*/unsigned char Ds1302_Read_Byte(unsigned char addr) unsigned char i;unsigned char temp;RST_SET;/写入目标地址:addraddr = addr | 0x01;/最低位置高for (i = 0; i 1;/输出数据:tempfor (i = 0; i 1;if (IO_R) temp |= 0x80;else temp &= 0x7F;SCK_SET;SCK_CLR;RST_CLR;/停止DS1302总线return temp;/*- 向DS1302写入时钟数据-*/void Ds1302_Write_Time(void) unsigned char i,tmp;for(i=1;i8;i+) /BCD处理tmp=time_buf1i/10;time_bufi=time_buf1i%10;time_bufi=time_bufi+tmp*16; Ds1302_Write_Byte(ds1302_control_add,0x00);/关闭写保护 Ds1302_Write_Byte(ds1302_sec_add,0x80);/暂停 /Ds1302_Write_Byte(ds1302_charger_add,0xa9);/涓流充电 Ds1302_Write_Byte(ds1302_year_add,time_buf1);/年 Ds1302_Write_Byte(ds1302_month_add,time_buf2);/月 Ds1302_Write_Byte(ds1302_date_add,time_buf3);/日 Ds1302_Write_Byte(ds1302_day_add,time_buf7);/周 Ds1302_Write_Byte(ds1302_hr_add,time_buf4);/时 Ds1302_Write_Byte(ds1302_min_add,time_buf5);/分Ds1302_Write_Byte(ds1302_sec_add,time_buf6);/秒Ds1302_Write_Byte(ds1302_day_add,time_buf7);/周 Ds1302_Write_Byte(ds1302_control_add,0x80);/打开写保护 /*- 从DS1302读出时钟数据-*/void Ds1302_Read_Time(void) unsigned char i,tmp;time_buf1=Ds1302_Read_Byte(ds1302_year_add);/年 time_buf2=Ds1302_Read_Byte(ds1302_month_add);/月 time_buf3=Ds1302_Read_Byte(ds1302_date_add);/日 time_buf4=Ds1302_Read_Byte(ds1302_hr_add);/时 time_buf5=Ds1302_Read_Byte(ds1302_min_add);/分 time_buf6=(Ds1302_Read_Byte(ds1302_sec_add)&0x7F;/秒 time_buf7=Ds1302_Read_Byte(ds1302_day_add);/周 for(i=1;i8;i+) /BCD处理tmp=time_bufi/16;time_buf1i=time_bufi%16;time_buf1i=time_buf1i+tmp*10; /*- DS1302初始化-*/void Ds1302_Init(void)RST_CLR;/RST脚置低SCK_CLR;/SCK脚置低 Ds1302_Write_Byte(ds1302_sec_add,0x00); /*1302.H到此为止*/AT24C02.H文件/EEPROMsbit WP =P11;sbit sda=P13;sbit scl=P12;void delay24() ; void start() /开始信号sda=1;delay24();scl=1;delay24();sda=0;delay24();void stop() /停止sda=0;delay24();scl=1;delay24();sda=1;delay24();void respons() /应答uchar i;scl=1;delay24();while(sda=1)&(i250)i+;scl=0;delay24();void initeeprom()WP=0;sda=1;delay24();scl=1;delay24();void write_byte(uchar date)uchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;scl=0; delay24();sda=CY;delay24();scl=1;delay24();/scl=0; / delay();scl=0;delay24();sda=1;delay24();uchar read_byte()uchar i,k;scl=0;delay24();sda=1;delay24();for(i=0;i8;i+)scl=1;delay24();k=(k1)|sda;scl=0;delay24();return k;void write_add(uchar address,uchar date)WP=0;start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();uchar read_add(uchar address)uchar date;WP=0;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;/*AT24C02.H文件到此为止*//出租车计价器/宏定义#define uchar unsigned char#define uint unsigned int /头函数声明#include #include Lcd.h#include Data.h#include DS1302.h#include AT24C02.h/键盘定义sbit K1=P31;sbit K2=P33;sbit K3=P35;sbit K4=P37;sbit K5=P30;sbit K6=P32;sbit K7=P34;sbit K8=P36;sbit FDJ=P20;/模式0时钟 1时钟调整uchar Mode=0;/时钟屏幕调整uchar Wei=0;uchar SS=0;/价格调整uchar JGWei=0;/计价器参数uint Day=0;uint Night=0;uint DanJia=0;uint ZJ=0;uint GL=0;uint Time=0;/白天/晚上uchar DN=0;/公里/时间uchar GT=0;/时间记录uchar TG=0;uchar TT=0;/初始化函数void InitTimer0();/写初值void SETS();/读初值void READS();/主函数void main()/初始化Ds1302_Init();Init_LCD();initeeprom();/SETS();/读取初始参数READS();/定时器初始化InitTimer0();/循环while(1)/时钟模式if(Mode=0)/读时间if(Wei=0)Ds1302_Read_Time();/显示时间display_NYR(time_buf1,Wei,0);else if(Mode=1)/显示计价器信息display_S(Day,Night,DanJia,ZJ,GL,Time,GT,DN);/时间调整if(K8=0)delay(10);/调时if(Mode=0)Wei+;if(Wei=1)SS=1;/闪烁display_NYR(time_buf1,Wei,SS);if(Wei=7)Wei=0;/保存时间Ds1302_Write_Time();Init_LCD();/调节白天/黑夜起价else if(Mode=1)if(DN=0)DN=1;elseDN=0;while(K8=0);/价格调整if(K7=0)delay(10);if(Mode=1)JGWei+;if(JGWei=1)Mode=2;/显示计价器价格Init_LCD_JGTZ();display_D(Day,Night,DanJia,JGWei);else if(Mode=2)JGWei+;display_D(Day,Night,DanJia,JGWei);if(JGWei=4)Mode=1;JGWei=0;/参数初始化/保存SETS();/读初值READS();TG=0;TT=0;ZJ=0;GL=0;Time=0;/白天/晚上DN=0;/公里/时间GT=0;/开启定时器TR0=1;/显示计价器Init_LCD_JJQ();while(K7=0);/+if(K6=0)delay(10);/调时if(Mode=0)/年if(Wei=1)time_buf11+;if(time_buf11=100)time_buf11=0;/月else if(Wei=2)time_buf12+;if(time_buf12=13)time_buf12=1;/日else if(Wei=3)time_buf13+;if(time_buf13=YDay(time_buf11,time_buf12)+1)time_buf13=1;/时else if(Wei=4)time_buf14+;if(time_buf14=24)time_buf14=0;/分else if(Wei=5)time_buf15+;if(time_buf15=59)time_buf15=0;/秒else if(Wei=6)time_buf16+;if(time_buf16=59)time_buf16=0;/显示if(Wei!=0)display_NYR(time_buf1,Wei,SS);/调价else if(Mode=2)/单价if(JGWei=1)DanJia+;if(DanJia999)DanJia=1;/夜间else if(JGWei=2)Night+;if(Night999)Night=1;/白天else if(JGWei=3)Day+;if(Day999)Day=1;display_D(Day,Night,DanJia,JGWei);while(K6=0);/-if(K5=0)delay(10);/调时if(Mode=0)/年if(Wei=1)time_buf11-;if(time_buf11=0xff)time_buf11=99;/月else if(Wei=2)time_buf12-;if(time_buf12=0)time_buf12=12;/日else if(Wei=3)time_buf13-;if(time_buf13=0)time_buf13=YDay(time_buf11,time_buf12);/时else if(Wei=4)time_buf14-;if(time_buf14=0xff)time_buf14=23;/分else if(Wei=5)time_buf15-;if(time_buf15=0xff)time_buf15=59;/秒else if(Wei=6)time_buf16-;if(time_buf16=0xff)time_buf16=59;/显示if(Wei!=0)display_NYR(time_buf1,Wei,SS);/调价else if(Mode=2)/单价if(JGWei=1)DanJia-;if(DanJia=0)DanJia=999;/夜间else if(JGWei=2)Night-;if(Night=0)Night=999;/白天else if(JGWei=3)Day-;if(Day=0)Day=999;display_D(Day,Night,DanJia,JGWei);while(K5=0);/退出if(K4=0)delay(10);/计价器模式if(Mode=1)Mode=0;FDJ=1;TG=0;TT=0;ZJ=0;GL=0;Time=0;/白天/晚上DN=0;/公里/时间GT=0;/开启定时器TR0=0;/显示计价器Init_LCD();while(K4=0);/暂停if(K2=0)delay(10);/计价器模式if(Mode=1)/公里模式if(GT=0)GT=1;elseGT=0;while(K2=0);/清零if(K3=0)delay(10);/计价器模式if(Mode=1)TG=0;TT=0;ZJ=0;GL=0;Time=0;while(K3=0);/开启计价器模式if(K1=0)delay(10);/为时钟模式if(Mode=0)Mode=1;/参数初始化/读初值READS();TG=0;TT=0;ZJ=0;GL=0;Time=0;/白天/晚上DN=0;/公里/时间GT=0;/开启定时器TR0=1;/显示计价器Init_LCD_JJQ();while(K1=0);/初始化函数void InitTimer0(void) TMOD = 0x01; TH0 = 0x0D8; TL0 = 0x0F0; EA = 1; ET0 = 1; TR0 = 0;/暂时不开定时器FDJ=1;/定时器0中断10msvoid Timer0Interrupt(void) interrupt 1 TH0 = 0x0D8; TL0 = 0x0F0; /公里模式 if(GT=0) FDJ=0;TG+;if(TG100)/if(TG10)TG=0;GL+; /时间模式 else FDJ=0;TT+;if(TT100)/if(TT10)TT=0;Time+; /计算钱数 /公里数小于5 if(GL600)ZJ=Day+(Time-540)/60*DanJia/10;elseZJ=Day;elseif(Time600)ZJ=Night+(Time-540)/60*DanJia/10;elseZJ=Night; else if(DN=0)if(Time600)ZJ=Day+(GL-40)/10*DanJia+(Time-540)/60*DanJia/10;elseZJ=Day+(GL-40)/10*DanJia;elseif(Time600)ZJ=Night+(GL-40)/10*DanJia+(Time-540)/60*DanJia/10;elseZJ=Night+(GL-40)/10*DanJia; /读初值void READS()uchar SH=0,SL=0;uint temp=0;delay(10);SL=read_add(0x01);delay(10);SH=read_add(0x02);temp=SH;temp=temp8;temp=temp+SL;Day=temp;delay(10);SL=read_add(0x03);delay(10);SH=read_add(0x04);temp=SH;temp=temp8;temp=temp+SL;Night=temp;delay(10);SL=read_add(0x05);delay(10);SH=read_add(0x06);temp=SH;temp=temp8;delay(10);write_add(0x01,SL);delay(10);write_add(0x02,SH);temp=Night;SL=temp&0x00ff;SH=temp8;delay(10);write_add(0x03,SL);delay(10);write_add(0x04,SH);temp=DanJia;SL=temp&0x00ff;SH=temp8;delay(10);write_add(0x05,SL);delay(10);write_add(0x06,SH);/此函数提供与屏幕显示相关的函数及声明/管脚定义sbit rs=P14;sbit lcden=P10;/屏幕初始化/时间初始化uchar code table0= / / ;uchar code table1= : : ;/计价器状态uchar code table4=D . 0Y P . 0Y;uchar code table5= . 0Y . km;/价格调整uchar code table6= P . 0Y ;uchar code table7=N . 0Y D . 0Y;/等待函数void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/LCD写命令void write_com(uchar com)rs=0;lcden=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;/LCD写数据void write_date(uchar date)rs=1;lcden=0;P0=date;delay(1);lcden=1;delay(1);lcden=0;/初始化okvoid Init_LCD()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table0num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table1num);/计价器状态void Init_LCD_JJQ()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table4num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table5num);/计价器价格调整void Init_LCD_JGTZ()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table6num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table7num);/起步价白天+起步晚上+单价+总价+公里+时间+模式+夜间或者白天void display_S(uint Day,uint Night,uint DJ,uint ZJ,uint GL,uint Time,uchar Mode,uchar DN)/单价显示模式if(DN=0)write_com(0x80);write_date(D);/起步价if(Day100)write_com(0x80+1);write_date( );write_date(0+Day/10);write_date(.);write_date(0+Day%10);else if(Day1000)write_com(0x80+1);write_date(0+Day/100);write_date(0+Day/10%10);write_date(.);write_date(0+Day%10);elsewrite_com(0x80);write_date(N);/单价if(Night100)write_com(0x80+1);write_date( );write_date(0+Night/10);write_date(.);write_date(0+Night%10);else if(Night1000)write_com(0x80+1);write_date(0+Night/100);write_date(0+Night/10%10);write_date(.);write_date(0+Night%10);/单价if(DJ100)write_com(0x80+10);write_date( );write_date(0+DJ/10);write_date(.);write_date(0+DJ%10);else if(Night1000)write_com(0x80+10);write_date(0+DJ/100);write_date(0+DJ/10%10);write_date(.);write_date(0+DJ%10);/总价if(ZJ100)write_com(0x80+0x40);write_date( );write_date( );write_date(0+ZJ/10);write_date(.);write_date(0+ZJ%10);else if(ZJ1000)write_com(0x80+0x40);write_date( );write_date(0+ZJ/100);write_date(0+ZJ/10%10);write_date(.);write_date(0+ZJ%10);else if(ZJ10000)write_com(0x80+0x40);write_date(0+ZJ/1000);write_date(0+ZJ/100%10);write_date(0+ZJ/10%10);write_date(.);write_date(0+ZJ%10);/公里模式if(Mode=0)if(GL100)write_com(0x80+0x40+8);write_date( );write_date( );write_date( );write_date(0+GL/10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);else if(GL1000)write_com(0x80+0x40+8);write_date( );write_date( );write_date(0+GL/100);write_date(0+GL/10%10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);else if(GL10000)write_com(0x80+0x40+8);write_date( );write_date(0+GL/1000);write_date(0+GL/100%10);write_date(0+GL/10%10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);else if(GL60000)write_com(0x80+0x40+8);write_date(0+GL/10000);write_date(0+GL/1000%10);write_date(0+GL/100%10);write_date(0+GL/10%10);write_date(.);write_date(0+GL%10);write_date(k);write_date(m);/时间模式else write_com(0x80+0x40+8);write_date( );write_date(0+Time/600);write_date(0+Time/60%10);write_date(:);write_date(0+Time%60/10);write_date(0+Time%60%10);write_date( );write_date( );/写年月日时分秒 W闪烁位置 M是否闪烁void display_NYR(uchar *Data,uchar W,uchar M)if(M=1)/打开闪烁 write_com(0x0F); write_com(0x80+5);else/关闭闪烁write_com(0x06);write_com(0x06);/年write_com(0x80+4);write_date(0+Data1/10);write_date(0+Data1%10);/月write_com(0x80+7);write_date(0+Data2/10);write_date(0+Data2%10);/日write_com(0x80+10);write_date(0+Data3/10);write_date(0+Data3%10);/时write_com(0x80+0x40+4);write_date(0+Data4/10);write_date(0+Data4%10);/分write_com(0x80+0x40+7);write_date(0+Data5/10);write_date(0+Data5%10);/秒write_com(0x80+0x40+10);write_date(0+Data6/10);write_date(0+Data6%10);/选择switch(W)case 1:write_com(0x80+5);break;case 2:write_com(0x80+8);break;case 3:write_com(0x80+11);break;case 4:write_com(0x80+0x40+5);break;case 5:write_com(0x80+0x40+8);break;case 6:write_com(0x80+11+0x40);break;/起步价白天+起步晚上+单价+模式void display_D(uint Day,uint Night,uint DJ,uchar Mode)/打开闪烁 write_com(0x0F);/单价if(DJ100)write_com(0x80+6);write_date( );write_date(0+DJ/10);write_date(.);write_date(0+DJ%10);else if(DJ1000)write_com(0x80+6);write_date(0+DJ/100);write_date(0+DJ/10%10);write_date(.);write_date(0+DJ%10);/晚间if(Night100)write_com(0x80+0x40+1);write_date( );write_date(0+Night/10);write_date(.);write_date(0+Night%10);else if(Night1000)write_com(0x80+0x40+1);write_date(0+Night/100);write_date(0+Night/10%10);write_date(.);write_date(0+Night%10);/白天if(Day100)write_com(0x80+0x40+10);write_date( );write_date(0+Day/10);write_date(.);write_date(0+Day%10);/白天else if(Day1000)write_com(0x80+0x40+10);write_date(0+Day/100);write_date(0+Day/10%10);write_date(.);write_date(0+Day%10);/选择switch(Mode)case 1:write_com(0x80+10);break;case 2:write_com(0x80+0x40+5);break;case 3:write_com(0x80+0x40+14);break;/EEPROMsbit WP =P11;sbit sda=P13;sbit scl=P12;void delay24() ; void start() /开始信号sda=1;delay24();scl=1;delay24();sda=0;delay24();void stop() /停止sda=0;delay24();scl=1;delay24();sda=1;delay24();void respons() /应答uchar i;scl=1;delay24();while(sda=1)&(i250)i+;scl=0;delay24();void initeeprom()WP=0;sda=1;delay24();scl=1;delay24();void write_byte(uchar date)uchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;scl=0; delay24();sda=CY;delay24();scl=1;delay24();/scl=0; / delay();scl=0;delay24();sda=1;delay24();uchar read_byte()uchar i,k;scl=0;delay24();sda=1;delay24();for(i=0;i8;i+)scl=1;delay24();k=(k1)|sda;scl=0;delay24();return k;void write_add(uchar address,uchar date)WP=0;start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();uchar read_add(uchar address)uchar date;WP=0;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;/DS1302相关内容的定义与声明/管脚定义sbit SCK=P15;sbit SDA=P16;sbit RST=P17;/复位脚#define RST_CLRRST=0/电平置低#define RST_SETRST=1/电平置高/双向数据#define IO_C
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。