找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6265|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

STC12C5A60S2單片機(jī)制作的鋰電池容量測(cè)試源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:353874 發(fā)表于 2019-6-18 22:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
去年做了一個(gè)89C52+ad0804的鋰電池容量測(cè)試儀,沒有成功,今年新買入了12C5A60S2,自帶AD,開始著手再次制作。學(xué)習(xí)了很多論壇里高手的程序,由于水平有限,沒有運(yùn)用中斷,只會(huì)利用1S延時(shí),在開發(fā)板實(shí)驗(yàn)成功。放電可以仿照LM358電子負(fù)載+鋰電池充電板,這樣電路可以簡(jiǎn)單一些。
程序很簡(jiǎn)單,鑒于水平有限,如有問題還請(qǐng)各位多多指教。
  1. /*--------------------------------------------------------------*/
  2. #include <STC12C5A60S2.H>
  3. #include "LCD5510_V3.H"
  4. #include "STC12ADC.C"

  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. #define ulong unsigned long


  8. //定義變量
  9. char a[10]={'0','1','2','3','4','5','6','7','8','9'};
  10. int dianya, ge, shi, bai, qian, c=800;           //c設(shè)定最小電流
  11. float cap4=0, cap5=0, cap6=0, cap7=0;
  12. uint tims=0, cur;
  13. //ulong cap;
  14. /*--------------------------------------------------------------*/

  15. //時(shí)間顯示函數(shù)
  16. void displaytime(uint dat)
  17. {
  18.         uint tims1,tims2,timm1,timm2,timh; //定義秒1秒2,分1分2,時(shí)
  19.         timh=dat/3600;
  20.         timm2=(dat-timh*3600)/600;
  21.         timm1=(dat-timh*3600)/60%10;
  22.         tims2=(dat-timh*3600-timm2*600-timm1*60)/10;
  23.         tims1=dat%10;
  24.         LCD_prints(0, 5, "RUN");
  25.         LCD_printc(7, 5, a[timh]);
  26.         LCD_prints(8, 5, ":");
  27.         LCD_printc(9, 5, a[timm2]);
  28.         LCD_printc(10, 5, a[timm1]);
  29.         LCD_prints(11, 5, ":");
  30.         LCD_printc(12, 5, a[tims2]);
  31.         LCD_printc(13, 5, a[tims1]);        
  32. }

  33. /*
  34. //容量顯示函數(shù)
  35. void displaycap(uint dat)
  36. {
  37.         LCD_printc(8, 1, a[dat/1000]);
  38.         LCD_printc(9, 1, a[dat/100%10]);
  39.         LCD_printc(10, 1, a[dat/10%10]);
  40.         LCD_printc(11, 1, a[dat%10]);        
  41. }
  42. */

  43. //表頭顯示函數(shù)
  44. void displaybiaotou()
  45. {
  46.         LCD_prints(0, 0, "No");
  47.         LCD_prints(3, 0, "I-mA");
  48.         LCD_prints(8, 0, "CY-mAH");
  49.         LCD_prints(1, 1, "1");
  50.         LCD_prints(1, 2, "2");
  51.         LCD_prints(1, 3, "3");
  52.         LCD_prints(1, 4, "4");
  53. }

  54. /*
  55. //5ms定時(shí)器中斷函數(shù)
  56. void InitTimer0(void)
  57. {
  58.     TMOD = 0x01;
  59.     TH0 = 0x15;
  60.     TL0 = 0x0A0;
  61.     EA = 1;
  62.     ET0 = 1;
  63.     TR0 = 1;
  64. }
  65. */

  66. //1S延時(shí)函數(shù)
  67. void delay1s(void)   //誤差 -0.000000000056us
  68. {
  69.     uchar a,b,c,n;
  70.     for(c=70;c>0;c--)
  71.         for(b=168;b>0;b--)
  72.             for(a=249;a>0;a--);                         //a=249,每10分鐘快1秒;a=250,每6分鐘慢1秒,每10分鐘慢1.4秒
  73.     for(n=1;n>0;n--);
  74. }

  75. void delay1ms(void)   //誤差 0us
  76. {
  77.     unsigned char a,b;
  78.     for(b=129;b>0;b--)
  79.         for(a=45;a>0;a--);
  80. }


  81. //主函數(shù)
  82. void main()
  83. {
  84.         LCD5510_Init();                  //5110初始化
  85.         Init_ADC();               //ADC初始化
  86.         displaybiaotou();         //顯示表頭
  87.         
  88.         while(1)
  89.                 {
  90.                 uchar lu;
  91.                         for(lu=4;lu<8;)
  92.                         {
  93.                                  Get_ADC_Result(lu);  //開始轉(zhuǎn)換
  94.                                 
  95. //**********以下為放電電流顯示語句*********************                                                               
  96.                                 dianya = Count(lu)*1000;
  97.                                 LCD_printn(3, lu-3, dianya, 5);

  98. //**********以下為電池容量語句*********************
  99.                                 if(lu == 4)
  100.                                 {
  101.                                         if(dianya > c)                         //最小電流,假設(shè)電阻為1歐姆5W,電壓與電流數(shù)值相同
  102.                                         {
  103.                                                 cap4 = (float)dianya/3600 + cap4;
  104.                                         }
  105.                                         else
  106.                                         {
  107.                                                 cap4 = cap4;
  108.                                         }
  109.                                         LCD_printn(8, lu-3, cap4, 4);
  110.                                 }

  111.                                 if(lu == 5)
  112.                                 {
  113.                                         if(dianya > c)
  114.                                         {
  115.                                                 cap5 = (float)dianya/3600 + cap5;
  116.                                         }
  117.                                         else
  118.                                         {
  119.                                                 cap5 = cap5;
  120.                                         }
  121.                                         LCD_printn(8, lu-3, cap5, 4);
  122.                                 }

  123.                                 if(lu == 6)
  124.                                 {
  125.                                         if(dianya > c)
  126.                                         {
  127.                                                 cap6 = (float)dianya/3600 + cap6;
  128.                                         }
  129.                                         else
  130.                                         {
  131.                                                 cap6 = cap6;
  132.                                         }
  133.                                         LCD_printn(8, lu-3, cap6, 4);
  134.                                 }

  135.                                 if(lu == 7)
  136.                                 {
  137.                                         if(dianya > c)
  138.                                         {
  139.                                                 cap7 = (float)dianya/3600 + cap7;
  140.                                         }
  141.                                         else
  142.                                         {
  143.                                                 cap7 = cap7;
  144.                                         }
  145.                                         LCD_printn(8, lu-3, cap7, 4);
  146.                                 }

  147.                                 lu++;
  148.                         }
  149.                         
  150.                         displaytime(tims);
  151.                         tims++;
  152.                         delay1s();
  153.                         delay1ms();         //加入延時(shí),每10分鐘慢0.6秒
  154.                 }
  155. }
