太阳能手机充电器毕设,51代码,附正文

link
None.gif #include  < AT89X51.h >
None.gif
None.gif
float  Vtest;
None.gifsbit ISet     
=      0x90 ;
None.gifsbit VSet    
=      0x91 ;
None.gifsbit ChipOn    
=      0x93 ;
None.gifsbit ChipOff
=      0x92 ;
None.gif
float  R12     =      20000 ;
None.gif
None.gif
float  GetV(bit channel)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
if (channel)
InBlock.gif    B
=0x01;
InBlock.gif
else
InBlock.gif    B
=0x00;
InBlock.gif
InBlock.gif#pragma ASM
InBlock.gifADCS BIT P1.
7 ;使能接口
InBlock.gifADCLK BIT P1.
6 ;时钟接口
InBlock.gifADDO BIT P1.
5 ;数据输出接口(复用)
InBlock.gifADDI BIT P1.
4 ;数据输入接口
InBlock.gif;以下语句在调用转换程序前设定
InBlock.gif
InBlock.gifADCONV:
InBlock.gifSETB ADDI ;初始化通道选择
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifCLR ADCS ;拉低
/CS端
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifSETB ADCLK ;拉高CLK端
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifCLR ADCLK ;拉低CLK端,形成下降沿
InBlock.gifMOV A,B
InBlock.gifMOV C,ACC.
1 ;确定取值通道选择
InBlock.gifMOV ADDI,C
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifSETB ADCLK ;拉高CLK端
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifCLR ADCLK ;拉低CLK端,形成下降沿2
InBlock.gifMOV A,B
InBlock.gifMOV C,ACC.
0 ;确定取值通道选择
InBlock.gifMOV ADDI,C
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifSETB ADCLK ;拉高CLK端
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifCLR ADCLK ;拉低CLK端,形成下降沿3
InBlock.gifSETB ADDI
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifMOV R7,#
8 ;准备送下后8个时钟脉冲
InBlock.gifAD_1:
InBlock.gifMOV C,ADDO ;接收数据
InBlock.gifMOV ACC.
0,C
InBlock.gifRL A ;左移一次
InBlock.gifSETB ADCLK
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifCLR ADCLK ;形成一次时钟脉冲
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifDJNZ R7,AD_1 ;循环8次
InBlock.gifMOV C,ADDO ;接收数据
InBlock.gifMOV ACC.
0,C
InBlock.gifMOV B,A
InBlock.gifMOV R7,#
8
InBlock.gifAD_13:
InBlock.gifMOV C,ADDO ;接收数据
InBlock.gifMOV ACC.
0,C
InBlock.gifRR A ;左移一次
InBlock.gifSETB ADCLK
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifCLR ADCLK ;形成一次时钟脉冲
InBlock.gifNOP
InBlock.gifNOP
InBlock.gifDJNZ R7,AD_13 ;循环8次
InBlock.gifCJNE A,B,ADCONV ;数据校验
InBlock.gifSETB ADCS ;拉高
/CS端
InBlock.gifCLR ADCLK ;拉低CLK端
InBlock.gifSETB ADDO ;拉高数据端,回到初始状态
InBlock.gifRET
InBlock.gif#pragma ENDASM
InBlock.gif
InBlock.gif
return ACC/0xff * 5;
ExpandedBlockEnd.gif}

None.gif
None.gif
// 预充电
None.gif
void  Charge0()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int i;
InBlock.gif    VSet
=0;
InBlock.gif     
for(i=0;i<10;i++)
InBlock.gif        
if(i<1
InBlock.gif          ISet
=1
InBlock.gif      
else 
InBlock.gif          ISet
=0;
ExpandedBlockEnd.gif}

None.gif
// 恒流充电
None.gif
void  Charge1()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    VSet
=0x00;
InBlock.gif    ISet
=1;
ExpandedBlockEnd.gif}

None.gif
// 涓流保护
None.gif
void  Charge3()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int i;
InBlock.gif    VSet
=0;
InBlock.gif     
for(i=0;i<10;i++)
InBlock.gif        
if(i<1
InBlock.gif          ISet
=1
InBlock.gif      
else 
InBlock.gif          ISet
=0;
ExpandedBlockEnd.gif}

None.gif
// 恒压充电
None.gif
void  Charge2()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
float temp_V;
InBlock.gif    
float temp_I;
InBlock.gif    temp_V
=GetV(1);
InBlock.gif    temp_I
=((temp_V/0xff*5)/R12)*1000;
InBlock.gif
InBlock.gif    
if(temp_I>50)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        ISet
=0;
InBlock.gif        VSet
=1;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Charge3();
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
void  main ( void dot.gif {
InBlock.gifChipOff
=0;
InBlock.gifChipOn
=1;
InBlock.gif
while(1)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif    Vtest
=GetV(0);
InBlock.gif    
if    (Vtest<=2.5)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Charge0();
//预充电
ExpandedSubBlockEnd.gif
    }

InBlock.gif    
else if (Vtest>2.5 & Vtest<4.2)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Charge1();
//恒流充电
ExpandedSubBlockEnd.gif
    }

InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Charge2();
//恒压充电
ExpandedSubBlockEnd.gif
    }

ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/JonsonXP/archive/2007/06/26/795708.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值