出租车计价器的设计

设计内容与要求:

(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

出租车计价器的设计一相关推荐

  1. 单片机c语言出租车计时程序,基于单片机出租车计价器课题设计c语言编写(样例3)...

    <基于单片机出租车计价器课题设计(c语言编写).doc>由会员分享,可免费在线阅读全文,更多与<基于单片机出租车计价器课题设计(c语言编写)>相关文档资源请在帮帮文库(www. ...

  2. 出租车计价器的设计二

    出租车计价器的设计 设计内容与要求: (1) 里程显示为:***.** (2)能预置起步价与单价:如起步3 公里 6.00元: 1.60.公里.(可通过按键产生公里数,如每按一次为0.1公里,里程数和 ...

  3. 基于51单片机的出租车计价器的设计

    引言 在科学技术和经济水平快速发展的21世纪,乘坐出租车和网约车出行已经成为一种非常重要的交通出行方式.行业的转型发展让出租车行业迎来了一场新纪元.但是在出租车行业迅速发展的同时,也出现了很多问题.经 ...

  4. 【单片机毕业设计】【mcuclub-cl-008】基于单片机的出租车计价器的设计

    最近设计了一个项目基于单片机的出租车计价器系统,与大家分享一下: 一.基本介绍 项目名:出租车计价器 项目编号:mcuclub-cl-008 单片机类型:STC89C52.STM32F103C8T6 ...

  5. 【java毕业设计】基于java+Tomcat +Swing的出租车计价器设计与实现(毕业论文+程序源码)——出租车计价器

    基于java+Tomcat +Swing的出租车计价器设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Tomcat +Swing的出租车计价器设计与实现,文章末尾附有本毕业设计的 ...

  6. 基于java出租车计价器设计与实现(论文+源码)

    毕业设计(论文)任务书 毕业设计(论文)题目:出租车计价器设计与实现毕业设计(论文)要求及原始数据(资料):1.了解并掌握基于java的相关技术,例如JSP.servlet等:2.掌握出租车计价系统的 ...

  7. 基于java的出租车计价器系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    项目报告 出租车计价器设计与实现 在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生.但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进.台湾是计价 ...

  8. VHDL设计出租车计价器

    下面是本设计功能,功能可以增添修改.代码有详细注释. 本工程创建于vivado下 下面是工程截图: 适用于quartusII.vivado.ISE等环境. ---文件名:           texi ...

  9. 一文教你用java实现出租车计价器设计(附下载源码)

    导读:在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生.但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进.台湾是计价器的主要生产场地,目前全世界 ...

最新文章

  1. Matlab数据的可视化 -- 饼图
  2. 拦截器中addInterceptor和excludePathPatterns里的/* /**是什么
  3. [Leetcode] Permutations 全排列
  4. Oracle触发器的语法详解
  5. STL源码剖析面试问题
  6. php html区别_php与html区别
  7. mssql2008极占内存
  8. Netty从入门到精通-伪异步I/O编程
  9. 服务器的安装文件,服务器存储安装文件
  10. 一套代码在不同的电脑执行快慢_设计师需要的电脑配置
  11. 高级着色语言HLSL入门(6)
  12. Anaconda下载、安装及配置教程
  13. oracle导出要工具,Oracle导出工具的具体操作步骤详解
  14. 2022-09-21 虚机安装威联通 QuTScloud
  15. java和weboffice集成_金格插件WebOffice2015使用体会
  16. vue函数@click.prevent使用纪要
  17. 汉诺塔//河内塔(Tower of Hanoi)
  18. python爬虫爬取安居客并进行简单数据分析
  19. INFJ的人格成长阶段与功能类型
  20. 竞赛,开源!2019CCF BDCI 乘用车销量预测 冠军方案

热门文章

  1. 2019.10.3 noip模拟赛
  2. mintUI Popup的使用
  3. python: 格式化字符串f()用法
  4. 《出版专业基础》2015年版(初级)思考与练习 第八章
  5. 程序员带你一步步分析AI如何玩Flappy Bird
  6. java 最烧脑的继承题_java烧脑面试题总结
  7. ntag213和215有什么区别_Ntag213、Ntag215、Ntag216电子标签
  8. 交流电量信号隔离变送器
  9. openGL之API学习(四十七)layout作用详解
  10. 【Cocos Creator 3.x】 Shader 中的 layout(set = N, binding = M) 是什么意思?