找回密码
 立即注册

QQ登录

只需一步,快速开始

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

自己diy的电动车电压里程表(12864液晶显示)

  [复制链接]
跳转到指定楼层
楼主











编码器做电动车脉冲实验



编码器做电动车脉冲实验









接近开关安装电动车前轮




电动车里程电压表程序.rar (2.08 KB, 下载次数: 203)
电动车里程表原理图.rar (4.76 KB, 下载次数: 174)


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

使用道具 举报

沙发
ID:51275 发表于 2013-6-26 16:16 | 只看该作者
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdlib.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define ulong unsigned long
  7. #define AD_data P1
  8. #define LCD_data P0

  9. sbit intr=P3^0;         //AD0804
  10. sbit adwr=P3^2;        //AD0804写信号
  11. sbit adrd=P3^1;        //AD0804读信号
  12. sbit LCD_RS=P2^5;//lcd
  13. sbit LCD_RW=P2^6; //lcd
  14. sbit LCD_EN=P2^7; //lcd
  15. sbit s1=P3^3;        //按键,单程公里清零
  16. sbit scl=P3^6;        //24c02
  17. sbit sda=P3^7;        //24c02

  18. uchar code dis1[]={"筿溃"};
  19. uchar code dis2[]={"虫祘"};
  20. uchar code dis3[]={"羆祘"};
  21. uchar code dis4[]={"承禤搂筿笆ó "};
  22. uchar code dis5[]={"."};
  23. uchar code dis6[]={"V"};
  24. uchar code dis7[]={"KM"};

  25. uchar a,b,c,d,e,f,g,y,z;
  26. ulong num,num1;                      
  27. uint zongcheng,dancheng,zongcheng1,dancheng1;

  28. void delay()
  29. {;;}
  30.        
  31. void delayms(uint xms) //延时
  32. {
  33.         uint i,j;
  34.         for(i=xms;i>0;i--)
  35.                 for(j=110;j>0;j--);
  36. }

  37. void AD_init()//ad0804初始化
  38. {
  39.         adwr=1;
  40.         adrd=1;
  41. }

  42. void start()//开始
  43. {
  44.         sda=1;
  45.         delay();
  46.         scl=1;
  47.         delay();
  48.         sda=0;
  49.         delay();

  50. }

  51. void stop()//停止
  52. {
  53.         sda=0;
  54.         delay();
  55.         scl=1;
  56.         delay();
  57.         sda=1;
  58.         delay();
  59. }

  60. void respons()//应答
  61. {
  62.         uchar i;
  63.         scl=1;
  64.         delay();
  65.         while((sda==1)&&(i<250))i++;
  66.         scl=0;
  67.         delay();
  68. }

  69. void init()//初始化
  70. {
  71.         sda=1;
  72.         delay();
  73.         scl=1;
  74.         delay();
  75. }

  76. void write_byte(uchar date )//写1字
  77. {
  78.         uchar i,temp;
  79.         temp=date;
  80.         for(i=0;i<8;i++)
  81.                 {
  82.                         temp=temp<<1;
  83.                         scl=0;
  84.                         delay();
  85.                         sda=CY;
  86.                    delay();
  87.                    scl=1;
  88.                   delay();
  89.                 }
  90.          scl=0;
  91.          delay();
  92.          sda=1;
  93.          delay();
  94. }

  95. uchar read_byte()//读1字
  96. {
  97.         uchar i,k;
  98.         scl=0;
  99.         delay();
  100.         sda=1;
  101.         delay();
  102.         for(i=0;i<8;i++)
  103.         {
  104.                 scl=1;
  105.                 delay();
  106.                 k=(k<<1)|sda;
  107.                 scl=0;
  108.                 delay();
  109.         }
  110.         return k;
  111. }

  112. void write_add(uchar address,uchar date)//写字节
  113. {
  114.         start();
  115.         write_byte(0xa0);
  116.         respons();
  117.         write_byte(address);
  118.         respons();
  119.         write_byte(date);
  120.     respons();
  121.         stop();
  122. }

  123. uchar reda_add(uchar address)//读字节
  124. {
  125.         uchar date;
  126.         start();
  127.         write_byte(0xa0);
  128.         respons();
  129.         write_byte(address);
  130.         respons();
  131.         start();
  132.         write_byte(0xa1);
  133.         respons();
  134.         date=read_byte();
  135.         stop();
  136.         return date;

  137. }

  138. void write_cmd(uchar cmd)//写指令到lcd
  139. {
  140.         LCD_RS=0;
  141.         LCD_RW=0;
  142.         LCD_EN=0;
  143.         P0=cmd;
  144.         delayms(5);
  145.         LCD_EN=1;
  146.         delayms(5);
  147.         LCD_EN=0;
  148. }  

  149. void write_dat(uchar dat)//写显示数据到lcd
  150. {
  151.         LCD_RS=1;
  152.         LCD_RW=0;
  153.         LCD_EN=0;
  154.         P0=dat;
  155.         delayms(5);
  156.         LCD_EN=1;
  157.         delayms(5);
  158.         LCD_EN=0;
  159. }

  160. void put_str(char i,char j,unsigned char date)        //指针定位;
  161. {
  162.         if(i==1)
  163.         write_cmd(0x83+j-1);
  164. //        else write_cmd(0xc0+j-1);
  165.         write_dat('0'+date)        ;
  166. }

  167. void ADqd()        //ad0808启动
  168. {
  169.                 float  i=1;
  170.          uint j;
  171.          uchar ge,shi,bai;
  172.         int a[8];       
  173.         P1=0xff;
  174.         intr=1;
  175.         adwr=1;
  176.         _nop_();
  177.         adwr=0;
  178.         _nop_();
  179.         adwr=1;       
  180.    while(intr==1);       
  181.         adrd=1;
  182.         _nop_();
  183.         adrd=0;
  184.         _nop_();

  185.                 i=P1;
  186.                 a[0]=P1^0;
  187.                 a[1]=P1^1;
  188.                 a[2]=P1^2;
  189.                 a[3]=P1^3;
  190.                 a[4]=P1^4;
  191.                 a[5]=P1^5;
  192.                 a[6]=P1^6;
  193.                 a[7]=P1^7;
  194.                 i=i/255;
  195.                 i*=6;
  196.                 i*=100;
  197.                 j=(int)i;
  198.                 ge=j%10;
  199.                 put_str(1,4,ge);
  200.                 j-=ge;
  201.                 shi=j/10;
  202.                 shi=shi%10;
  203.                 put_str(1,2,shi);
  204.                 bai=j/100;
  205.                 put_str(1,1,bai);
  206.                 for(i=0;i<8;i++);
  207.                  delayms(10);
  208.                         adrd=1;
  209. }


  210. void lcd_init()//lcd初始化
  211. {
  212.         LCD_RW=0;
  213.         write_cmd(0x30);
  214.         delayms(5);
  215.         write_cmd(0x0c);
  216.         delayms(5);
  217.         write_cmd(0x06);
  218.         delayms(5);
  219.         write_cmd(0x01);
  220.         delayms(5);
  221. }

  222. void lcd_pos(uchar X,uchar Y)//设定汉字显示位置
  223. {
  224.         uchar pos;
  225.          if(X==0)
  226.                 {X=0x80;}
  227.         else if(X==1)
  228.                 {X=0x90;}
  229.         else if(X==2)
  230.                 {X=0x88;}
  231.         else if(X==3)
  232.                 {X=0x98;}
  233.         else if(X==4)
  234.                 {X=0x85;}
  235.         else if(X==5)
  236.                 {X=0x87;}
  237.         else if(X==6)
  238.                 {X=0x97;}
  239.         else if(X==7)
  240.                 {X=0x8f;}

  241.         pos=X+Y;
  242.         write_cmd(pos);
  243. }




  244. void main()
  245. {                    
  246.         uchar i;
  247.         init();
  248.         a=reda_add(1);
  249.         delayms(5);
  250.         b=reda_add(2);
  251.         delayms(5);
  252.         c=reda_add(3);
  253.         delayms(5);
  254.     d=reda_add(4);
  255.         delayms(5);
  256.         e=reda_add(5);
  257.         delayms(5);
  258.         f=reda_add(11);
  259.         delayms(5);
  260.         g=reda_add(12);
  261.         delayms(5);
  262.         y=reda_add(13);
  263.         delayms(5);
  264.     z=reda_add(14);
  265.         delayms(5);
  266.         zongcheng1=(a*10000)+(b*1000)+(c*100)+(d*10)+e;
  267.         dancheng1=(f*1000)+(g*100)+(y*10)+z;
  268.        
  269.            TMOD=0X55;//设T0,T1为计数
  270.         TL0=0xff;
  271.         TH0=0xff;
  272.         TL1=0xff;
  273.         TH1=0xff;
  274.         TR0=1;
  275.         TR1=1;
  276.         EA=1;
  277.         ET0=1;
  278.         ET1=1;


  279.         lcd_init();
  280.         lcd_pos(0,0);
  281.         i=0;
  282.         while(dis1[i]!='\0')
  283.         {
  284.                 write_dat(dis1[i]);
  285.                 i++;

  286.         }
  287.        
  288.         lcd_pos(1,0);
  289.         i=0;
  290.         while(dis2[i]!='\0')
  291.         {
  292.                 write_dat(dis2[i]);
  293.                 i++;
  294.         }
  295.         lcd_pos(2,0);
  296.         i=0;
  297.         while(dis3[i]!='\0')
  298.         {
  299.                 write_dat(dis3[i]);
  300.                 i++;
  301.         }
  302.        
  303.        
  304.         lcd_pos(3,0);
  305.         i=0;
  306.         while(dis4[i]!='\0')
  307.         {
  308.                 write_dat(dis4[i]);
  309.                 i++;
  310.         }

  311.         lcd_pos(4,0);
  312.         i=0;
  313.         while(dis6[i]!='\0')
  314.         {
  315.                 write_dat(dis5[i]);
  316.                 i++;
  317.         }

  318.         lcd_pos(5,0);
  319.         i=0;
  320.         while(dis6[i]!='\0')
  321.         {
  322.                 write_dat(dis6[i]);
  323.                 i++;
  324.         }

  325.         lcd_pos(6,0);
  326.         i=0;
  327.         while(dis7[i]!='\0')
  328.         {
  329.                 write_dat(dis7[i]);
  330.                 i++;
  331.         }

  332.         lcd_pos(7,0);
  333.         i=0;
  334.         while(dis7[i]!='\0')
  335.         {
  336.                 write_dat(dis7[i]);
  337.                 i++;
  338.         }

  339.        
  340.         while(1)               
  341.         {
  342.                 AD_init();
  343.                         delayms(50);       
  344.                 ADqd();
  345.                         delayms(50);

  346.                 zongcheng=num*1.3/1000+zongcheng1;//16寸轮胎周长为130cm
  347.                 a=zongcheng/10000;
  348.                 b=zongcheng%10000/1000;
  349.                 c=zongcheng%1000/100;
  350.                 d=zongcheng%100/10;
  351.                 e=zongcheng%10;         
  352.                 put_str(1,8,a);
  353.                 put_str(1,9,b);
  354.                 put_str(1,10,c);
  355.                 put_str(1,11,d);
  356.                 put_str(1,12,e);
  357.                          
  358.        
  359.                 dancheng=num1*1.3/1000+dancheng1;
  360.                 f=dancheng%10000/1000;
  361.                 g=dancheng%1000/100;
  362.             y=dancheng%100/10;
  363.                 z=dancheng%10;
  364.        
  365.                 put_str(1,17,f);
  366.                 put_str(1,18,g);
  367.                 put_str(1,19,y);
  368.                 put_str(1,20,z);
  369.                 if(s1==0)
  370.                 {
  371.                
  372.                 dancheng=0;
  373.                 dancheng1=0;                             
  374.                 }
  375.         write_add(1,a);
  376.         delayms(5);
  377.         write_add(2,b);
  378.         delayms(5);
  379.                 write_add(3,c);
  380.         delayms(5);
  381.                 write_add(4,d);
  382.         delayms(5);
  383.                 write_add(5,e);
  384.         delayms(5);
  385.                 write_add(11,f);
  386.         delayms(5);
  387.                 write_add(12,g);
  388.         delayms(5);
  389.                 write_add(13,y);
  390.         delayms(5);
  391.                 write_add(14,z);
  392.         delayms(5);               
  393.         }   
  394. }

  395. void T0_time()interrupt 1//总程中断计数
  396. {
  397.         TH0=0xff;
  398.         TL0=0xff;
  399.         num++;

  400. }

  401. void T1_time()interrupt 3//单程中断计数
  402. {
  403.         TH1=0xff;
  404.         TL1=0xff;
  405.         num1++;
  406. }





