|
包括keil溫控程序及proteus仿真圖:
0.png (34.2 KB, 下載次數(shù): 36)
下載附件
2018-4-13 01:25 上傳
0.png (54.23 KB, 下載次數(shù): 40)
下載附件
2018-4-13 01:25 上傳
單片機溫控源程序如下:
- #include<absacc.h>
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define COM8255 XBYTE[0xbfff]
- #define PA8255 XBYTE[0xbcff]
- #define PB8255 XBYTE[0xbdff]
- #define PC8255 XBYTE[0xbeff]
- #define ADC08090 XBYTE[0x78ff]
- #define DAC08320 XBYTE[0xf7ff]
- #define DAC08321 XBYTE[0xefff]
- sbit K0=P1^0;
- sbit K1=P1^1;
- sbit K2=P1^2;
- sbit K3=P1^3;
- sbit L0=P1^6;
- sbit L1=P1^7;
- bit on=0; //溫控系統(tǒng)啟動標(biāo)志
- bit set=0; //溫度設(shè)定標(biāo)志標(biāo)志
- int temperature,temperature0=0;
- uchar data dis_buf[6]; //顯示緩沖區(qū)
- uchar code table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x40,0x00}; //顯示代碼表
- void dlxms(unsigned int xms) //毫秒延遲
- { data unsigned t1,t2;
- for(t1=xms;t1>0;t1--)
- for(t2=110;t2>0;t2--);
- }
-
- void display( ) //顯示函數(shù)
- { data uchar segcode, bitcode, i;
- bitcode=0xfe;
- for(i=0;i<4;i++)
- {segcode=dis_buf[i];
- segcode=table[segcode];
- if(i==2) //小數(shù)點位判斷
- {segcode=segcode|0x80;
- }
- PA8255=segcode;
- PC8255=bitcode;
- dlxms(1);
- PC8255=0xff;
- bitcode=bitcode<<1;
- bitcode=bitcode|0x01;
- }
- }
- void light( ) //指示燈
- { if(on==0) //溫控系統(tǒng)未啟動
- {L0=0; L1=1; //指示燈 紅燈亮 綠燈滅
- }
- else //溫控系統(tǒng)啟動
- {L0=1; L1=0; //燈指示 紅燈滅 綠燈亮
- }
- }
- void control( ) //溫度控制函數(shù)
- { int t;
- if(on==1)
- {t=temperature-temperature0; //求溫差
- if(t>=0) //溫度高于設(shè)定值
- {PB8255=0x00; //關(guān)閉加熱
- DAC08320=PB8255;
- DAC08320=1;
- t=t/10;
- PB8255=0x80+t; //設(shè)置制冷功率
- DAC08321=PB8255; //啟動制冷
- }
- else //溫度低于設(shè)定值
- {PB8255=0x00; //關(guān)閉制冷
- DAC08321=PB8255;
- DAC08321=1;
- t=t/10;
- PB8255=0x80-t; //設(shè)置加熱功率
- DAC08320=PB8255; //啟動加熱
- }
- }
- else //全部關(guān)閉
- {PB8255=0x00;
- DAC08320=PB8255;
- DAC08321=PB8255;
- DAC08320=1;
- DAC08321=1;
- }
- }
- void main(void) //主函數(shù)
- { uint k;
- COM8255=0x80; //8255初始化 10010000
- dis_buf[0]=8; //開機顯示初始化
- dis_buf[1]=8;
- dis_buf[2]=8;
- dis_buf[3]=8;
- for(k=0;k<50;k++)
- {display( );
- dlxms(10);
- }
- light( ); //指示燈亮
- TMOD=0x01; TH0=-20000/256; TL0=-20000%256; //定時器管理
- IE=0x87; //中斷管理
- IP=0x01; //鍵盤輸入的中斷優(yōu)先
- ADC08090=0x00; //啟動A/D
- while(1);
- }
- void time0_int( ) interrupt 1 //定時器中斷函數(shù)
- { TH0=-20000/256; TL0=-20000%256;
- display( );
- }
- void wint1() interrupt 2 // A/D轉(zhuǎn)換器
- { uchar reseut;
- uint reseut1;
- reseut=ADC08090;
- reseut1=reseut*4; //數(shù)據(jù)轉(zhuǎn)換
- if(reseut1>=500) //零上 0-50
- {reseut1=reseut1-500;
- temperature=reseut1;
- dis_buf[0]=11;
- }
- else //零下 0-50
- {reseut1=500-reseut1;
- temperature=0-reseut1;
- dis_buf[0]=10;
- }
- dis_buf[1]=reseut1/100;
- dis_buf[2]=(reseut1/10)%10;
- dis_buf[3]=reseut1%10;
- display( );
- control( );
- ADC08090=0x00;
- }
- void wint0() interrupt 0 //溫度設(shè)定
- { uint print,i,j=0;
- for(i=j;i<1000;i++)
- {P1=0x0f;
- if(K0==0&&set==1) //溫度設(shè)定確認(rèn)鍵
- {on=1; //啟動溫控
- break;
- }
- if(K1==0) //設(shè)定溫度+1
- {set=1; //設(shè)定過溫度
- on=0; //溫控系統(tǒng)啟動標(biāo)志
- temperature0=temperature0+10;
- j=0; //延長循環(huán)時間
- }
- if(K2==0) //設(shè)定溫度-1
- {set=1; //設(shè)定過溫度
- on=0; //溫控系統(tǒng)啟動標(biāo)志
- temperature0=temperature0-10;
- j=0; //延長循環(huán)時間
- }
- if(K3==0) //關(guān)閉溫控
- {set=0; //溫度設(shè)定標(biāo)志置零
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
綜合設(shè)計(溫控).rar
(80.12 KB, 下載次數(shù): 16)
2018-4-12 20:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|