久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 44641|回復: 22
打印 上一主題 下一主題
收起左側

我的電動車鉛酸電池改成鋰電池+我制作一個速度、里程、電壓表

  [復制鏈接]
跳轉到指定樓層
樓主
ID:85764 發表于 2015-7-18 19:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我的電動車鉛酸電池改成鋰電池+我制作一個速度、里程、電壓表




這是我買的鉛酸電池盒



先把鋰電疊加好(鋰電池是20A)



鋰電池控制板接線



電池盒內布置



放好,封蓋固定



電源電壓測量



我同時做了一個電壓、速度、里程表















這是我設計的時速、里程、電壓表控制板



手工開孔



無線數傳4.rar (569.95 KB, 下載次數: 106)

里程、速度、電壓調試成功.rar (44.88 KB, 下載次數: 113)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏18 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:85764 發表于 2015-7-18 19:46 | 只看該作者
  1. //單片機STC12C5A16S2//
  2. //晶振11.0592//

  3. #include<reg52.h>
  4. #include<intrins.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int

  7. #define ADC_POWER   0x80     //AD電源控制
  8. #define ADC_FLAG    0x10     //AD轉換完成
  9. #define ADC_START   0x08     //AD轉換控制
  10. #define ADC_SPEEDLL 0x00     //420 clocks
  11. #define ADC_SPEEDL  0x20     //280 clocks
  12. #define ADC_SPEEDH  0x40     //140 clocks
  13. #define ADC_SPEEDHH 0x60     //70 clocks
  14. #define ADC0      0x00       //P1.0
  15. #define ADC1      0x01       //P1.1

  16. sfr ADC_CONTR   =   0xBC;   //AD 轉換控制寄存器        
  17. sfr ADC_RES     =   0xBD;   //AD 轉換結果寄存器高         
  18. sfr ADC_RESL    =   0xBE;   //AD 轉換結果寄存器低        
  19. sfr P1ASF       =   0x9D;        //P1口模數轉換功能控制寄存器

  20. sbit RS=P0^0;                     //寄存器
  21. sbit CS=P0^1;                     //片選
  22. sbit SCLK=P0^2;                     //串行時鐘輸入
  23. sbit SID=P0^3;                     //串行數據輸入
  24. sbit LCD=P0^7;               //LED背光燈電源

  25. uint AD_Result;
  26. uint data AD_RecSBUF[10];         //接收數據
  27. uchar data AD_Point;
  28. uchar data Rec,num,state;    //變量  

  29. uchar data round=131; //車輪周長——測量得出,按CM計算,不大于255;
  30. uint data licheng_cm=0;             //里程厘米級為單位
  31. uint data licheng_bm=0;      //里程百米級為單位
  32. uint data sudu;              //定義速度
  33. bit time1s;                                 //定義1秒鐘標志
  34. uchar data speed;                     //接收1秒鐘產生的脈沖數
  35. uchar data count;                 //count:計脈沖數
  36. uchar data num;                             //定時器變量
  37. uchar xdata AD_SBUF[13];

  38. uchar xdata display_buf[32]=0x20;
  39. //顯示存貯器安排        第一行           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15
  40. //
  41. //顯示值                                           V   2   8    .  9   k   /   h       B   T   5   8   .   3   v  

  42. //                  第二行     16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
  43. //
  44. //顯示值                                           L   0   6   2        .   6  k   m           N   2    5   .  3   k   m
  45. #define SP01_ADD  1           //按照上述顯示緩存區定義的速度顯示第一位位置
  46. #define AD01_ADD 10           //按照上述顯示緩存區定義的AD值顯示第一位位置
  47. #define LC01_ADD 17           //按照上述顯示緩存區定義的總里程顯示第一位位置
  48. #define NOW_LC01 26    //按照上述顯示緩存區定義的當前里程顯示第一位位置


  49. //********************延時子程序***********//
  50. void delay(uint i)
  51. {
  52.         uint j,k;
  53.         for(j=0;j<i;j++)
  54.         for(k=0;k<50;k++);
  55. }
  56. //*******初始化子程序********* //
  57. void Serial_init()                      //初始化
  58. {
  59.            TMOD=0X01;                              //啟用定時器0 工作方式1
  60.         TH0=0x4c;                      //定時50毫秒數
  61.     TL0=0x00;
  62.         EX0=1;                                      //外部中斷0中斷允許位; 1表示允許中斷,0表示禁止中斷
  63.         IT0=1;                                  
  64.         TR0=1;                                  //啟動定時器TR0
  65.         ET0=1;                                      //開定時器0中斷
  66.         EA=1;                                      //開總中斷
  67.    
  68. }  

  69. //*******(定時器用速度)******************//
  70. void T0_time() interrupt 1  //T0中斷子程序開始
  71. {        TH0=0x4c;                        //重新裝初值50ms
  72.         TL0=0x08;
  73.         num++;
  74.         if(num>=40)              //20次,即20X50ms=1秒
  75.         {
  76.                 speed=count;                 //speed接收1秒鐘產生脈沖數
  77.             count=0;                         //計數器清零
  78.                 time1s=1;                         //1秒中到,設一個標志
  79.                 num=0;                                 //定時清零
  80.         }
  81. }
  82. //*******中斷子程序(計數器用里程)******************//
  83. external0() interrupt 0          
  84. {                    
  85.   count++;
  86.   
  87. }


  88. void licheng_change()
  89. {
  90. uchar i;
  91. uint t;

  92.     licheng_cm=licheng_cm+speed*round;           //里程=萬位數后四位+脈沖數X輪周長
  93.        
  94.         if(licheng_cm>9999)                                    //如果厘米級大于9999,則百米級加1
  95.          {                                                                    
  96.                 licheng_bm++;
  97.                 if(licheng_bm>9999)        licheng_bm=0;   //如果百米級大于9999超出顯示范圍,測清零
  98.                 licheng_cm=licheng_cm-10000;            //如果百米級大于9999,測減去萬位,保留萬位以下后四位數
  99.          }
  100.    
  101.    i=licheng_bm/1000;
  102.    t=licheng_bm%1000;
  103.    display_buf[LC01_ADD]=i+0x30;       //取百位數
  104.    i=t/100;
  105.    t=t%100;
  106.    display_buf[LC01_ADD+1]=i+0x30;       //取十位數
  107.    i=t/10;
  108.    display_buf[LC01_ADD+2]=i+0x30;        //取個位數
  109.    display_buf[LC01_ADD+3]='.';           
  110.    i=t%10;
  111.    display_buf[LC01_ADD+4]=i+0X30;               //后一位數
  112.    display_buf[LC01_ADD+5]='k';
  113.    display_buf[LC01_ADD+6]='m';
  114.      
  115.    sudu=((round*(uint)speed)/100)*18;                  //speed定義成char(一個字節占8位)溢出,所以轉換成int型(2個字節占8位)
  116.    i=sudu/100;
  117.    t=sudu%100;
  118.    display_buf[SP01_ADD]=i+0x30;        //取百位數
  119.    i=t/10;
  120.    display_buf[SP01_ADD+1]=i+0x30;      //取十位數
  121.    display_buf[SP01_ADD+2]='.';
  122.    i=t%10;
  123.    display_buf[SP01_ADD+3]=i+0X30;       //取個位數
  124.    display_buf[SP01_ADD+4]='k';               //后一位數
  125.    display_buf[SP01_ADD+5]='/';
  126.    display_buf[SP01_ADD+6]='h';

  127. }
  128. //***************寫指令到LCD模塊***********//
  129. void tranfser_command(int data1)
  130. {
  131.         char i;
  132.         CS=0;
  133.         RS=0;
  134.         for(i=0;i<8;i++)
  135.         {
  136.                 SCLK=0;
  137.                 if(data1&0x80)
  138.                        SID=1;
  139.                 else   SID=0;
  140.                 delay(5);
  141.                 SCLK=1;
  142.                 delay(5);
  143.                 data1=data1<<=1;
  144.         }

  145. }

  146. //****************寫數據到LCD模塊***********//
  147. void tranfser_data(int data2)
  148. {
  149.    char i;
  150.    CS=0;
  151.    RS=1;
  152.    for(i=0;i<8;i++)
  153.         {
  154.                 SCLK=0;
  155.                 if(data2&0x80)   SID=1;
  156.                 else             SID=0;
  157.                 delay(1);
  158.                 SCLK=1;
  159.                 delay(1);
  160.                 data2=data2<<=1;
  161.         }
  162. }

  163. //*********LCD模塊初始化***********//
  164. void initial_lcd()
  165. {
  166.         CS=0;
  167.         delay(10);
  168.         tranfser_command(0x38);           //設置16X2顯示,5X7點陣,8位數據接口
  169.         delay(10);
  170.         tranfser_command(0x0c);           //顯示模式設置:顯示開,無光標,光標不閃爍
  171.         delay(10);
  172.         tranfser_command(0x01);           //清屏幕指令,將以前的顯示內容清除
  173.         delay(10);
  174.         tranfser_command(0x06);           //顯示模式設置:光標右移,字符不移
  175.         delay(10);
  176. }

  177. //*******在指定的列和位顯示指定的字母、數字、符號****//
  178. void disp_char()
  179. {
  180.         uint i;
  181.         tranfser_command(0x80+0+0);
  182.         for(i=0;i<16;i++)
  183.         {
  184.                 tranfser_data(display_buf[i]);
  185.         }
  186.         tranfser_command(0x80+0x40+0);
  187.         for(i=16;i<32;i++)
  188.         {
  189.                 tranfser_data(display_buf[i]);
  190.         }
  191. }
  192. void clr_screen()
  193.         {
  194.         uchar i;
  195.         for(i=0;i<32;i++) display_buf[i]=0x20;
  196.        
  197.         disp_char();
  198.         }
  199. void Delay_ADC(uint n)
  200. {
  201.     uint x;

  202.     while (n--)
  203.     {
  204.         x = 5000;
  205.         while (x--);
  206.     }
  207. }

  208. void InitADC()
  209. {
  210.     P1ASF = 0x01;                                  //選擇P1.0作為A/D輸入通道
  211.     ADC_RES = 0x00;                                           //清0
  212.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;  //0x10|0x00=0x10:開電源和設置A/D轉換速度
  213.     Delay_ADC(2);            
  214. }
  215. GetADCResult()           
  216. {
  217.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC0 | ADC_START;        //打開電源,420CLK周期轉換,選擇P1.0作輸入,AD轉換控制
  218.     _nop_();                   //設置ADC_CONTR寄存器后需加4個CPU時鐘周期的延時,才能保證值被寫入ADC_CONTR寄存器            
  219.     _nop_();
  220.     _nop_();
  221.     _nop_();
  222.     while (!(ADC_CONTR&ADC_FLAG));       //等待轉換結束=0x10 ADC_FLAG 位=1
  223.     ADC_CONTR &= ~ADC_FLAG;              //清零轉換結束標志位(ADC_FLAG 位=0)
  224.            AD_RecSBUF[AD_Point]=(ADC_RES*4+ADC_RESL+0X03);         //返回A/D轉換結果(10位ADC數據高8位在ADC_RES中,低2位在ADC_RESL中)
  225.     AD_Point++;
  226.         if(AD_Point>9)  AD_Point=0;              
  227. }
  228. void AD_change()
  229. {
  230.    uchar s;
  231.    AD_Result=0;
  232.    for(s=0;s<10;s++) AD_Result= AD_Result+ AD_RecSBUF[s];

  233.    display_buf[AD01_ADD]=AD_Result/1000+0x30;
  234.    display_buf[AD01_ADD+1]=(AD_Result%1000/100)+0x30;
  235.    display_buf[AD01_ADD+2]='.';
  236.    display_buf[AD01_ADD+3]=(AD_Result%100/10)+0x30;               
  237.    display_buf[AD01_ADD+4]=(AD_Result%10)+0x30;
  238.    display_buf[AD01_ADD+5]='V';
  239.             
  240. }
  241. void main()
  242. {
  243.            LCD=0;
  244.         initial_lcd();              //LCD屏初始化
  245.     Serial_init();                        //中斷初始化
  246.         clr_screen();                         //LCD清屏
  247.         while(1)
  248.         {  GetADCResult();
  249.                 if(time1s==1)                    //如果1秒中到,則里程、速度刷新顯示一次
  250.                   {          
  251.                           time1s=0;
  252.                           disp_char();
  253.                           licheng_change();
  254.                           AD_change();
  255.                   }
  256.         }  
  257. }