复制代码
回复

使用道具 举报

板凳
ID:51321 发表于 2013-6-27 15:19 | 只看该作者
好厉害啊
回复

使用道具 举报

地板
ID:51321 发表于 2013-6-27 15:21 | 只看该作者
好厉害啊
回复

使用道具 举报

5#
ID:51343 发表于 2013-6-28 17:47 | 只看该作者
51hei论坛有你更精彩
回复

使用道具 举报

6#
ID:51343 发表于 2013-6-28 17:48 | 只看该作者
我明天买材料做一个
回复

使用道具 举报

7#
ID:55565 发表于 2013-10-2 19:40 | 只看该作者
很好,非常不错的。
回复

使用道具 举报

8#
ID:57910 发表于 2013-12-16 10:43 | 只看该作者
回复

使用道具 举报

9#
ID:57910 发表于 2013-12-16 10:43 | 只看该作者
没有师付。
回复

使用道具 举报

10#
ID:58837 发表于 2014-1-17 10:38 | 只看该作者
很好,非常不错的。
回复

使用道具 举报

11#
ID:58900 发表于 2014-1-21 20:24 | 只看该作者
不错 正想做
回复

使用道具 举报

12#
ID:58900 发表于 2014-1-21 20:24 | 只看该作者
不错 正想做
回复

