欢迎来到天天文库
浏览记录
ID:8485776
大小:62.50 KB
页数:5页
时间:2018-03-29
《基于单片机的出租车计费(c语言)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于单片机的出租车计费(c语言)基于proteus仿真一.设计要求:1.用单片机AT89c51实现出租车计费器的设计。2.出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如5.0),车行驶2km以内,只收起步价5元。3.出租车行驶超过2km后,按每公里1.8元在5.0元的基础上增加。4.出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。5.出租车行驶仿真:把信号发生器的输出接到单片机外部中断上,设置信号发生器不同的频率输出,分别表示速度的快慢。6.每一个脉冲
2、表示轮胎转一圈,目前出租车轮胎周长为1.83米。8.运行时间显示(时、分、秒),每一次起步时清零9.出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.7元。10.行驶速度计算11.参数设置:可以修改轮胎周长,修改起步价,修改每公里单价等。二.设计仿真proteus三.设计程序#includeunsignedchard[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//段选unsi
3、gnedcharf=0x00,y=0x00,k=0x00,m=0x00,z=0x00,q=0x00,w=0x00,s=0x00;//定义变量注意其范围(不然容易出现乱码)unsignedintx=0;#defineuintunsignedint#defineucharunsignedcharvoiddelay(unsignedinti)//延时1ms{unsignedcharj;while(i--){for(j=0;j<125;j++){;}}}voiddiv2()//显示{P2=0x80;P1=d[s/1
4、0];//计时小时P0=d[y/100];//计费百位delay(5);P2=0x40;P1=d[s%10];//小时个位P0=d[y%100/10];//计费十位delay(5);P2=0x20;P1=d[10];//显示“-”P0=d[y%10]&0x7f;//计费个位delay(5);P2=0x10;P1=d[f/10];//分钟P0=d[x*2/10000];//路程万位delay(5);P2=0x08;P1=d[f%10];P0=d[x*2%10000/1000];//路程千位delay(5);P
5、2=0x04;P1=d[10];P0=d[x*2%1000/100];delay(5);P2=0x02;P1=d[w/10];//秒P0=d[x*2%100/10];delay(5);P2=0x01;P1=d[w%10];P0=d[x*2%10];delay(5);}voidtt()//总费用函数{if(x*2<2000){y=5;}elseif(x*2>2000){y=5+(x*2-2000)/1000*2;}elseif(x*2>10000){y=21+(x*2-10000)/1000*3;}}void
6、main()//开3个中断端{EX0=1;//开启外部中断源IT0=1;EX1=1;IT1=1;TH0=(65535-50000)/256;TL0=(65535-50000)%256;TMOD=0X01;ET0=1;TR0=1;//开启定时中断EA=1;//开中断源while(1){div2();tt();}}voidint1(void)interrupt0//信号中断服务程序{x++;}voidint2()interrupt2//清零中断{w=0;f=0;s=0;x=0;y=0;EX0=0;ET0=0;}
7、voidint0()interrupt1//计时中断服务程序{ET0=0;TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;q++;if(q==20)//计数20恰好为1秒{q=0;w++;if(w==60)//秒到60{w=0;f++;if(f==60)//分到60{f=0;s++;if(s==12){s=0;}}}}ET0=1;}四.设计结果
此文档下载收益归作者所有