|
建議用MOS管作為充放電。按圖用51單片機(jī)外部中斷下降沿觸發(fā),運(yùn)放當(dāng)作電壓比較用。原理圖和程序不一定能夠正常運(yùn)行,但邏輯關(guān)系已很清楚。
- #include "reg51.h"
- sbit key=P1^0; //充放電開關(guān)
- sbit recharge =P1^1; //充電管
- sbit discharge=P1^2; //放電管
- unsigned int num,num1;//定時(shí)器計(jì)數(shù)變量
- unsigned int count=0; //消抖計(jì)數(shù)變量
- long time; //時(shí)間變量us
- bit flag=0;//放電結(jié)束標(biāo)志
- bit sign=0;//開關(guān)狀態(tài)標(biāo)志
- void main()
- {
- TMOD= 0x01;
- TH0 = 0x00;
- TL0 = 0x00;
- TR0 = 0;//關(guān)閉定時(shí)器
- ET0 = 1;
- EA = 1;
- IT0 = 1;
- EX0 = 1;
- while (1)
- {
- if(!key) //放電
- {
- if(++count>=500 && sign==0) //放電
- {
- sign=1; //操作記憶
- recharge =0;//關(guān)充電
- discharge=1;//開放電
- num=0; //清0
- num1=0; //清0
- time=0; //清0
- TR0 = 1; //啟動(dòng)定時(shí)器
- while(!flag);//等待放電結(jié)束
- flag=0; //清0
- time=(long)(num1*65536)+num;//單位us
- }
- }
- else
- {
- count=0; //清0
- sign=0; //復(fù)位
- recharge =1;//開充電
- discharge=0;//關(guān)放電
- }
- }
- }
- void t0int() interrupt 1
- {
- num1++;//累加
- }
- void exint0() interrupt 0
- {
- TR0 = 0; //關(guān)閉定時(shí)器
- num=TH0<<8|TL0; //讀取寄存器值
- flag=1; //放電結(jié)束
- }
復(fù)制代碼
|
|