欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機負(fù)離子加濕器設(shè)計程序源代碼
[打印本頁]
作者:
liuqq
時間:
2015-5-20 21:32
標(biāo)題:
單片機負(fù)離子加濕器設(shè)計程序源代碼
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P0^0;
sbit SCL=P0^1;
sbit dio=P0^2;
sbit clk=P0^3;
sbit stb=P0^4;
sfr P3M1=0xb1;//強推挽輸出
sfr P3M0=0xb2;
sfr ADC_CONTR=0xBC; //ADC用
sfr ADC_RES=0xBD;
sfr P1ASF=0x9D;
sbit kzd=P3^7; //低速控制
sbit kzz=P3^6; //中速控制
sbit kzg=P3^5; //高速控制
sbit kzf=P3^4; //負(fù)離子控制
sbit kzj=P3^1; //加濕控制
sbit ledd=P2^1;//低速指示燈
sbit ledz=P2^2;//中速指示燈
sbit ledg=P2^3;//高速指示燈
sbit ledj=P2^4;//加濕指示燈
sbit ledf=P2^5;//負(fù)離子指示燈
sbit ledkq=P1^1;//空氣質(zhì)量指示燈
sbit ledds=P1^3;//定時指示燈
sbit fmq=P3^0; //蜂鳴器
uint zzshu=1000;//初始化時,賦值大于轉(zhuǎn)動脈沖數(shù)
uint fzshu=1000;//初始化時,賦值大于轉(zhuǎn)動脈沖數(shù)
uchar qw; //氣味處理值
uint qwcaiji; //氣味采集值
uint key;
uchar TM_0,TM_2,TM_4; //TM1629B顯示用參數(shù)
uchar code table[]={0x7e,0x42,0x5d,0x57,0x63,0x37,0x3f,0x52,0x7f,0x77};
uchar code zheng[]={0x30,0x60,0xc0,0x90};
uchar code fan[]={0x30,0x90,0xc0,0x60};
void TM1629B_xie(uchar xie)
{
uchar i;
for(i=0;i<8;i++)
{
clk=0;
if(xie&0x01)
{dio=1;}
else
{dio=0;}
clk=1;
xie>>=1;
}
}
void TM1629B_COM(uchar cmd)
{
stb=0;
TM1629B_xie(cmd);
stb=1;
}
void TM1629B_mie(void)
{
uchar i;
stb=0;
TM1629B_xie(0xc0); //地址命令,00H顯示地址
for(i=0;i<14;i++)
{TM1629B_xie(0x00);} //所有顯示為滅
stb=1;
}
void TM1629B_init(void)
{
clk=1;
stb=1;
dio=1;
TM1629B_COM(0x00);//顯示模式
TM1629B_COM(0x40);//寫數(shù)據(jù)、地址自動增加
TM1629B_mie();
TM1629B_COM(0x89);//顯示開,灰度2/16
}
void delay(int x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=1100;j>0;j--);
}
void init_ADC(void); //ADC初始化
uint get_ADC_qw(void); //獲取氣味AD結(jié)果
void SC09A(void);//按鍵掃描
uint a,b;//定時、風(fēng)速
bit g;//開機
bit qh;//切換標(biāo)志位
uint num; //時間定時
uchar ir; //紅外線用
uint startflag;
uint bitnum;
uchar irjsok,irjmok;
uchar ircode[4];
uchar irdata[33];
void irjm(void) //把ir時間值解碼
{
uchar k,i,j;
uchar value;
k=1;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1; //移位保存
if(irdata[k]>6) //判斷值1或0
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
irjmok=1;
}
}
void irkz(void) //一個碼值對應(yīng)一個控制
{
if(ircode[1]==0xFF)
{
if(ircode[2]==0x09)//第1個按鈕,開關(guān)
{
fmq=1;
delay(15);
fmq=0;
g=~g;
a=0;//開機復(fù)位,定時燈全滅
b=1;//開機低速運行
if(g==1)
{
zzshu=0;
fzshu=1000;
}
else
{
zzshu=1000;
fzshu=0;
}
}
if(g==1) //防止關(guān)機時,按鍵有聲音
{
if(ircode[2]==0x11) //第2個按鈕,風(fēng)速
{
fmq=1;
delay(15);
fmq=0;
b++;
if(b>3)//風(fēng)速循環(huán)
{
b=1;
}
}
if(ircode[2]==0x19)//第3個按鈕,加濕
{
fmq=1;
delay(15);
fmq=0;
kzj=~kzj;
ledj=~ledj;//加濕指示燈
}
if(ircode[2]==0x17)//第4個按鈕,負(fù)離子
{
fmq=1;
delay(15);
fmq=0;
ledf=~ledf;
kzf=~kzf;
}
if(ircode[2]==0x16) //第5個按鈕,定時
{
fmq=1;
delay(15);
fmq=0;
a=a+60;
if(a>360)
{
a=0;
}
qh=1;//按定時按鈕,顯示自動切換成定時
}
if(ircode[2]==0x04) //第6個按鈕,切換
{
fmq=1;
delay(15);
fmq=0;
qh=~qh;
}
}//if(g==1)
}//if(ircode[1]==0xFF)
}//irkz
void main()
{
uint t;//ADC采樣時間控制
P3M1=0;//P3.0強推挽輸出
P3M0=0x01;
fmq=1;//上電響
delay(50);
fmq=0;
delay(350);//電壓穩(wěn)定再進行IAP操作
init_ADC();
TM1629B_init();
TMOD=0x12;//定時器1為方式1,定時器0為方式2
EA=1;
TH1=(65535-45872)/256;
TL1=(65535-45872)%256;
ET1=1;
TH0=0x00;
TL0=0x00;
ET0=1;
TR0=1;
TR1=1; //定時器1開,定時、濾網(wǎng)時間共用
IT1=1; //外部中斷1設(shè)置
EX1=1; //外部中斷1允許
IT0=1; //外部中斷0設(shè)置
EX0=1; //外部中斷0允許
while(1)
{
if(irjsok) //紅外程序,用遙控器按鈕6解除濾網(wǎng)報警
{
irjm();
irjsok=0;
}
if(irjmok)
{
irkz();
irjmok=0;
}
//-----------------------------------------
SC09A();//按鍵掃描
//-----------------------------------------
if(zzshu<150)//正轉(zhuǎn)150個脈沖
{
int i;
zzshu++;
for(i=0;i<4;i++)
{
P1=P1&0x0f;
P1=P1|zheng[i];
delay(8);//
}
}
else
{
P1=P1&0x0f;
}
if(fzshu<150)//反轉(zhuǎn)150個脈沖
{
int i;
fzshu++;
for(i=0;i<4;i++)
{
P1=P1&0x0f;
P1=P1|fan[i];
delay(8);//
}
}
else
{
P1=P1&0x0f;
}
//---------------------------------------------
if(a==1)
{
if(num>1100) //最后1分鐘算做55秒
{
g=0;
a=0;//定時時間到關(guān)機,為了區(qū)別手動按到0值時不能關(guān)機
}
}
//紅外線測試時加g=1
if(g==1)//開機時,執(zhí)行以下程序
{
if(a!=0) //定時器T0開始工作
{
if(num>1205)//設(shè)置定時時間,1分鐘設(shè)置為1205
{
num=0;
a--;
}
}
if(a==0)//a=0時,一直保持num值加不上去
{
num=0;
}
if(qh==1)
{
ledkq=1;
ledds=0;
}
else
{
ledkq=0;
ledds=1;
}
if(b==1)//低速
{
kzd=0; //低風(fēng)
kzz=1;
kzg=1;
ledd=0;
ledz=1;
ledg=1;
}
if(b==2)//中速
{
kzd=1; //中風(fēng)
kzz=0;
kzg=1;
ledd=1;
ledz=0;
ledg=1;
}
if(b==3)//高速
{
kzd=1; //高風(fēng)
kzz=1;
kzg=0;
ledd=1;
ledz=1;
ledg=0;
}
TM1629B_COM(0x00);//顯示模式
TM1629B_COM(0x44);//寫數(shù)據(jù)、固定地址
stb=0;
TM1629B_xie(0xc0); //地址命令設(shè)置00H,這是個位
TM1629B_xie(table[TM_0]);
stb=1;
stb=0;
TM1629B_xie(0xc2); //地址命令設(shè)置02H,這是十位
TM1629B_xie(table[TM_2]);
stb=1;
stb=0;
TM1629B_xie(0xc4); //地址命令設(shè)置04H,這是百位
TM1629B_xie(table[TM_4]);
stb=1;
TM1629B_COM(0x89);//顯示開,灰度2/16
}
else//g不等于1時,關(guān)閉輸出
{
kzd=1; //低速控制
kzz=1; //中速控制
kzg=1; //高速控制
kzf=1; //負(fù)離子控制
kzj=1; //加濕控制
ledd=1;//低速指示燈
ledz=1;//中速指示燈
ledg=1;//高速指示燈
ledj=1;//加濕指示燈
ledf=1;//負(fù)離子指示燈
ledkq=1;//空氣質(zhì)量指示燈
ledds=1;//定時指示燈
qh=0; //開機顯示空氣質(zhì)量
TM1629B_COM(0x00);//關(guān)閉屏幕操作
TM1629B_COM(0x40);
TM1629B_mie();
TM1629B_COM(0x89);
}
qwcaiji=qwcaiji+get_ADC_qw();
t++;
if(t==200) //調(diào)整模擬量處理的時間間隔
{
qw=qwcaiji/200; //平均濾波
t=0;
qwcaiji=0;
}
if(qh==1) //空氣質(zhì)量與定時切換顯示
{
TM_0=a%10;
TM_2=a%100/10;
TM_4=a/100;
}
else
{
TM_0=qw%10;
TM_2=qw%100/10;
TM_4=qw/100;
}
}//while
}//main
void T1_time() interrupt 3 //定時、濾網(wǎng)用
{
TH1=(65535-45872)/256;
TL1=(65535-45872)%256;
num++;
}
void timer0() interrupt 1 //紅外程序用
{
ir++; //一個周期ir值=0.278ms
}
void int1() interrupt 2 //INT1下降沿接收紅外信號
{
if(startflag)
{
if(ir>42)//檢測引導(dǎo)嗎
{
bitnum=0;
}
irdata[bitnum]=ir;
ir=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irjsok=1;
startflag=0;
}
}
else
{
startflag=1;
ir=0;
}
}
void init_ADC(void)
{
P1ASF =0x01; //選擇P1.0通道
ADC_RES =0; //清理結(jié)果寄存器的值
ADC_CONTR=0x80; //開啟電源、540個時鐘、選用P1.0口
_nop_();
_nop_();
_nop_();
_nop_();
}
void SC09A(void)
{
if(key==0x0020)//開關(guān)
{
fmq=1;
delay(15);
fmq=0;
g=~g;
a=0;//開機復(fù)位,定時燈全滅
b=1;//開機低速運行
if(g==1)
{
zzshu=0;
fzshu=1000;
}
else
{
zzshu=1000;
fzshu=0;
}
key=0;
}
if(g==1)
{
if(key==0x1000)//風(fēng)速
{
fmq=1;
delay(15);
fmq=0;
b++;
if(b>3)//風(fēng)速循環(huán)
{
b=1;
}
key=0;
}
if(key==0x0800)//加濕
{
fmq=1;
delay(15);
fmq=0;
kzj=~kzj;
ledj=~ledj;//加濕指示燈
key=0;
}
if(key==0x0400)//負(fù)離子
{
fmq=1;
delay(15);
fmq=0;
ledf=~ledf;
kzf=~kzf;
key=0;
}
if(key==0x0080)//定時
{
fmq=1;
delay(15);
fmq=0;
a=a+60;
if(a>360)
{
a=0;
}
qh=1;//按定時按鈕,顯示自動切換成定時
key=0;
}
if(key==0x0040)//切換
{
fmq=1;
delay(15);
fmq=0;
qh=~qh;
key=0;
}
}// if(g==1)
}
uint get_ADC_qw(void)
{
uchar mn=0;
ADC_CONTR=0X88; //開電源、開始轉(zhuǎn)換ADC_START=1,選擇P1.0
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&0X10)); //轉(zhuǎn)換結(jié)束ADC_FLAG=1
mn=ADC_RES;
ADC_CONTR&=~0X10; //ADC_FLAG清零
_nop_();
_nop_();
_nop_();
_nop_();
return mn;
}
void int0() interrupt 0 //INT0下降沿接收SC09A
{
uchar i,j,temp;
uchar dizi=0x81;
uint keyzhi=0xffff;
bit bit_temp;
EA=0; // 屏蔽全局中斷
SCL=1;
for(i=0;i<50;i++){} //延時
SDA=0; // 拉低SDA,端口送出START 信號
for(i=0;i<50;i++){} //延時
for(j=0;j<8;j++)//發(fā)送8位地址
{
SCL=0;
temp=dizi&0x80;
for(i=0;i<50;i++){} //延時
if(temp==0x80)
SDA=1;
else
SDA=0;
dizi=dizi<<1;
for(i=0;i<50;i++){} //延時
SCL=1;
for(i=0;i<50;i++){} //延時
}
SDA=1; //釋放SDA 端口,將SDA設(shè)置為輸入端口
SCL=0;
for(i=0;i<50;i++){} //延時
SCL=1;
for(i=0;i<50;i++){} //延時
//此處讀ack回應(yīng),不做處理
//讀16位按鍵數(shù)據(jù)
for(j=0;j<16;j++)
{
SCL=0;
for(i=0;i<50;i++){} //延時
SCL=1;
for(i=0;i<50;i++){} //延時
bit_temp=SDA;
if(bit_temp)
{
keyzhi=keyzhi<<1;
keyzhi=keyzhi|0x01;
}
else
{
keyzhi=keyzhi<<1;
}
}
SCL=0;
SDA=1;
for(i=0;i<50;i++){} //延時
SCL=1;
for(i=0;i<50;i++){} //延時
SCL=0;
SDA=0; //發(fā)送 NACK 信號
for(i=0;i<50;i++){} //延時
SCL=1;
for(i=0;i<50;i++){} //延時
SDA=1; //結(jié)束
key=keyzhi^0xffff;//異或
EA=1; //全局中斷使能
/*
CIN0 0x1000 S1風(fēng)速
CIN1 0x0800 S2加濕
CIN2 0x0400 S3負(fù)離子
CIN5 0x0080 S4定時
CIN6 0x0040 S5切換
CIN7 0x0020 S6開關(guān)
*/
}
復(fù)制代碼
作者:
tt98
時間:
2018-1-13 09:23
能看看電路原理圖嗎?
作者:
hellospring
時間:
2018-7-14 21:45
你好!可以共享學(xué)習(xí)加濕器程序?QQ:2362034
作者:
fanghui78
時間:
2019-12-11 19:56
看看產(chǎn)品電路原理圖
作者:
神出沒
時間:
2020-2-22 10:28
沒有原理圖,程序看不懂
作者:
jovew
時間:
2020-2-23 14:05
能夠提供電氣原理圖嗎?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1