历史上的今天
今天是:2024年12月16日(星期一)
2020年12月16日 | 基于单片机控制的出租车计价器
2020-12-16 来源:51hei
本次出租车计价器设计以AT89C52单片机为中心,采用AMPIRE28*64液晶屏显示出租车计价单价、里程数和金额;采用时钟芯片DS1302来显示时间和在系统需要时进行计时。其中有三个按键代表“开始/暂停”、“清零”和设置“白天/黑夜”。
实验要求
基本功能
1)显示: 可以显示 单价、里程、总金额
2)停车计费功能:中途因故停车超过5分钟后每分钟按当时单价的50%收费
3)自动分时计费功能:白天和夜间应能自动更换单价
4)性能 里程误差小于2%
扩展功能
1)可增加时钟功能
2)可增加数据掉电保护功能
已完成显示、分时计费、时钟三个功能,另外增添了暂停和清零功能。

AMPIRE128*64液晶显示屏

按键电路的设计

#include #include #include"lcd12864.c" #include"code.h" #include"ds1302.c" #include"display.c" sbit P34=P3^4; //按钮 sbit P33=P3^3; //按钮 sbit P12=P1^2; //灯 float p,price,distance_km,money; //路程,金额 unsigned int b,n; bit flag=1; voidmain(void) //主函数 { init_lcd(); //液晶显示屏 clearscreen(0); //清屏 setline(0); //起始行 TMOD=0x01; //方式1 定时功能 TH0=0x3c; //00111100 TL0=0xaf; //10101111 50ms计数一次 IE=0x87; IT0=1; IP=0x01; distance_km=0; //路程=0 Init_DS1302(); //时钟芯片 while(1) { if(flag) { TR0=0; P12=1; price=p; display(price); display1(distance_km); //显示路程 display2(money); //显示金额 } else { TR0=1; //T0中断 P12=0; //灯亮 price=p; display(price); display1(distance_km); //显示路程 display2(money); //显示金额 } displayc(1,0,0*16,dan); //显示“单” displayc(1,0,1*16,jia); //显示“价” displaye(1,0,4*8,num,15); //显示“:” displayc(1,3,0*16,li); //显示“里” displayc(1,3,1*16,chen); //显示“程” displayc(1,3,2*16,shu); //显示“数” displaye(1,3,6*8,num,15); //显示“:” displayc(1,6,0*16,jin); //显示“金” displayc(1,6,1*16,e); //显示“额” displaye(1,6,4*8,num,15); //显示“:” } } void timer1(void)interrupt 1 //定时器0中断 { TH0=0x3c; //00111100 TL0=0xaf; //10101111 50ms计数一次 b++; if(b==10) { if(P34==1) { p=1.5; distance_km+=0.1; //路程+0.1 if(distance_km<=3)money=5; //小于3km,计价5元 elsemoney=4.9+(distance_km-3)*p; //大于3km部分1.5元每km b=0; } else { p=2; distance_km+=0.1; //路程+0.1 if(distance_km<=3)money=6; //小于3km,计价6元 elsemoney=5.9+(distance_km-3)*p; //大于3km部分2元每km b=0; } } } void timer0(void)interrupt 0 //外部中断0 按键1 { flag=~flag; } void timer2(void)interrupt 2 //外部中断1 按键2 { distance_km=0; //路程=0 money=0; price=p; } LCD12864.C #include #include #define uchar unsigned char #define uint unsigned int sbit cs1=P2^0; sbit cs2=P2^1; sbit EN=P2^2; sbit RW=P2^3; sbit RS=P2^4; void delay(uchar i) { while(i--); //延时 } void readbusy() //忙碌 { P0=0x00; //00000000 RS=0; RW=1; //读出忙标志(BF)及地址记数器(AC)的状态 EN=1; //读写使能,下降沿锁定数据 while(P0&0x80); //当BF=0,while(0),当BF=1,while(1) EN=0; //EN=1-0,配合RW写数据或指令 } void lcd_wcmd(uchar cmd) { readbusy(); //判断忙碌 RS=0; RW=0; //MPU写指令到指令暂存器 P0=cmd; EN=1; //配合RS进行读数据或指令 _nop_(); //延时2个指令周期 _nop_(); EN=0; //EN=1-0,配合RW写数据或指令 } void lcd_wdat(uchar dat) { readbusy(); //判断忙碌 RS=1; RW=0; //MPU写数据到数据暂存器 P0=dat; EN=1; //配合RS进行读数据或指令 _nop_(); //延时2个指令周期 _nop_(); EN=0; //EN=1-0,配合RW写数据或指令 } void setpage(uchar page) { page=0xb8|page; //起始页 10111000 lcd_wcmd(page); //写指令 } void setline(uchar line) { line=line&0x3f; //最终行 00000111 line=line|0xc0; //起始行 11000000 lcd_wcmd(line); //写指令 } void setcolumn(uchar column) { column=column&0x3f; //最终列 00111111 column=column|0x40; //起始列 01000000 lcd_wcmd(column); //写指令 } void setonoff(uchar onoff) { onoff=0x3e|onoff; //00111110 lcd_wcmd(onoff); //写指令 } void selectscreen(uchar screen) //选择屏幕 { switch(screen) { case0:cs1=0;delay(2);cs2=0;delay(2);break; //全屏 case1:cs1=0;delay(2);cs2=1;delay(2);break; //左屏 case2:cs1=1;delay(2);cs2=0;delay(2);break; //右屏 default:break; } } void clearscreen(uchar screen) //清屏 { uchari,j; selectscreen(screen); //选屏
下一篇:51单片机计算器(加减乘除)完善
史海拾趣
|
传感器接近开关10-36VDC/200mA/4mmLJ18A3-4-Z/BX 乐清市新欧传感器有限公司1传感器接近开关10-36VDC/200mA/8mmLJ18A3-8-Z/BX 乐清市新欧传感器有限公司1传感器接近开关黄色/塑料/大 1传感器光电二极管发射管EL-1KL3 2传感器光电三极管接 ...… 查看全部问答> |
|
WinCE6.0中Catalog Item没有CISCO Aironet 340/350 PCMCIA WLAN Card网卡驱动选项 我要加一个CISCO Aironet 350 PCMCIA 无线网卡,查看Windows Embedded CE6.0帮助文件,有CISCO Aironet 340/350 PCMCIA WLAN Card驱动可以用,位于Device Drivers\\Networking\\下。可是我的Wince6.0却找不到这个驱动,不知道怎么回事?… 查看全部问答> |
|
因为要控温,所以要不停的通过IIC接口向从机写数据,就出问题了,有时写不进去,查了一下是因为IICCON[4]中断位没有清0,不知为什么,哪位高手遇到过这个问题,怎么解决的? void WrIIC(__u8 slvAddr, __u8 cmd, __u16 data) { &n ...… 查看全部问答> |
|
# Flags: CFLAGS = -Wall -g -I$(INC_PATH) CFLAGS += -c -mcpu=arm9tdmi -mlittle-endian CFLAGS += -O -D ARM_GCC 其中INC_PATH = ./Include 这3句代码有什么特别的意义吗?可以去掉或者忽略吗?谁能详细解释下,谢谢… 查看全部问答> |
|
PDA开发的的问题:高手要是不来看看这世上又要多一个疯子拉! 小女只是单片机初学者,应用过MCS-51设计过简单的课程设计,电路还不是特别明白,现在在一家公司上班,老大儿却让我用ARM7开发一个无线的PDA设备,给我一个系统的大致流程图,还不能叫做流程图,就叫功能与操作描述吧,然后问我这些能不能做出这个P ...… 查看全部问答> |




