惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - JonsonXP

IT大师路线图,你还差多远? 团队决策的三大法宝 多核,个人计算并行时代才刚刚开始(Parallel Computing) 从主频之争到多核之争,摩尔定律还能走多远? JonsonXP is Back 推荐几个.NET开源图表组件 Asp.net未处理异常的2种解决方式 DATAGRID实现数据筛选分类汇总的数据显示 ASP.NET控件 C#中获取文件或目录的Icon 使用Visual C#实现断点续传 为服务器控件添加javascript客户端事件 在ASP.NET中动态创建柱状图和饼图 总结:Connection大全 Page Events: Order and PostBack 用DataBinder绑定索引器 DataGrid 自定义分页 在用户控件中撰写JS时控件的客户端ID问题 正则表达式语法
太阳能手机充电器毕设,51代码,附正文
JonsonXP · 2007-06-26 · via 博客园 - JonsonXP

link

#include <AT89X51.h>

float Vtest;
sbit ISet     
=    0x90;
sbit VSet    
=    0x91;
sbit ChipOn    
=    0x93;
sbit ChipOff
=    0x92;
float R12    =    20000;

float GetV(bit channel)
{
if (channel)
    B
=0x01;
else
    B
=0x00;

#pragma ASM
ADCS BIT P1.
7 ;使能接口
ADCLK BIT P1.
6 ;时钟接口
ADDO BIT P1.
5 ;数据输出接口(复用)
ADDI BIT P1.
4 ;数据输入接口
;以下语句在调用转换程序前设定

ADCONV:
SETB ADDI ;初始化通道选择
NOP
NOP
CLR ADCS ;拉低
/CS端
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿
MOV A,B
MOV C,ACC.
1 ;确定取值通道选择
MOV ADDI,C
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿2
MOV A,B
MOV C,ACC.
0 ;确定取值通道选择
MOV ADDI,C
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿3
SETB ADDI
NOP
NOP
MOV R7,#
8 ;准备送下后8个时钟脉冲
AD_1:
MOV C,ADDO ;接收数据
MOV ACC.
0,C
RL A ;左移一次
SETB ADCLK
NOP
NOP
CLR ADCLK ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,AD_1 ;循环8次
MOV C,ADDO ;接收数据
MOV ACC.
0,C
MOV B,A
MOV R7,#
8
AD_13:
MOV C,ADDO ;接收数据
MOV ACC.
0,C
RR A ;左移一次
SETB ADCLK
NOP
NOP
CLR ADCLK ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,AD_13 ;循环8次
CJNE A,B,ADCONV ;数据校验
SETB ADCS ;拉高
/CS端
CLR ADCLK ;拉低CLK端
SETB ADDO ;拉高数据端,回到初始状态
RET
#pragma ENDASM

return ACC/0xff * 5;
}


//预充电
void Charge0()
{
    
int i;
    VSet
=0;
     
for(i=0;i<10;i++)
        
if(i<1
          ISet
=1
      
else 
          ISet
=0;
}

//恒流充电
void Charge1()
{
    VSet
=0x00;
    ISet
=1;
}

//涓流保护
void Charge3()
{
    
int i;
    VSet
=0;
     
for(i=0;i<10;i++)
        
if(i<1
          ISet
=1
      
else 
          ISet
=0;
}

//恒压充电
void Charge2()
{
    
float temp_V;
    
float temp_I;
    temp_V
=GetV(1);
    temp_I
=((temp_V/0xff*5)/R12)*1000;

    
if(temp_I>50)
    
{
        ISet
=0;
        VSet
=1;
    }

    
else
    
{
        Charge3();
    }

}



void main (void{
ChipOff
=0;
ChipOn
=1;
while(1)
{
    Vtest
=GetV(0);
    
if    (Vtest<=2.5)
    
{
        Charge0();
//预充电
    }

    
else if (Vtest>2.5 & Vtest<4.2)
    
{
        Charge1();
//恒流充电
    }

    
else
    
{
        Charge2();
//恒压充电
    }

}

}