找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14451|回复: 12
打印 上一主题 下一主题
收起左侧

出租车计价器制作资料 有实物 原理图 程序 分享给大家

  [复制链接]
跳转到指定楼层
楼主
基于51单片机的出租车计价器 里面  原理图 图片 单片机源程序,清单都有  




出租车计价器元件清单
元件名称    单位(只)    型号    参数    备注
单片机    2    AT89S52        
整流二极管    20    IN4007        
电容    10    30P        
电容    10    104        
电解电容    8    100UF/50V        
电解电容    2    220UF/50V        
电解电容    10    10UF/25        
微动开关(按钮)    12            
74ls164    8            
自锁开关    2    (白色,六脚的)        
排针    2排            
晶振    2    11.0592M        
精调电阻    5    103 3296W     10K   
排线    1米    20p        
稳压管    2    LM7805        
稳压管    2    LM7812        
焊锡丝    若干            
散热片    3    YB-20        
三极管    20个    2TY    贴片(PNP)   
万能板    3块            
掉电保护    2    24c02        
L298N    2            
七段数码管    8    LG5011BSR        
光耦    2    TP521-4        
接线端子    8个    2P        
管座    5    40P        
管座    5    16P        
热缩管    1米    直径1.5mm        
铜柱    8    长20mm        
直流电机    1            
电源线    1            
变压器    1            
深度传感器    3    MOCH26A        
驱动    1    L297和L292        

