出租车计价器的设计一
出租车计价器的设计
设计内容与要求:
(1) 里程显示为:***.**
(2)能预置起步价与单价:如起步3 公里 6.00元; 1.60.公里。(可通过按键产生公里数,如每按一次为0.1公里,里程数和价格都用数码管显示)
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3; //定义按键端口u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值#define KEY1 1
#define KEY2 2
#define KEY3 3
#define KEY4 4u16 keynum, num, me;
u8 DisplayData[8];
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);
}//mode=0 单次 1:连续
u8 KeyScan(u8 mode)
{static u8 keyen=1;if(mode==1){keyen=1;}if(keyen==1&&(k1==0||k2==0||k3==0||k4==0)){delay(1000); //消抖处理keyen=0;if(k1==0)return KEY1;else if(k2==0)return KEY2;else if(k3==0)return KEY3;else if(k4==0)return KEY4; }else if(k1==1&&k2==1&&k3==1&&k4==1){keyen=1;}return 0;
}/*******************************************************************************
* 函 数 名 : DigDisplay
* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{u8 i;for(i=0;i<8;i++){switch(i) //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位case(4):LSA=0;LSB=0;LSC=1; break;//显示第4位case(5):LSA=1;LSB=0;LSC=1; break;//显示第5位case(6):LSA=0;LSB=1;LSC=1; break;//显示第6位case(7):LSA=1;LSB=1;LSC=1; break;//显示第7位 }P0=DisplayData[i];//发送段码delay(100); //间隔一段时间扫描 P0=0x00;//消隐}
}void datapros()
{u8 key=KeyScan(0);switch(key){case 1: keynum = keynum + 1;if(keynum==1000)keynum=0; break;case 2: keynum--;if(keynum<=0)keynum=1000; break;case 3: keynum=0; break;case 4: break;}num = keynum;if(keynum <= 30){DisplayData[0]=smgduan[0];DisplayData[1]=smgduan[0];DisplayData[2]=smgduan[6]|0x80;DisplayData[3]=smgduan[0];}else{me=num-30;me=me*16;me=me+600;DisplayData[0]=smgduan[me % 10];me = me / 10;DisplayData[1]=smgduan[me % 10];me = me / 10;DisplayData[2]=smgduan[me % 10]|0x80;me = me / 10;DisplayData[3]=smgduan[me % 10];}DisplayData[4]=smgduan[num%10];num = num / 10;DisplayData[5]=smgduan[num%10]|0x80;num = num / 10;DisplayData[6]=smgduan[num%10];num = num / 10;DisplayData[7]=smgduan[num%10];
}void main()
{ while(1){datapros();DigDisplay(); }
}
按键扫描函数,支持按键长按和短按,长按与短按的区别可以放到10ms的定时里面,根据需要设置判断次数
按键处理函数
返回按键值
mode:0,不支持连续按;1,支持连续按;
0,没有任何按键按下
1,KEY0按下
2,KEY1按下
3,KEY2按下
4,KEY3按下 WK_UP
注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY3!
可以设置单价与起步价
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3; //定义按键端口u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值#define KEY1 1
#define KEY2 2
#define KEY3 3
#define KEY4 4u16 keynum, num, money, price, initprice;
u8 DisplayData[8];
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);
}//mode=0 单次 1:连续
u8 KeyScan(u8 mode)
{static u8 keyen=1;if(mode==1){keyen=1;}if(keyen==1&&(k1==0||k2==0||k3==0||k4==0)){delay(1000); //消抖处理keyen=0;if(k1==0)return KEY1;else if(k2==0)return KEY2;else if(k3==0)return KEY3;else if(k4==0)return KEY4; }else if(k1==1&&k2==1&&k3==1&&k4==1){keyen=1;}return 0;
}/*******************************************************************************
* 函 数 名 : DigDisplay
* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{u8 i;for(i=0;i<8;i++){switch(i) //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位case(4):LSA=0;LSB=0;LSC=1; break;//显示第4位case(5):LSA=1;LSB=0;LSC=1; break;//显示第5位case(6):LSA=0;LSB=1;LSC=1; break;//显示第6位case(7):LSA=1;LSB=1;LSC=1; break;//显示第7位 }P0=DisplayData[i];//发送段码delay(100); //间隔一段时间扫描 P0=0x00;//消隐}
}
void init()
{DisplayData[0]=0x00;DisplayData[1]=0x00;DisplayData[2]=0x00;DisplayData[3]=0x00;DisplayData[4]=0x00;DisplayData[5]=0x00;DisplayData[6]=0x00;DisplayData[7]=0x00;initprice=0;price=0;money=0;keynum=0;
}
//设置里程
void setMileage()
{keynum = keynum + 1;if(keynum==1000)keynum=0; num = keynum;if(keynum <= 30){DisplayData[0]=smgduan[0];DisplayData[1]=smgduan[0];DisplayData[2]=smgduan[initprice]|0x80;DisplayData[3]=0x00;}else{money=num-30;money=money*price;money=money+initprice*100;DisplayData[0]=smgduan[money % 10];money = money / 10;DisplayData[1]=smgduan[money % 10];money = money / 10;DisplayData[2]=smgduan[money % 10]|0x80;money = money / 10;if(money){DisplayData[3]=smgduan[money % 10];}}DisplayData[4]=smgduan[num%10];num = num / 10;DisplayData[5]=smgduan[num%10]|0x80;num = num / 10;if(num) DisplayData[6]=smgduan[num%10];num = num / 10;if(num) DisplayData[7]=smgduan[num%10];
}
//设置单价
void setPrice()
{price++; if(price >= 100) price = 0;DisplayData[0]=smgduan[0];DisplayData[1]=smgduan[price%10];DisplayData[2]=smgduan[price/10]|0x80;DisplayData[3]=0x00;
}
//设置起步价
void setInitPrice()
{initprice++; if(initprice>=10) initprice = 0;DisplayData[0]=smgduan[0];DisplayData[1]=smgduan[0];DisplayData[2]=smgduan[initprice]|0x80;DisplayData[3]=0x00;
}void datapros()
{u8 key=KeyScan(0);switch(key){case 1: setMileage(); break;case 2: setPrice(); break;case 3: setInitPrice(); break;case 4: init(); break;}}void main()
{ while(1){datapros();DigDisplay(); }
}
纪念一下自己写的第一个C51
出租车计价器的设计一相关推荐
- 单片机c语言出租车计时程序,基于单片机出租车计价器课题设计c语言编写(样例3)...
<基于单片机出租车计价器课题设计(c语言编写).doc>由会员分享,可免费在线阅读全文,更多与<基于单片机出租车计价器课题设计(c语言编写)>相关文档资源请在帮帮文库(www. ...
- 出租车计价器的设计二
出租车计价器的设计 设计内容与要求: (1) 里程显示为:***.** (2)能预置起步价与单价:如起步3 公里 6.00元: 1.60.公里.(可通过按键产生公里数,如每按一次为0.1公里,里程数和 ...
- 基于51单片机的出租车计价器的设计
引言 在科学技术和经济水平快速发展的21世纪,乘坐出租车和网约车出行已经成为一种非常重要的交通出行方式.行业的转型发展让出租车行业迎来了一场新纪元.但是在出租车行业迅速发展的同时,也出现了很多问题.经 ...
- 【单片机毕业设计】【mcuclub-cl-008】基于单片机的出租车计价器的设计
最近设计了一个项目基于单片机的出租车计价器系统,与大家分享一下: 一.基本介绍 项目名:出租车计价器 项目编号:mcuclub-cl-008 单片机类型:STC89C52.STM32F103C8T6 ...
- 【java毕业设计】基于java+Tomcat +Swing的出租车计价器设计与实现(毕业论文+程序源码)——出租车计价器
基于java+Tomcat +Swing的出租车计价器设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Tomcat +Swing的出租车计价器设计与实现,文章末尾附有本毕业设计的 ...
- 基于java出租车计价器设计与实现(论文+源码)
毕业设计(论文)任务书 毕业设计(论文)题目:出租车计价器设计与实现毕业设计(论文)要求及原始数据(资料):1.了解并掌握基于java的相关技术,例如JSP.servlet等:2.掌握出租车计价系统的 ...
- 基于java的出租车计价器系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
项目报告 出租车计价器设计与实现 在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生.但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进.台湾是计价 ...
- VHDL设计出租车计价器
下面是本设计功能,功能可以增添修改.代码有详细注释. 本工程创建于vivado下 下面是工程截图: 适用于quartusII.vivado.ISE等环境. ---文件名: texi ...
- 一文教你用java实现出租车计价器设计(附下载源码)
导读:在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生.但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进.台湾是计价器的主要生产场地,目前全世界 ...
最新文章
- Matlab数据的可视化 -- 饼图
- 拦截器中addInterceptor和excludePathPatterns里的/* /**是什么
- [Leetcode] Permutations 全排列
- Oracle触发器的语法详解
- STL源码剖析面试问题
- php html区别_php与html区别
- mssql2008极占内存
- Netty从入门到精通-伪异步I/O编程
- 服务器的安装文件,服务器存储安装文件
- 一套代码在不同的电脑执行快慢_设计师需要的电脑配置
- 高级着色语言HLSL入门(6)
- Anaconda下载、安装及配置教程
- oracle导出要工具,Oracle导出工具的具体操作步骤详解
- 2022-09-21 虚机安装威联通 QuTScloud
- java和weboffice集成_金格插件WebOffice2015使用体会
- vue函数@click.prevent使用纪要
- 汉诺塔//河内塔(Tower of Hanoi)
- python爬虫爬取安居客并进行简单数据分析
- INFJ的人格成长阶段与功能类型
- 竞赛,开源!2019CCF BDCI 乘用车销量预测 冠军方案
热门文章
- 2019.10.3 noip模拟赛
- mintUI Popup的使用
- python: 格式化字符串f()用法
- 《出版专业基础》2015年版(初级)思考与练习 第八章
- 程序员带你一步步分析AI如何玩Flappy Bird
- java 最烧脑的继承题_java烧脑面试题总结
- ntag213和215有什么区别_Ntag213、Ntag215、Ntag216电子标签
- 交流电量信号隔离变送器
- openGL之API学习(四十七)layout作用详解
- 【Cocos Creator 3.x】 Shader 中的 layout(set = N, binding = M) 是什么意思?