復制代碼
回復

使用道具 舉報

板凳
ID:86090 發表于 2015-7-18 22:37 | 只看該作者
如果有試用圖就好了
回復

使用道具 舉報

地板
ID:58502 發表于 2015-7-19 12:25 | 只看該作者
厲害啊
回復

使用道具 舉報

5#
ID:70042 發表于 2015-7-20 19:40 | 只看該作者
不錯啊,支持一下                                             
回復

使用道具 舉報

6#
ID:66302 發表于 2015-7-21 14:01 | 只看該作者
厲害啊
回復

使用道具 舉報

7#
ID:78005 發表于 2015-7-27 08:54 | 只看該作者
你這個好像不是動力鋰電池吧!

回復

使用道具 舉報

8#
ID:19947 發表于 2015-8-6 10:31 | 只看該作者
厲害呀
回復

使用道具 舉報

9#
ID:51348 發表于 2015-8-26 18:47 | 只看該作者
你們懂的,樓主好人
回復

使用道具 舉報

10#
ID:44523 發表于 2015-8-28 14:47 | 只看該作者
這個不得了啊,好好學習下
回復

使用道具 舉報

11#
ID:92556 發表于 2015-10-15 22:24 | 只看該作者
測速用什么做傳感器
回復

使用道具 舉報

