电动车电池防过充节电控制器Word下载.docx
- 文档编号:21644378
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:161.98KB
电动车电池防过充节电控制器Word下载.docx
《电动车电池防过充节电控制器Word下载.docx》由会员分享,可在线阅读,更多相关《电动车电池防过充节电控制器Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
<
0.125W
所以取1/4W的电阻
设单片机中AD转换寄存器中的值为ad_data则
ad_data=(Vin/5)*256
若取10位的转换精度,则只需将256换为1024即可。
由此将模拟量转换成数字量,通过数码管显示出来。
三、学习心得体会:
在学习这门课之前,我几乎对51单片机一无所知。
实际上讲,在选这门课之前,我也不知道这门课具体是讲什么的,只知道是电子制作,自己本着想锻炼一下的想法就选了这门课,当老师开始讲课时才知道我们学习的是单片机,是我们大三下学期才开的课程。
真的很庆幸能提前接触,这是一大收获。
在这个课上我了解到了一个单片机开发板的成品的的全过程,从最初的原理图的设计到PCB板的生成,到事物的焊接,最后到程序的调试及输入。
虽然我们在课堂上学过原理图的设计和PCB板的生成,但那大多是照着书上做的,所以比较简单。
然而,在这个实验选修课上则完全是自己动手做的,在自己画原理图时,开始真是觉得有点小困难,因为好多元件元件库里都没有,都需要自己画,也就是说要自己封装,比较麻烦。
对于我这初学者来说,是一种考验。
画原理图基本上用了我两大节课的时间,相对来说,时间比较长,但画完后有一种小小的成就感,这也是我对接下来的学习制作更感兴趣。
如果原理图画的很成功,那么PCB就没那么难了,自动生成很快,但是布局就比较麻烦了,如果PCB能够很好的完成,那么这个制作就基本上完成了三分之一的进程。
这是成功的第一步。
等同学们都完成后,老师给发了一些器件,开始了板子的实物焊接。
由于一些原因,这个焊接我在课上没有完成,下课后我又到同学的实验室里继续焊接,大概两个多小时的时间完全焊完了,看着自己亲手做的板子,心里有一种说不出的高兴,真的有一种成就感,也许这是因为我第一次焊接这样的板子吧!
所以决定以后多往这方面注重些。
接下来的课程就是程序的设计及调试。
在写程序之前老师讲解了关于51单片机的一些知识及应用和一些单片机程序的程序代码,老师还推荐了一些书籍,让同学们下去自学单片机知识。
在写程序期间,觉得很难,比较折磨人,因为不会,毫无头绪,也许是因为还没有深入学习单片机的原因吧!
对于程序的编写及调试,老师要求的不是很严,因为老师知道我们还没有学习单片机,他的这个课程也是为了提前带我们进入单片机的学习,为以后的学习打下基础。
虽然我们还不能熟练掌握51单片机的变成及调试,但是我们对于51单片机的产品开发及制作全过程有了更近一步的了解,不再迷茫和去猜测。
课堂时间毕竟很少,深入的学习就要靠我们自己。
如果想在这方面有过突破有所发展,那么单片机的深入学习是必然的。
通过这个课程的学习,使我对51单片机产品的开发有了一定的了解,同时我也对这门课程产生了憧憬,我觉得这个制作全过程很有意思。
所以我决定,如果大三还有这样的课程我还会去选,如果没有了,我会利用课余时间去做一些这样的课题,又不懂得地方去问老师或一些比较懂得同学。
总之,从这门课中我在一定程度上学到了不少知识。
另外,王俊杰老师的认真辅导也让我们倍感亲切。
还有就是我自己独立的完成了一个电路板的制作,第一次尝到了做东西的成就感。
这给了我很大的信心。
我会以此为契机,好好学习专业知识,提升自己的专业水准。
四、单片机编程代码:
#include<
stc12c2052ad.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineAD_SPEED0x60//0110,000011270个时钟周期转换一次,
/*数码管IO口设置******************************************************/
sbitST_CP=P1^1;
sbitSH_CP=P1^2;
sbitDS=P1^3;
sbitLED4=P1^4;
//数码管
sbitLED3=P1^5;
sbitLED2=P1^6;
sbitLED1=P1^7;
sbitled0=P3^0;
//LED
sbitled1=P3^1;
sbits3=P3^2;
//按键
sbits2=P3^3;
sbits1=P3^4;
sbitBEE=P3^5;
//蜂鸣器
sbitk1=P3^7;
//继电器
/*********************/
uchartemp=0;
//595数据标识
uintad_data;
//AD数据
intcount1=0;
//数码管位标识
intcount2=0;
intcount3=0;
intcount4=0;
uintcount_m=0;
ucharcount_f=0;
ucharcount_s=0;
uintcount=0;
//ms数码管显示标识
ucharcount0=0;
//0.5s
ucharstate=0;
//数码管显示标识
ucharshi=0;
//时分秒初始设置
ucharfen=0;
ucharmiao=0;
ucharm=0;
ucharq=0;
//按键标识
uchark=0;
intk2;
ucharad_flag=0;
bittime_flag=0;
bitauto_flag=0;
ucharcountb=0;
uintvoltage=0;
//电压初始
uintvoltage1=0;
uchari=0;
ucharflag1=0;
ucharV;
ucharvalue_buf[50];
ucharcount5,i5,j5,temp5;
//采集的电压
ucharVCC=4.88;
//电源参考电压
ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//字符
ucharcodeDSY_CODE1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//带小数点的字符
//**********************************************
voidADC();
/*AD转化函数*/
voidInitADC();
//AD设置函数
voidkeyserve(void);
//按键设定
voidkeyscan();
//键盘扫描
voidDelay(uintx);
//延时
voidIn_595();
//595函数
voidOut_595();
voidbeek(void);
//蜂鸣器继电器
voidinit();
//初始化
//*******************************************************
voidmain()
{init();
while
(1)
{
keyscan();
beek();
if(auto_flag==1)
{for(count5=0;
count5<
50;
count5++)
{
value_buf[count5]=V;
Delay(10);
}
for(j5=0;
j5<
50-1;
j5++)
for(i5=0;
i5<
50-j5;
i5++)
{
if(value_buf[i5]>
value_buf[i5+1])
{
temp5=value_buf[i5];
value_buf[i5]=value_buf[i5+1];
value_buf[i5+1]=temp5;
}
}
voltage=(value_buf[0]*1.96);
if(voltage>
=395){voltage1=4801;
}
if(voltage>
=409){voltage1=4902;
=416){voltage1=5003;
=425){voltage1=5104;
=433){voltage1=5205;
=442){voltage1=5306;
=460){voltage1=5504;
=468){voltage1=5601;
=478){voltage1=5702;
count1=(voltage1/1000);
count2=((voltage1%1000)/100);
count3=((voltage1%1000%100)/10);
count4=((voltage1%1000%100%10));
Delay(300);
if(voltage>
=480)
{BEE=1;
Delay(200);
BEE=0;
TR1=1;
shi=0;
//充满电后的延时时间
fen=1;
miao=15;
ADC_CONTR&
=0x6e;
auto_flag=0;
flag1=1;
if(count_f>
2)//自动控制定时时间设定,时间是大于2分钟时继电器断开
TR0=0;
TR1=0;
BEE=1;
k1=0;
Delay(2000);
BEE=0;
auto_flag=0;
count_m=0;
//把秒清0,不让蜂鸣器一直响
}
}
//***********AD初始化*******************************
voidinit()
{TMOD=0x11;
TH0=0xfa;
TL0=0x00;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
ET0=1;
//开定时器中断
ET1=1;
TR0=1;
TR1=0;
EA=1;
P3M0=0X00;
//设置BEE端口
P3M1=0X20;
AUXR|=0x10;
EADC_SPI=1;
LED1=1;
LED2=1;
LED3=1;
LED4=1;
BEE=0;
k1=1;
voidInitADC()
{
P1=0xff;
ADC_CONTR=0xe8;
Delay(80);
P1M0|=0x01;
//这两个寄存器用来设置P1口四种状态,每一位对应一个P1引脚,按状态组合操作
P1M1&
=0xfe;
//设置P1.1为开漏状态
}
voidADC()interrupt5
{
if(ad_flag==1)
{
ad_flag=0;
ad_data=ADC_DATA;
V=ad_data;
ADC_CONTR&
=0xe7;
//清除标志位同时关闭AD采集
//开中断ad
voidTime0()interrupt1//显示数码管
TH0=0xfa;
TL0=0x00;
count++;
if(count==20)//循环20次检测一次电压
{
count=0;
ad_flag=1;
}
state++;
switch(state)
{
case1:
temp=DSY_CODE[count1];
In_595();
Out_595();
LED1=0;
LED2=1;
LED3=1;
}break;
case2:
{
temp=DSY_CODE1[count2];
LED1=1;
LED2=0;
case3:
temp=DSY_CODE[count3];
LED3=0;
case4:
state=0;
temp=DSY_CODE[count4];
LED4=0;
//****************************************
voidTime1()interrupt3
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
if(auto_flag==0)
{count4=fen%10;
count3=fen/10;
count2=shi%10;
count1=shi/10;
if(++count0==10)
count0=0;
miao--;
if(miao==0)
{
fen--;
if((fen==0xff))
{
fen=59;
shi--;
if(shi==0)
{
shi=0;
}}
miao=59;
}}
if(auto_flag==1)
if(++count0==10)
{
count0=0;
count_m++;
if(count_m==59)
{
count_m=0;
count_f++;
if(count_f==60)
{
count_f=0;
count_s++;
if(count_s==24)
{}
}}}}}
//*********************************************
voidDelay(uintx)
uchari;
while(x--)
for(i=120;
i>
0;
i--);
}}
//******************************************
voidIn_595()
for(i=0;
i<
8;
i++)
temp<
=1;
DS=CY;
SH_CP=1;
_nop_();
SH_CP=0;
voidOut_595()
ST_CP=0;
_nop_();
ST_CP=1;
ST_CP=0;
//*********************************数据处理
voidkeyscan()
if(s1==0)
//Delay(5);
Delay(200);
if(s1==0)
while(!
s1);
//Delay(5);
k=1;
keyserve();
}}
if(s2==0)
if(s2==0)
s2);
//Delay(5);
k=2;
if(s3==0)//确认键
{//Delay(5);
if(s3==0)
s3);
k=3;
}//-------------按键功能------------
voidkeyserve()
switch(k)
switch(m)
case0:
led0=1;
led1=0;
m=1;
break;
//led0表示绿色LED,LED1表示红色LED,红灯亮,定时模式
case1:
led1=1;
led0=0;
m=0;
//自控模式,绿灯亮
}
break;
if(time_flag==1)
{shi++;
if(shi==13)
{shi=0;
ADC_CONTR&
=0x7e;
TR1=1;
time_flag=1;
auto_flag=0;
shi=0;
fen=1;
miao=10;
//定时模式
time_flag=0;
InitADC(),auto_flag=1;
//自控模式
//default:
voidbeek(void)//控制继电器和蜂鸣器
{if((shi==0)&
&
(fen==0)&
(miao==20))//到一分钟20秒时跳
{k1=0;
TR0=0;
TR1=0;
BEE=1;
Delay(1000);
Delay(500);
BEE=1;
miao++;
else{BEE=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电动车 电池 节电 控制器