使用道具 举报

13#
ID:58461 发表于 2014-1-22 13:09 | 只看该作者
回复

使用道具 举报

14#
ID:59133 发表于 2014-3-2 21:03 | 只看该作者
理论与实践的高手,佩服!学习!
回复

使用道具 举报

15#
ID:58796 发表于 2014-3-6 20:23 | 只看该作者
51hei论坛有你更精彩
回复

使用道具 举报

16#
ID:59133 发表于 2014-3-10 22:13 | 只看该作者
谢谢楼主提供!学习学习!
回复

使用道具 举报

17#
ID:59072 发表于 2014-3-11 09:19 来自手机 | 只看该作者
不错!很好的资料
回复

使用道具 举报

18#
ID:55565 发表于 2014-3-11 20:26 | 只看该作者
好啊,不错
回复

使用道具 举报

19#
ID:61200 发表于 2014-4-28 22:41 | 只看该作者
这个做的很好,很实用,很好的资料
回复

使用道具 举报

20#
ID:61140 发表于 2014-6-9 20:01 | 只看该作者
牛B
好牛X哦,这东东确实不错
回复

使用道具 举报

21#
ID:63333 发表于 2014-6-26 18:21 | 只看该作者
好东西  谢谢  
回复

使用道具 举报

22#
ID:66729 发表于 2014-9-27 21:59 | 只看该作者
很好,非常不错的。
回复