12#
ID:87499 發表于 2015-10-16 15:14 | 只看該作者
這樣的電池,不亞于一個煤氣瓶式的炸蛋吧?
回復

使用道具 舉報

13#
ID:73762 發表于 2015-10-20 18:07 | 只看該作者

這個不得了啊,好好學習下,但是M不夠啊
回復

使用道具 舉報

14#
ID:140081 發表于 2016-9-21 22:07 | 只看該作者
怎么看不到。。。。。。。。。。。。
回復

使用道具 舉報

15#
ID:140081 發表于 2016-9-21 22:11 | 只看該作者
樓主  材料哪里有得買
回復

使用道具 舉報

16#
ID:140370 發表于 2016-9-25 03:44 | 只看該作者
那電池看著害怕
回復

使用道具 舉報

17#
ID:141077 發表于 2016-10-1 19:17 | 只看該作者
太膩害了
回復

使用道具 舉報

18#
ID:169421 發表于 2017-3-9 16:15 | 只看該作者
制作的挺好的,學習了。
回復

使用道具 舉報

19#
ID:172773 發表于 2017-3-19 16:15 | 只看該作者
還是下不了
回復

使用道具 舉報

20#
ID:68429 發表于 2017-9-25 17:50 | 只看該作者
正好需要這方面的資料謝謝
回復

