久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
消防應(yīng)急系統(tǒng),DC--DC, 恒流模擬
[打印本頁(yè)]
作者:
lhlbest
時(shí)間:
2017-3-14 23:27
標(biāo)題:
消防應(yīng)急系統(tǒng),DC--DC, 恒流模擬
剛做完一款消防應(yīng)急燈的程序,采用15W自帶CCAP 可調(diào)方便實(shí)現(xiàn)恒流輸出。恒流模塊遇到瓶頸希望大家給點(diǎn)建議,同時(shí)按鍵進(jìn)入月檢,年檢還沒(méi)實(shí)現(xiàn)!歡迎大家評(píng)論!
#include "reg51.h"
#include "intrins.h"
//#define FOSC 11059200L
#define FOSC 24000000L
typedef unsigned char BYTE;
typedef unsigned int WORD;
WORD code Vbg_ROM _at_ 0x03f7; //1K程序空間的MCU
WORD second,minute,hour,moutch;
BYTE ADCbg;
BYTE ADCx;
WORD Vx; //恒流電壓mV
BYTE ADCy;
WORD Vy; //電池電壓mV
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
sfr P_SW1 = 0xA2; //外設(shè)功能切換寄存器1
#define CCP_S0 0x10 //P_SW1.4
#define CCP_S1 0x20 //P_SW1.5
sfr CCON = 0xD8; //PCA控制寄存器
sbit CCF0 = CCON^0; //PCA模塊0中斷標(biāo)志
sbit CCF1 = CCON^1; //PCA模塊1中斷標(biāo)志
sbit CR = CCON^6; //PCA定時(shí)器運(yùn)行控制位
sbit CF = CCON^7; //PCA定時(shí)器溢出標(biāo)志
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CL = 0xE9; //PCA定時(shí)器低字節(jié)
sfr CH = 0xF9; //PCA定時(shí)器高字節(jié)
sfr CCAPM0 = 0xDA; //PCA模塊0模式寄存器
sfr CCAP0L = 0xEA; //PCA模塊0捕獲寄存器 LOW
sfr CCAP0H = 0xFA; //PCA模塊0捕獲寄存器 HIGH
sfr CCAPM1 = 0xDB; //PCA模塊1模式寄存器
sfr CCAP1L = 0xEB; //PCA模塊1捕獲寄存器 LOW
sfr CCAP1H = 0xFB; //PCA模塊1捕獲寄存器 HIGH
sfr CCAPM2 = 0xDC; //PCA模塊2模式寄存器
sfr CCAP2L = 0xEC; //PCA模塊2捕獲寄存器 LOW
sfr CCAP2H = 0xFC; //PCA模塊2捕獲寄存器 HIGH
sfr PCA_PWM0 = 0xf2; //PCA模塊0的PWM寄存器
sfr PCA_PWM1 = 0xf3; //PCA模塊1的PWM寄存器
sfr PCA_PWM2 = 0xf4; //PCA模塊2的PWM寄存器
sfr ADC_CONTR = 0xBC; //ADC控制寄存器
sfr ADC_RES = 0xBD; //ADC高8位結(jié)果
sfr ADC_LOW2 = 0xBE; //ADC低2位結(jié)果
sfr P1ASF = 0x9D; //P1口第2功能控制寄存器
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標(biāo)志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540個(gè)時(shí)鐘
#define ADC_SPEEDL 0x20 //360個(gè)時(shí)鐘
#define ADC_SPEEDH 0x40 //180個(gè)時(shí)鐘
#define ADC_SPEEDHH 0x60 //90個(gè)時(shí)鐘
sbit SDJC = P1^0;
sbit SDZDC = P1^1;
sbit CD = P1^2;
sbit DC = P1^5;
sbit K = P3^0;
sbit BELL = P3^1;
sbit BL = P3^2;
sbit GL = P3^3;
sbit RL = P3^6;
void InIt();
void Delay(WORD n);
//void GetADC(BYTE ch);
void GetMv();
void GetPWMInIt();
void BEL();
void YorM();
void GetPWM();
/*----------------------------
初始化
----------------------------*/
void InIt(){
CD = 1;
DC = 1;
BL = 1;
GL = 1;
RL = 1;
}
/*----------------------------
軟件延時(shí)
----------------------------*/
void Delay(WORD n)
{
WORD x;
while (n--)
{
x = 5000;
while (x--);
}
}
/*----------------------------
ADC檢測(cè)
----------------------------*/
BYTE GetADC(BYTE ch){
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay(2); //ADC上電并延時(shí)
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //等待4個(gè)NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG)); //等待ADC轉(zhuǎn)換完成
ADC_CONTR &= ~ADC_FLAG; //清除ADC標(biāo)志
return ADC_RES;
}
/*----------------------------
電壓檢測(cè)
----------------------------*/
void GetMv(){
//第一步:通過(guò)ADC的第2通道測(cè)試外部輸入電壓的ADC測(cè)量值
ADC_RES = 0; //清除結(jié)果寄存器
P1ASF = 0x08; //設(shè)置P1.3口為模擬通道
GetADC(3);
GetADC(3);
ADCx = GetADC(3); //恒流AD
ADC_RES = 0; //清除結(jié)果寄存器
P1ASF = 0x10; //設(shè)置P1.4口為模擬通道
GetADC(4);
GetADC(4);
ADCy = GetADC(4); //電池檢測(cè)AD
//第二步:通過(guò)ADC的第9通道測(cè)試Bandgap電壓的ADC測(cè)量值
ADC_RES = 0; //清除結(jié)果寄存器
P1ASF = 0x00; //不設(shè)置P1ASF,即可從ADC的第9通道讀取內(nèi)部Bandgap電壓的ADC測(cè)量值
GetADC(3);
GetADC(3);
ADCbg = GetADC(3);
//第三步:通過(guò)公式計(jì)算外部輸入的實(shí)際電壓值
//Vx = Vbg_RAM * ADCx / ADCbg; //使用RAM中的Bandgap電壓參數(shù)進(jìn)行計(jì)算
Vx = Vbg_ROM * ADCx / ADCbg; //使用ROM中的Bandgap電壓參數(shù)進(jìn)行計(jì)算
//Vy = Vbg_RAM * ADCy / ADCbg;
Vy = Vbg_ROM * ADCy / ADCbg;
}
/*----------------------------
PWM輸出初始化
----------------------------*/
void GetPWMInIt(){
ACC = P_SW1;
ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0
P_SW1 = ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
CCON = 0; //初始化PCA控制寄存器
//PCA定時(shí)器停止
//清除CF標(biāo)志
//清除模塊中斷標(biāo)志
CL = 0; //復(fù)位PCA寄存器
CH = 0;
CMOD = 0x02; //設(shè)置PCA時(shí)鐘源
//禁止PCA定時(shí)器溢出中斷
PCA_PWM2 = 0x80; //PCA模塊2工作于6位PWM
CCAP2H = CCAP2L = 0x10; //PWM2的占空比為60% ((40H-10H)/40H)
CCAPM2 = 0x42; //CCP2/P3.7輸出
CR = 0;
}
/*----------------------------
PWM輸出
----------------------------*/
void GetPWM(){
CR = 1;
if((Vx!=100)&&(20<Vx<=300)){ //Vx不等于100則減1
CCAP0L = CCAP0L-1;
if(CCAP0L==0x04){
CCAP0L = 0x04; //最大占空比輸出
}
}
CCAP0H = CCAP0L;
if((Vx<=20)||(Vx>300)){ //LED故障
CR = 0;
BEL();
GL = 0;
Delay(100);
GL = 1;
}else if((Vy<=2000)||(Vy>=4300)){ //電池故障
CR = 0;
BEL();
CD = 0;
RL = 0;
Delay(100);
RL = 1;
}else{
CR = 1;
}
}
/*----------------------------
BELL警報(bào)
----------------------------*/
void BEL(){
BELL = 1;
Delay(100);
BELL = 0;
}
/*----------------------------
自動(dòng)年檢,月檢
----------------------------*/
void YorM(){
switch(moutch){
case 0: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 1: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 2: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 3: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 4: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 5: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 6: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 7: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 8: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 9: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 10: SDZDC = 0;
GetPWM();
Delay(200);
break;
case 11: SDZDC = 0;
GetPWM();
Delay(2000);
break;
}
}
/*----------------------------
主函數(shù)
----------------------------*/
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
InIt();
GetPWMInIt();
while(1){
GetMv(); //AD檢測(cè)
if(SDJC == 1){ //市電照明
Delay(20);
if(SDJC == 1){
YorM(); //年檢 月檢
SDZDC = 1;
DC = 1;
GetPWM(); //PWM輸出
if(2000<=Vy<3900){
CD = 1;
RL = 0;
}
if(3900<=Vy<4200){
Delay(200);
if(3900<=Vy<4200){
CD = 1;
RL = 1;
}
}
if(4200<=Vy<4300){
Delay(200);
if(4200<=Vy<4300){
CD = 0;
RL = 1;
}
}
}
}else{
SDZDC = 0;
DC = 0;
CD = 0;
GetPWM();
if(K == 0){
CR = 0;
}
}
}
}
void timer0() interrupt 1 //定時(shí)器0(中斷1)
{
BYTE tim1; //定義臨時(shí)變量
TL0=TL0+0XB0;TH0=0X3C; //重裝定時(shí)器初值
tim1++; //每中斷一次tim1加1
if(tim1==20){ //中斷20(1秒)
tim1=0;
second++;
if(second>=60){ //如果秒到60
second=0;
minute++; //秒變0,分加1
if(minute>=60){ //如果分到60
…………余下代碼請(qǐng)下載附件…………
復(fù)制代碼
0.png
(67.78 KB, 下載次數(shù): 56)
下載附件
2017-3-15 21:33 上傳
下載:
消防應(yīng)急系統(tǒng).zip
(44.42 KB, 下載次數(shù): 147)
2017-3-15 21:34 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日批的视频
|
污片在线观看
|
国产伊人精品
|
日韩一区精品
|
中文字幕视频在线看
|
精品在线
|
人人看人人草
|
免费观看的黄色网址
|
国产九九精品视频
|
美女视频一区二区三区
|
欧美一区二区另类
|
日本精品久久久久久久
|
av特级毛片
|
色狠狠一区
|
精品国产乱码久久久久久丨区2区
|
日韩av视屏
|
精品视频一区二区三区在线观看
|
欧美乱码精品一区二区三区
|
日本黄色大片免费看
|
欧美一区二区三区在线观看
|
伊人看片
|
日韩欧美亚洲综合
|
国产一区二区三区在线免费
|
亚洲一区二区三区在线免费
|
一区二区三区国产好
|
天天操夜夜爽
|
成人精品一区
|
久久三级av
|
爱综合
|
亚洲成人高清
|
久久亚洲国产精品日日av夜夜
|
久久精品国产久精国产
|
国产精品视频在
|
国产激情91久久精品导航
|
人成在线
|
一区二区视频在线观看
|
欧美久久久久
|
国内精品伊人久久久久网站
|
在线免费看毛片
|
久久久久国产精品一区二区
|
欧美一极视频
|