历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2020年10月14日 | STC12C5A60S2单片机制作的锂电池容量测试源程序

2020-10-14 来源:51hei

去年做了一个89C52+ad0804的锂电池容量测试仪,没有成功,今年新买入了12C5A60S2,自带AD,开始着手再次制作。学习了很多论坛里高手的程序,由于水平有限,没有运用中断,只会利用1S延时,在开发板实验成功。放电可以仿照LM358电子负载+锂电池充电板,这样电路可以简单一些。

程序很简单,鉴于水平有限,如有问题还请各位多多指教。

/*--------------------------------------------------------------*/

#include

#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);

                                }

推荐阅读

史海拾趣

中移物联网(Chinamobile)公司的发展小趣事

2024年2月,中移物联网携自主打造的专业通信模组品牌——中移物联OneMO亮相巴塞罗那世界移动通信大会。这一品牌展示了公司在物联网模组领域的创新能力和技术实力。通过与国际知名企业的交流与合作,中移物联网进一步拓宽了国际视野,为公司的国际化发展提供了有力支持。

Eaton公司的发展小趣事

除了能源管理领域外,伊顿公司还在商用车领域取得了显著成就。自1985年首次将技术引进中国以来,伊顿的变速器产品已经进入中国市场30多年。通过与国内各个商用车生产企业的紧密合作,伊顿成功地将其先进的变速器技术应用于各种商用车型中,提高了车辆的燃油经济性和驾驶舒适性。特别是在物流行业,伊顿的变速器产品帮助车队降低了油耗成本,提高了运营效率。

AB Connectors Ltd公司的发展小趣事

AB Connectors Ltd成立于上世纪九十年代初,当时电子行业正处于飞速发展的黄金时期。公司创始人张三和李四凭借对连接器技术的深刻理解和对市场需求的敏锐洞察,决定创立这家公司。初创时期,公司面临着资金短缺、技术瓶颈和市场认可度低等挑战。然而,通过不懈的努力,AB Connectors Ltd成功研发出了一款具有竞争力的新型连接器产品,并在国际电子展览会上获得了广泛关注。这为公司打开了市场大门,奠定了发展的基础。

AMRI Enterprise Co Ltd公司的发展小趣事

AMRI Enterprise Co Ltd在电子行业中崭露头角,源于其一次重大的技术突破。公司研发团队经过数年的努力,成功开发出了一款具有高效能、低功耗特点的芯片,引起了市场的广泛关注。这一技术突破不仅提升了AMRI的产品竞争力,还为公司赢得了众多合作伙伴的青睐。随着产品线的不断扩展和市场份额的逐步增加,AMRI逐渐在电子行业中站稳了脚跟。

AIRPAX公司的发展小趣事

随着技术的不断进步,AIRPAX在传感器和电气保护领域取得了重大突破。其研发的全新传感器技术大大提高了测量精度和响应速度,为汽车、家电等行业提供了更高效、更安全的解决方案。这一技术突破使得AIRPAX的产品开始在更广泛的行业中得到应用,公司也逐渐发展成为电气保护领域的领军企业。

Anritsu公司的发展小趣事

进入21世纪,AIRPAX开始积极拓展全球市场。通过与各国企业的合作与交流,AIRPAX的产品逐渐进入欧洲、亚洲等地区,服务于更多国家的客户。同时,AIRPAX还积极寻求与其他行业领先企业的战略合作,共同推动电气保护技术的发展。这些合作不仅提升了AIRPAX的品牌影响力,也为其带来了更多的商业机会。

问答坊 | AI 解惑

关于信号输出对电路造成影响的问题!

我现在遇到一个奇怪的问题,如果我将电路中的某个信号赋值给一个输出管脚的话,那么整个电路的逻辑都不对了。(如果不输出的话,通过其它管脚观察时逻辑是正确的) 大家有没有碰到过这种情况?是怎么回事?请高手指点! 注:我是在quartus8.1中用 ...…

查看全部问答>

128M Nand flash如何寻址?

CPU为32位ARM芯片 Nand flash芯片为三星K9F1G08X0M (X8),有效存储128M + 4M OOB 地址分配如下面所示:             IO0      IO1    IO2       ...…

查看全部问答>

用modem通过电话线传输数据,有延迟,是什么原因?

公司用捷联的猫传输数据,终端用的33600md,公司总部用捷联的列架猫,终端的猫自动拨号,与列架猫建立连接后(v22bis协议,2400速率,异步),传输终端的数据。每次都是刚开始传输的时候比较正常,但逐渐数据就会延迟,延迟有时可达3分钟,但进入mo ...…

查看全部问答>

收购:现需要收购 SmartARM2400 的包装盒若干个,以及装书的那个硬包装盒若干个,谢谢!

发现 SmartARM 2400 的包装盒装东西非常合适,想弄几个, SmartARM套件中的那个装书的硬纸盒也非常不错,用来整理书架是非常不错的选择,非常想多弄几个。 可以和我邮件联系,  rampc@sian.com 不要太贵哦,我明天再把我想要的 ...…

查看全部问答>

l有谁 知道用libmad 库解码mp3文件的使用流程, 急,谢谢!

就是使用libmad解码mp3文件,什么时候是解码一桢结束,这一桢数据怎么保存?…

查看全部问答>

W77E58看门狗的问题

我最近使用W77E58,使用了看门狗复位,原先使用正常,但在其他与看门狗无关的地方作了一些程序修改,之后看门狗工作就不正常了,正常喂狗时没什么问题,但我一停止喂狗后,程序会停下来,只不过它没有从头开始.就死在那里了,不知道为什么,哪位帮帮我.我的看 ...…

查看全部问答>

关于STM32ADC用DMA采多通道时数据错位的问题New

关于STM32 ADC用DMA采多通道时数据错位的问题,之前的错误现象是4.5A变成9A或0.5A,后来对ADC的参数配置加了定时配置后,有很大的改善,但客户现场又用了20多天后,又出现数据错误的现象,电流110A的变30多A?   急!急!急!…

查看全部问答>

一个有关UCOSII的问题

我在使用uC/OSII的时候遇到一些问题:使用ICCAVR专业版6.31编译的时候出现如下的信息:C:\\icc\\bin\\imakew -f MainController.mak    iccavr -o MainController -LC:\\icc\\lib\\ -g -uc ...…

查看全部问答>

用430做的控制板过不了群脉冲测试

用MSP430G2553做了一个控制板,一个TM1640芯片用作显示,两个595用作显示和继电器控制,但就是过不了群脉冲测试,群脉冲一打上去,显示全乱了,触摸按键也不灵光了,一不打,就好了,我不知道问题出在哪?附件为原理图。…

查看全部问答>