单片机源程序如下:

  1. #include<reg52.h>
  2. #include <stdio.h>
  3. #include <absacc.h>

  4. #define uchar unsigned char
  5. sbit P3_4=P3^4;
  6. sbit jia=P2^0;//价格加
  7. sbit jian=P2^1;//价格减
  8. sbit gl=P2^2; //公里
  9. sbit hp=P2^3; //换屏
  10. sbit j=P2^4;//记数

  11. unsigned char keycnt=0;
  12. unsigned char cnt=0;
  13. bit write=0; //写24C08 的标志;
  14. //code uchar tab[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};
  15. //code uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
  16. code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,};
  17. uchar sz[6];
  18. int yw,ww,qw,bw,sw,gw,a,b,c,d,e,f,g,u,v,w,z;


  19. d=46; //单价
  20. e=00; //公里数
  21. f=05;

  22. u=12;//时
  23. v=00;//分
  24. w=00;//秒
  25. //jiage=d*e; //金额
  26. /////////24C08 读写驱动程序////////////////////
  27. sbit scl=P3^4; // 24c08 SCL
  28. sbit sda=P3^5; // 24c08 SDA
  29. void delay1(unsigned char x)
  30. { unsigned int i;
  31. for(i=0;i<x;i++);
  32. ;}
  33. void flash()
  34. { ; ; }
  35. void x24c08_init() //24c08 初始化子程序
  36. {scl=1; flash(); sda=1;                     flash();}
  37. void start() //启动(I方C)总线
  38. {sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
  39. void stop() //停止(I方C)总线
  40. {sda=0; flash(); scl=1; flash(); sda=1; flash();}
  41. void writex(unsigned char j) //写一个字节
  42. { unsigned char i,temp;
  43. temp=j;
  44. for (i=0;i<8;i++)
  45. {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
  46. scl=0; flash(); sda=1; flash();
  47. }
  48. unsigned char readx() //读一个字节
  49. {
  50. unsigned char i,j,k=0;
  51. scl=0; flash(); sda=1;
  52. for (i=0;i<8;i++)
  53. {
  54. flash(); scl=1; flash();
  55. if (sda==1) j=1;
  56. else j=0;
  57. k=(k<<1)|j;
  58. scl=0;}
  59. flash(); return(k);
  60. }
  61. void clock() //(I方C)线时钟
  62. {
  63. unsigned char i=0;
  64. scl=1; flash();
  65. while ((sda==1)&&(i<255))i++;
  66. scl=0; flash();
  67. }
  68. ////////从24c02 的地址address 中读取一个字节数据/////
  69. unsigned char x24c08_read(unsigned char address)
  70. {
  71. unsigned char i;
  72. start(); writex(0xa0);
  73. clock(); writex(address);
  74. clock(); start();
  75. writex(0xa1); clock();
  76. i=readx(); stop();
  77. delay1(10);
  78. return(i);
  79. }
  80. //////向24c02 的address                     地址中写入一字节数据info/////
  81. void x24c08_write(unsigned char address,unsigned char info)
  82. {
  83. EA=0;
  84. start(); writex(0xa0);
  85. clock(); writex(address);
  86. clock(); writex(info);
  87. clock(); stop();
  88. EA=1;
  89. delay1(50);
  90. }
  91. /////////////24C08 读写驱动程序完/////////////////////
  92. void Delay(unsigned int tc) //延时程序
  93. {
  94. while( tc != 0 )
  95. {unsigned int i;
  96. for(i=0; i<100; i++);
  97. tc--;}
  98. }


  99. /////////////////////////////////////////////////////////////////////////////
  100. void jishuqi()
  101. {

  102. if(j==0)
  103. {
  104. cnt++;
  105. switch(cnt)
  106. {
  107. case 30:
  108. e++;
  109. cnt=0;
  110. break;
  111. while(hp==0);
  112. }
  113. }
  114. }        
  115. void disp(void)
  116. {
  117. for(c=5;c>=0;c--)
  118. {
  119. SBUF=tab[sz[c]];
  120. while(!TI);
  121. TI=0;
  122. }
  123. }

  124. /*void KEY() //按键扫描程序
  125. {
  126. unsigned char i,j;
  127. if(jian==0)
  128. {
  129. for(i=20;i>0;i--) //延时去干扰
  130. for(j=248;j>0;j--);

  131. if(hp==0)
  132. {
  133. keycnt++;
  134. switch(keycnt) //按下次数判断
  135. {
  136. case 1: //第一次按下
  137. d=46;
  138. break;

  139. case 2: //第二次按下
  140. d=12;

  141. break;

  142. case 3: //第三次按下
  143. d=78;
  144. keycnt=0; //重新开始判断键值
  145. break;
  146. }
  147. while(hp==0);
  148. }
  149. }
  150. }*/                 


  151. void shizhong(void)
  152. {
  153. z=TH0*256+TL0;

  154. if(z>1)
  155. {
  156. w++;z=0;
  157. }
  158. if(w>59)
  159. {
  160. v++;w=0;
  161. }

  162. if(v>59)
  163. {
  164. u++;v=0;
  165. }

  166. if(u>23)
  167. {
  168. u=0;
  169. }
  170. }
  171. void led(void)         //显示时间
  172. {
  173. if(jian==0)
  174. {
  175. u++;
  176. }
  177. if(gl==0)
  178. {
  179. v++;
  180. }
  181. if(hp==0)
  182. {
  183. w++;
  184. }


  185. qw=sz[0]=u/10%10;
  186. bw=sz[1]=u%10;
  187. sw=sz[2]=v/10%10;
  188. gw=sz[3]=v%10;
  189. yw=sz[4]=w/10%10;
  190. ww=sz[5]=w%10;
  191. }

  192. void led1(void)         //显示 价格 里程 金额
  193. {

  194. //KEY();
  195. if(jian==0)
  196. {
  197. d=46;
  198. }
  199. if(gl==0)
  200. {
  201. d=78;
  202. }
  203. if(hp==0)
  204. {
  205. e=00;
  206. f=05;
  207. }
  208. qw=sz[0]=d/10%10;
  209. bw=sz[1]=d%10;
  210. sw=sz[2]=e/10%10;
  211. gw=sz[3]=e%10;
  212. yw=sz[4]=f/10%10;
  213. ww=sz[5]=f%10;
  214. jishuqi();

  215. x24c08_write(2,e);


  216. }
  217. void scjs(void)interrupt 3
  218. {
  219. TH1=0X3C;
  220. TL1=0xB0;

  221. a=a+1;
  222. if(a==12)
  223. {
  224. a=0;
  225. P3_4=!P3_4;
  226. if(P3_4==0)
  227. {
  228. //b=TH0*256+TL0;
  229. //f=5;
  230. /*
  231. if(jia==0)
  232. {d++;}

  233. if(jian==0)
  234. {d--;}

  235. if(gl==0)
  236. {e++;}
  237. */
  238. if(e>3)        
  239. {
  240. g=(e-3)*d/10+5;
  241. f=g;
  242. }

  243. shizhong();

  244. if(jia==0)
  245. ……………………

  246. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
出租车计价器资料.rar (758.6 KB, 下载次数: 251)


评分

参与人数 3黑币 +110 收起 理由
暗黑传教士 + 5
吾皇q + 5 很给力!
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:254527 发表于 2017-12-19 08:21 | 只看该作者
你好,我想做一个毕设,在这个基础上把数码管直接换成led显示屏,测量从距离直接改为面积,做成一个农机作业面积计费仪一个简单的东西,你看好做吗,能不能稍微更改一下发给我谢谢。
回复

使用道具 举报

板凳
ID:305620 发表于 2018-5-2 09:54 | 只看该作者
你这电路图为什么打不开啊,打开错误的
回复

使用道具 举报

地板
ID:446962 发表于 2018-12-15 21:21 | 只看该作者
给力,赞
回复

使用道具 举报

5#
ID:451098 发表于 2018-12-20 21:56 | 只看该作者
哇好厉害
回复

使用道具 举报

6#
ID:451473 发表于 2018-12-21 13:07 | 只看该作者
给力,赞
回复

使用道具 举报

7#
ID:555216 发表于 2019-6-14 01:07 | 只看该作者
正好需要,请问一下是霍尔的传感器吗,是不是每台汽车的电子脉冲K都是不一样的?
回复

使用道具 举报

8#
ID:420363 发表于 2019-7-1 11:26 | 只看该作者
希望能有帮助
回复

使用道具 举报

9#
ID:674022 发表于 2019-12-25 21:37 | 只看该作者
写的真好
回复

使用道具 举报

10#
ID:674022 发表于 2019-12-25 21:45 | 只看该作者
很有帮助
回复

使用道具 举报

11#
ID:674022 发表于 2019-12-25 23:17 | 只看该作者
过程详细,可以让人很清楚的看懂
回复

使用道具 举报

12#
ID:674022 发表于 2019-12-26 10:46 | 只看该作者
步骤详细,给的东西也很全
回复

使用道具 举报

13#
ID:833295 发表于 2020-10-22 18:42 | 只看该作者
有没有proteus的电路图原件啊,求
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表