復(fù)制代碼


全部資料51hei下載地址:
5110鋰電池容量測(cè)試儀.rar (57.61 KB, 下載次數(shù): 115)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2019-6-18 23:23 | 只看該作者
好東東,不過沒有原理圖 樓主能介紹下電路嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:353874 發(fā)表于 2019-6-19 08:59 | 只看該作者
STC12C5A60S2,P1.4—1.7作為ADC轉(zhuǎn)換,用5110液晶屏,電子負(fù)載參考“數(shù)碼之家”中stdzlqz的電路圖,
回復(fù)

使用道具 舉報(bào)

地板
ID:415539 發(fā)表于 2019-8-9 22:11 | 只看該作者
好東東,不過沒有原理圖 樓主能介紹下電路嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:48413 發(fā)表于 2019-8-27 20:04 | 只看該作者
學(xué)習(xí)一下謝謝樓主
回復(fù)

使用道具 舉報(bào)

6#
ID:732567 發(fā)表于 2020-4-19 23:58 來自手機(jī) | 只看該作者
樓主能發(fā)一下完整的電路圖嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:746837 發(fā)表于 2020-5-8 13:22 | 只看該作者
請(qǐng)問樓主有沒有仿真圖呢?
回復(fù)

使用道具 舉報(bào)

8#
ID:305511 發(fā)表于 2020-5-31 09:08 | 只看該作者
好東西,如果有原理圖就更好了!
回復(fù)

使用道具 舉報(bào)

9#
ID:238730 發(fā)表于 2020-6-5 01:18 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

10#
ID:105698 發(fā)表于 2020-6-5 15:13 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

11#
ID:687469 發(fā)表于 2020-10-13 23:57 | 只看該作者
求電路圖
回復(fù)

使用道具 舉報(bào)

12#
ID:143767 發(fā)表于 2020-10-14 11:09 | 只看該作者
不錯(cuò)的設(shè)計(jì)如果能用LED數(shù)碼管顯示就好了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表