使用道具 舉報

21#
ID:486881 發表于 2019-3-8 16:26 | 只看該作者
非常感謝樓主的分享,正好需要這樣的資料
回復

使用道具 舉報

22#
ID:472506 發表于 2019-3-11 22:49 | 只看該作者
非常非常好。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线看片 | 老司机久久 | 国户精品久久久久久久久久久不卡 | 羞羞视频网站 | 久久久综合色 | 在线免费观看黄视频 | 国产精品福利在线 | 亚洲成人免费视频在线观看 | 中文字幕av一区 | 国产精品一二三区 | 国产性网 | 男女那个视频 | 国产成都精品91一区二区三 | 性做久久久久久免费观看欧美 | japanhdxxxx裸体 | 欧美电影一区 | 国产激情精品 | 自拍 亚洲 欧美 老师 丝袜 | 国产精品视频yy9299一区 | 日本成人在线免费视频 | 在线播放中文字幕 | 成人精品一区二区户外勾搭野战 | 亚洲精品乱码久久久久久久久久 | 国产免费一区二区三区 | 久久久久久电影 | 成人激情视频免费在线观看 | av影音 | 欧美日韩a | 欧美色视频免费 | 国产精品99久久久久久宅男 | 亚洲成色777777在线观看影院 | 一区二区三区在线观看视频 | 精品视频久久久久久 | 久久99久久 | 四虎成人精品永久免费av九九 | 亚洲电影一区 | www.久久| 欧美日韩高清免费 | 日韩午夜激情 | 亚洲不卡 | 久久91精品国产 |