久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
太陽能自動電加熱控制器程序+電路圖
[打印本頁]
作者:
51黑小牛
時間:
2016-4-10 22:42
標題:
太陽能自動電加熱控制器程序+電路圖
PCB圖
SCH圖
北方由于冬季較長,太陽能幾乎處于廢棄狀態,于是自己用MCU作了這款簡易自動加熱熱控制器,本款加熱器還可以做其他方面如水溫,室內測溫,各種家電設備測溫,測溫范圍0-100。很實用。
源程序更新:
太陽能熱水器智能控制,它以89C52單片機為核心,配合電阻型4檔水位傳感器、負溫度系數NTC熱敏電阻溫度傳感器、8255A擴展鍵盤和顯示器件、驅動電路(電磁閥、電加熱、報警)等外圍器件, 完成對太陽能熱水器容器內的水位、水溫測量、顯示等
全部源碼下載:
太陽能熱水器智能控制系統程序.rar
(2.84 KB, 下載次數: 208)
2016-4-10 22:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
以下是部分程序預覽:
//太陽能熱水器智能控制系統程序:
//定義頭文件和各個輸入管腳以及變量聲明
#include <reg52.h>
#include <absacc.h>
#include <stdio.h>
#include <intrins.h>
#define uint unsigned int//定義變量類型名
#define uchar unsigned char
/*定義8255a字符型字位口*/
#define DIGPORT XBYTE[0x1FFF]//PA口地址,位選碼地址
#define WORDPORT XBYTE[0X3FFF]//PB口地址,斷選碼地址
#define CCOM XBYTE[0X7FFFF]//控制字寄存器地址
#define KPORT XBYTE[0X5FFF]//PC口,鍵盤掃描地址
//DS1302_RST=1//定義DS1302時鐘芯片引腳操作
#define Set_DS1302_RST DS1302_RST=1
//DS1302_RST=0
#define Clr_DS1302_RST DS1302_RST=0
//DS1302_SDA=1
#define Set_DS1302_SDA DS1302_SDA=1
//DS1302_SDA=0
#define Clr_DS1302_SDA DS1302_SDA=0
//DS1302_SCLK=1
#define Set_DS1302_SCLK DS1302_SCLK=1
//DS1302_SCLK=0
#define Clr_DS1302_SCLK DS1302_SCLK=0
//定義讀時間控制字
#define DS1302_SEC_Reg 0x80
#define DS1302_MIN_Reg 0x82
#define DS1302_HR_Reg 0x84
#define DS1302_DATE_Reg 0x86
#define DS1302_MONTH_Reg 0x88
#define DS1302_DAY_Reg 0x8a
#define DS1302_YEAR_Reg 0x8c
#define DS1302_CONTROL_Reg 0x8e
#define DS1302_CHARGER_Reg 0x90
#define DS1302_CLKBURST_Reg 0xbe
//全局變量
//為了方便,我把個位和十位分開了
uchar year1=0x88;
uchar year0=0x88;
uchar month=0x88;
uchar date=0x88;
uchar day=0x88;
uchar hour=0x88;
uchar minute=0x88;
uchar second=0x88;
/*定義P1口各管腳*/
sbit L0=P2^0;
sbit L1=P2^1;
sbit L2=P2^2;
sbit L3=P2^3;
sbit K0=P2^4;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit Hig=P1^4;
sbit DS1302_SDA=P1^5;//定義DS1302時鐘引腳與單片機引腳的連接
sbit DS1302_SCLK=P1^6;
sbit DS1302_RST=P1^7;
/*聲明調用函數*/
void inital(void);
void timer1_svr(void);
void display(void);
void delay(uchar j);
void DS1302_Write(uchar reg,uchar dat);
uchar DS1302_Read(uchar reg);
void DS1302_Init(void);
void ReadTime(void);
void WtTmCr();
void LvRead();
void TmRead();
void key(void);
uchar kbscan(void);
void DS1302(void);
void int0_int(void);
void int1_int(void);
/*定義調用存儲單元*/
/*顯示緩沖區(依次為高位低位)*/
uchar BUFFER[3]={0,0,0};
uchar WTLV;//水位值
uchar TMP;//水溫值
uchar WTLVSET;//水位設定值
uchar TMPSET;//水溫設定值
uchar buf[4]={0,0,0,0};
/*數碼管顯示編碼"0"-"9","A","-"*/
uchar code TABLE[]={0x7B,0x30,0xEA,0xF8,0xB1,0xD9,0xDB,0x70,0xFB,0xF9,0xF3,0x80};
main()
{
inital();//初始化中斷、定時器、I/O口
kbscan();//鍵盤掃描
key();//鍵盤處理
TmRead();//讀取溫度
LvRead();//讀取水位
DS1302();//讀取時間
display();//顯示
}
void inital()
{
P1_0= P1_1= P1_2=K0=0;//初始化外部驅動口
DS1302_Init();
EA=1;//開外部中斷
IT0=1;//外部中斷下降沿觸發
EX0=1;//允許外部中斷0
Hig=1;P1.3輸出高電平
TMOD=0x11;定時器工作于方式1
TH1=0X8A;//定時器1賦初值
TL1=0XD0;
ET1=1;定時器1開定時中斷
TR1=1;//開啟定時器1
CCOM=0X80;//初始化8255A,送控制字,工作方式0
}
uchar kbscan(void)
{
uchar recode;
if((KPORT&0X0F)!=0X0F) //若有鍵按下
{
delay(2); //延時抖動
if((KPORT&0X0F)!=0X0F)
{
recode=KPORT;
return(recode);
}
}
else
return(0);
}
void key(void)
{
uchar key;
key=kbscan();
delay(2);
if(key==0x01)
{
P1_1=1;//上水
}
if(key==0x02) //設置水位
{
if(WTLVSET==4)
WTLVSET=0;
else
WTLVSET+=WTLVSET;
BUFFER[0]=WTLVSET;//顯示設置水位
display();
}
if(key==0x04)//電加熱
{
P1_0=1;
}
if(key==0x08)//設置溫度
{
if(TMPSET>=80)
TMPSET=30;
else
TMPSET=TMPSET+10;//增加十度
BUFFER[0]=TMPSET; 顯示設置水溫
display();
}
}
void timer1_svr() interrupt 1
{
TH1=0X8A;//重新給定時器1賦值
TL1=0XD0;
Hig=!Hig;//充放電變換
if(Hig)//充電開始時啟動定時器0
{
TL0=TH0=0X00;//定時器0賦初值0
TR0=1;//啟動定時器0
}
}
void int0_int(void) interrupt 0//外部中斷0,測水位
{
EX0=0;
EX1=1;
TR0=0;
buf[0]=TL0;
buf[1]=TH0;
}
void int1_int(void) interrupt 2//外部中斷1,測水溫
{
EX1=0;
EX0=1;
TR0=0;
buf[2]=TL0;
buf[3]=TH0;
}
void TmRead()//水溫值處理
{
uint val;
val=buf[3]*256+buf[2];
if(val<7549)
TMP=97-int(val*8/1000);
else
if(val<20000)
TMP=50-int(val/1000);
else
TMP=30-int(val*5/10000);
}
void LvRead()//水位值處理
{
if(buf[1]>60)
{
WTLV=1;//
L3=0;L2=1;L1=1;L0=1;
}
else if(buf[1]>45)
{
WTLV=2;
L3=1;L2=0;L1=1;L0=1;
}
else if(buf[1]>36)
{
WTLV=3;
L3=1;L2=1;L1=0;L0=1;
}
else
{
WTLV=4;
L3=1;L2=1;L1=1;L0=0;
}
}
void WtTmCr()//水位、水溫控制
{
if(WTLV==4)
P1_1=0;
if(WTLV==1)
P1_1=1;
if(TMP>=TMPSET)
P1_0=0;
if(TMP<TMPSET&&hour==0x19)
P1_0=1;
}
void display(void)
{
uchar i; //顯示緩沖區首址
uchar delay; //顯示延時
uchar disp; //顯示內容
uchar digit; //定義數碼管顯示位
digit=0x0200;
for(i=2;i>=0;i--)
{
if(BUFFER[i]>100) disp=BUFFER[i]%10+10;//顯示高位
else disp=BUFFER[i]%10;
DIGPORT=digit;
WORDPORT=TABLE[disp];
for(delay=0;delay<=200;delay++);
digit=digit>>1;//顯示低位
disp=BUFFER[i]/10;
DIGPORT=digit;
WORDPORT=TABLE[disp];
for(delay=0;delay<=200;delay++);
digit=digit>>1;
}
}
void delay(uchar j)//延時程序
{
uchar a,b;
for(a=0;a<j;a++)
for(b=0;b<200;b++)
;
}
void DS1302()//時間程序
{
ReadTime();
BUFFER[1]=second;
BUFFER[2]=hour;
}
void DS1302_Write(uchar reg,uchar dat)//寫入時間
{
uchar i;
Clr_DS1302_RST;
_nop_();
_nop_();
Clr_DS1302_SCLK;
_nop_();
_nop_();
Set_DS1302_RST;
_nop_();
_nop_();
for(i=8;i>0;i--)
{
if(reg&0x01) Set_DS1302_SDA;
else Clr_DS1302_SDA;
_nop_();
_nop_();
Set_DS1302_SCLK;
_nop_();
_nop_();
Clr_DS1302_SCLK;
_nop_();
_nop_();
reg>>=1;
}
for(i=8;i>0;i--)
{
if(dat&0x01) Set_DS1302_SDA;
else Clr_DS1302_SDA;
_nop_();
_nop_();
Set_DS1302_SCLK;
_nop_();
_nop_();
Clr_DS1302_SCLK;
_nop_();
_nop_();
dat>>=1;
}
Clr_DS1302_RST;
_nop_();
_nop_();
}
uchar DS1302_Read(uchar reg)//讀取時間
{
uchar dat=0,i;
Clr_DS1302_RST;
_nop_();
_nop_();
Clr_DS1302_SCLK;
_nop_();
_nop_();
Set_DS1302_RST;
_nop_();
_nop_();
for(i=8;i>0;i--)
{
if(reg&0x01) Set_DS1302_SDA;
else Clr_DS1302_SDA;
_nop_();
_nop_();
Set_DS1302_SCLK;
_nop_();
_nop_();
Clr_DS1302_SCLK;
_nop_();
_nop_();
reg>>=1;
}
for(i=8;i>0;i--)
{
dat>>=1;
if(DS1302_SDA) dat|=0x80;
Set_DS1302_SCLK;
_nop_();
_nop_();
Clr_DS1302_SCLK;
_nop_();
_nop_();
}
Clr_DS1302_RST;
_nop_();
_nop_();
return(dat);
}
void DS1302_Init(void)//初始化DS1302
{
DS1302_Write(DS1302_CONTROL_Reg,0x00);//關閉寫保護
DS1302_Write(DS1302_SEC_Reg,0x80);//暫停
DS1302_Write(DS1302_CHARGER_Reg,0xa9);//涓流充電
DS1302_Write(DS1302_YEAR_Reg,0x04); //年
DS1302_Write(DS1302_MONTH_Reg,0x12); //月
DS1302_Write(DS1302_DATE_Reg,0x09); //日
DS1302_Write(DS1302_DAY_Reg,0x04); //周
DS1302_Write(DS1302_HR_Reg,0x10); //時
DS1302_Write(DS1302_MIN_Reg,0x25); //分
DS1302_Write(DS1302_SEC_Reg,0x00); //秒
DS1302_Write(DS1302_CONTROL_Reg,0x80);//打開寫保護
}
void ReadTime(void)//讀取時間
{
uchar dat;
dat=DS1302_Read(DS1302_YEAR_Reg);//年
year0=dat&0x0f;
year1=dat>>4;
dat=DS1302_Read(DS1302_MONTH_Reg);//月
month=dat;
dat=DS1302_Read(DS1302_DATE_Reg);//日
date=dat;
dat=DS1302_Read(DS1302_DAY_Reg);//周
day=dat;
dat=DS1302_Read(DS1302_HR_Reg);//時
hour=dat;
dat=DS1302_Read(DS1302_MIN_Reg);//分
minute=dat;
dat=DS1302_Read(DS1302_SEC_Reg);//秒
second=dat;
}
復制代碼
作者:
xianyu1979
時間:
2016-4-17 12:18
感謝分享,大致看了一下,增強了繼續學習的信心。
作者:
2910475930
時間:
2016-4-17 19:54
不錯的東西,
作者:
xianggc
時間:
2016-5-17 17:53
很有用呢,謝謝啦
作者:
Skylake
時間:
2016-11-23 21:21
非常用呢,謝謝啦
作者:
mslong
時間:
2016-11-24 00:30
很好,很需要
作者:
jiyidewang
時間:
2017-3-12 11:05
不錯,不錯。。
作者:
jiyidewang
時間:
2017-3-12 11:08
非常的不錯,
作者:
jiyidewang
時間:
2017-3-14 13:55
很好的文章。
作者:
yxf20170329
時間:
2017-4-2 08:57
學習的樣板工程,增加我的信心!
作者:
GUOXUAN
時間:
2017-11-26 16:17
用18B20+MCU做的簡易自動加熱控制器,溫度在0-100度之間可調.好作品!
作者:
lcq403
時間:
2018-3-11 01:08
感謝分享,收藏
作者:
phz295250416
時間:
2018-4-18 09:18
求水位檢測詳細資料
作者:
小泉
時間:
2018-4-18 20:33
謝謝l樓主分享
作者:
tieq1952
時間:
2018-4-19 07:58
謝謝分享,已經下載
作者:
MaeChen
時間:
2018-6-10 09:39
不錯不錯
作者:
zoro8
時間:
2018-7-23 14:30
謝謝共享
作者:
jifengjianwu
時間:
2018-11-9 21:02
感謝樓主分享,下載了慢慢研究
作者:
LWSZ
時間:
2018-11-19 12:36
引腳程序對不上號
作者:
xiaomeng
時間:
2018-11-21 20:56
程序完整版電路圖求分享。
作者:
下次發給班上的
時間:
2018-11-27 17:26
程序完整版電路圖求分享。
作者:
忖腹食水
時間:
2018-11-29 13:50
要是能加個手機控制就更完美了,感謝分享
作者:
7861685
時間:
2019-3-31 07:18
感謝分享
作者:
搬哪去啊
時間:
2019-4-10 18:18
超贊 厲害
作者:
搬哪去啊
時間:
2019-4-10 18:22
贊一個!
作者:
hfei
時間:
2019-4-28 16:58
不錯的,頂一下,哪位能將一下硅膠或不銹鋼型兩芯水位及溫度傳感器檢測原理?
作者:
zzbasic
時間:
2024-1-14 20:40
電阻型4檔水位傳感器需要ADC轉化吧,圖上好么沒看到有ADC和傳感器連接說明啊。看程序預覽用的是中斷,有人跑成功過么?
作者:
vgasy222
時間:
2024-1-15 03:12
非常詳細、不錯不錯
作者:
YDR123456789
時間:
2024-8-31 10:02
學習的樣板工程,增加我的信心!
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产黄a三级三级三级看三级男男
|
av毛片网站
|
成人激情在线观看
|
一区二区不卡
|
玖玖在线播放
|
久久爱综合
|
伊人国产在线
|
亚洲午夜在线观看
|
日韩国产精品视频
|
国产aⅴ爽av久久久久成人
|
国产精品久久久久久妇女6080
|
黄色片久久
|
午夜精品福利视频
|
亚洲伦理在线观看
|
久久久久久久国产精品
|
国产精品久久久久永久免费看
|
日韩精品在线一区二区
|
国产一区二区三区免费
|
欧美aaaaa
|
亚洲欧洲在线观看
|
亚洲国产精品久久久
|
男人操女人视频网站
|
亚洲一区在线看
|
蜜臀久久99精品久久久久久宅男
|
久久久综合
|
黄色日批视频
|
国产在线成人
|
色影视
|
av日韩精品
|
一级黄色av
|
国产午夜三级
|
久久av片
|
久久亚洲精品视频
|
日韩精品福利
|
一级特黄视频
|
黄色高清网站
|
国产综合自拍
|
成人国产在线
|
中文字幕在线资源
|
国产不卡在线视频
|
黄色片播放
|