使用道具 举报

23#
ID:60706 发表于 2015-1-28 13:12 | 只看该作者

很好,非常不错的。
回复

使用道具 举报

24#
ID:79137 发表于 2015-5-6 23:19 | 只看该作者
可以给我发一份编码器的资料么  673389308@qq.com
回复

使用道具 举报

25#
ID:114726 发表于 2016-4-17 13:49 | 只看该作者
赶快看看。。。。。。。。。。。。。。
回复

使用道具 举报

26#
ID:129558 发表于 2016-10-8 13:19 | 只看该作者
谢谢楼主
回复

使用道具 举报

27#
ID:153652 发表于 2016-12-11 21:28 来自手机 | 只看该作者
曾经在电子工程周报上看到过基于单片机的里程表,但没有源程序,今天终于看到了先下载下来,很想学着自己做一个,谢谢楼主提供
回复

使用道具 举报

28#
ID:66429 发表于 2016-12-12 19:11 | 只看该作者
资源很好

回复

使用道具 举报

29#
ID:40779 发表于 2016-12-15 09:29 | 只看该作者
这个不错,下来学习学习
回复

使用道具 举报

30#
ID:130231 发表于 2017-3-20 16:21 | 只看该作者
实在是高手!学了就能用上。感谢你的分享
回复

使用道具 举报

31#
ID:180744 发表于 2017-3-22 20:02 | 只看该作者
动手达人,顶
回复

使用道具 举报

32#
ID:201864 发表于 2017-5-17 18:16 | 只看该作者
下载的原理图怎么打不开啊?请问用哪个软件打开啊?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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