去年做了一個89C52+ad0804的鋰電池容量測試儀,沒有成功,今年新買入了12C5A60S2,自帶AD,開始著手再次制作。學習了很多論壇里高手的程序,由于水平有限,沒有運用中斷,只會利用1S延時,在開發板實驗成功。放電可以仿照LM358電子負載+鋰電池充電板,這樣電路可以簡單一些。
程序很簡單,鑒于水平有限,如有問題還請各位多多指教。
- /*--------------------------------------------------------------*/
- #include <STC12C5A60S2.H>
- #include "LCD5510_V3.H"
- #include "STC12ADC.C"
- #define uint unsigned int
- #define uchar unsigned char
- #define ulong unsigned long
- //定義變量
- char a[10]={'0','1','2','3','4','5','6','7','8','9'};
- int dianya, ge, shi, bai, qian, c=800; //c設定最小電流
- float cap4=0, cap5=0, cap6=0, cap7=0;
- uint tims=0, cur;
- //ulong cap;
- /*--------------------------------------------------------------*/
- //時間顯示函數
- void displaytime(uint dat)
- {
- uint tims1,tims2,timm1,timm2,timh; //定義秒1秒2,分1分2,時
- timh=dat/3600;
- timm2=(dat-timh*3600)/600;
- timm1=(dat-timh*3600)/60%10;
- tims2=(dat-timh*3600-timm2*600-timm1*60)/10;
- tims1=dat%10;
- LCD_prints(0, 5, "RUN");
- LCD_printc(7, 5, a[timh]);
- LCD_prints(8, 5, ":");
- LCD_printc(9, 5, a[timm2]);
- LCD_printc(10, 5, a[timm1]);
- LCD_prints(11, 5, ":");
- LCD_printc(12, 5, a[tims2]);
- LCD_printc(13, 5, a[tims1]);
- }
- /*
- //容量顯示函數
- void displaycap(uint dat)
- {
- LCD_printc(8, 1, a[dat/1000]);
- LCD_printc(9, 1, a[dat/100%10]);
- LCD_printc(10, 1, a[dat/10%10]);
- LCD_printc(11, 1, a[dat%10]);
- }
- */
- //表頭顯示函數
- void displaybiaotou()
- {
- LCD_prints(0, 0, "No");
- LCD_prints(3, 0, "I-mA");
- LCD_prints(8, 0, "CY-mAH");
- LCD_prints(1, 1, "1");
- LCD_prints(1, 2, "2");
- LCD_prints(1, 3, "3");
- LCD_prints(1, 4, "4");
- }
- /*
- //5ms定時器中斷函數
- void InitTimer0(void)
- {
- TMOD = 0x01;
- TH0 = 0x15;
- TL0 = 0x0A0;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- */
- //1S延時函數
- void delay1s(void) //誤差 -0.000000000056us
- {
- uchar a,b,c,n;
- for(c=70;c>0;c--)
- for(b=168;b>0;b--)
- for(a=249;a>0;a--); //a=249,每10分鐘快1秒;a=250,每6分鐘慢1秒,每10分鐘慢1.4秒
- for(n=1;n>0;n--);
- }
- void delay1ms(void) //誤差 0us
- {
- unsigned char a,b;
- for(b=129;b>0;b--)
- for(a=45;a>0;a--);
- }
- //主函數
- void main()
- {
- LCD5510_Init(); //5110初始化
- Init_ADC(); //ADC初始化
- displaybiaotou(); //顯示表頭
-
- while(1)
- {
- uchar lu;
- for(lu=4;lu<8;)
- {
- Get_ADC_Result(lu); //開始轉換
-
- //**********以下為放電電流顯示語句*********************
- dianya = Count(lu)*1000;
- LCD_printn(3, lu-3, dianya, 5);
- //**********以下為電池容量語句*********************
- if(lu == 4)
- {
- if(dianya > c) //最小電流,假設電阻為1歐姆5W,電壓與電流數值相同
- {
- cap4 = (float)dianya/3600 + cap4;
- }
- else
- {
- cap4 = cap4;
- }
- LCD_printn(8, lu-3, cap4, 4);
- }
- if(lu == 5)
- {
- if(dianya > c)
- {
- cap5 = (float)dianya/3600 + cap5;
- }
- else
- {
- cap5 = cap5;
- }
- LCD_printn(8, lu-3, cap5, 4);
- }
- if(lu == 6)
- {
- if(dianya > c)
- {
- cap6 = (float)dianya/3600 + cap6;
- }
- else
- {
- cap6 = cap6;
- }
- LCD_printn(8, lu-3, cap6, 4);
- }
- if(lu == 7)
- {
- if(dianya > c)
- {
- cap7 = (float)dianya/3600 + cap7;
- }
- else
- {
- cap7 = cap7;
- }
- LCD_printn(8, lu-3, cap7, 4);
- }
- lu++;
- }
-
- displaytime(tims);
- tims++;
- delay1s();
- delay1ms(); //加入延時,每10分鐘慢0.6秒
- }
- }
復制代碼
0.png (6.87 KB, 下載次數: 70)
下載附件
2019-6-18 23:21 上傳
全部資料51hei下載地址:
5110鋰電池容量測試儀.rar
(57.61 KB, 下載次數: 115)
2019-6-18 22:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|