|
恒溫程序,仿真
0.png (43.2 KB, 下載次數: 98)
下載附件
2016-11-13 16:39 上傳
0.png (16.86 KB, 下載次數: 89)
下載附件
2016-11-13 16:40 上傳
0.png (33.73 KB, 下載次數: 103)
下載附件
2016-11-13 16:40 上傳
- #include<reg52.h>
- #include"main.h"
- /*****************************變量定義*****************************/
- unsigned char code tab[]= {
- 0xeb, /*'0'*/
- 0x88, /*'1'*/
- 0xb3, /*'2'*/
- 0xba, /*'3'*/
- 0xd8, /*'4'*/
- 0x7a, /*'5'*/
- 0x7b, /*'6'*/
- 0xa8, /*'7'*/
- 0xfb, /*'8'*/
- 0xfa, /*'9'*/
- };
- unsigned char a,k,flag; //a為位選標志位,k為數碼管顯示內容標志位,p為采集溫度標志位
- char sz,xz,sx,xx; //sz為溫度上限設定值的整數部分,sx為小數部分;xz為溫度下限設定值的整數部分,xx為小數部分;
- unsigned char buf[4];
- int p,tempz;
- long temp; //緩存采集到的溫度數據"DS18B20.c"文件中
- unsigned char str[3];//溫度數據處理后的緩存str[0]為十位,str[1]為個位,str[2]小數位;
- //****************************************
- //函數名稱:void mian()
- //輸入參數:無
- //輸出參數:無
- //功 能:主函數
- //****************************************
- void main()
- {
- unsigned char i;
- TMOD=0x01; // 定時器0,方式1--16為定時器
- TH0=0xf8;
- TL0=0xf0;
- EA=1;
- TR0=1;
- ET0=1;
- sz=35; //溫度上限
- sx=0; //小數位
- xz=25;//溫度下限
- xx=0;//小數位
- k=0; //k=0,a=0;設定開機界面顯示當前溫度
- a=0;
- // l=0;
- while(1)
- {
- key(); //對按鍵進行掃描
- if(flag)
- {
- temchange();//讀取溫度并轉換為易于數碼管顯示的數
- if((tempz<((int)(xz*10)+xx)||tempz>((int)(sz*10)+sx))&&k==0)
- {
- // l=1;//檢測溫度是否超過上下限 溫度超限報警標志位l置"1";
- if(tempz<((int)(xz*10)+xx)) //溫度低于下限
- {
- relay_L=0;//繼電器動作,控制加熱器加熱;
- relay_H=1;
- beep=0;
- for(i=0;i<20;i++)
- {
- delay(40);
- key(); //對按鍵進行掃描
- }
- beep=1;
- for(i=0;i<20;i++)
- {
- delay(40);
- key(); //對按鍵進行掃描
- }
- }
- else //溫度高于上限
- {
- relay_H=0; //繼電器動作,控制外部制冷裝置降溫;
- relay_L=1;
- beep=0;
- for(i=0;i<5;i++)
- {
- delay(40);
- key(); //對按鍵進行掃描
- }
- beep=1;
- for(i=0;i<5;i++)
- {
- delay(40);
- key(); //對按鍵進行掃描
- }
- }
- }
- else
- {
- beep=1; //關報警裝置
- relay_L=1;//關1號繼電器
- relay_H=1;//關2號繼電器
- }
- flag=0;
- }
- }
- }
- /*
- //*********************************************************
- //函數名稱:void time0( ) interrupt 1
- //功 能:定時中斷 動態(tài)數碼管顯示,當p=20時采集一次當前溫度
- //入口參數:無
- //返回參數:無
- //*********************************************************
- void time0() interrupt 1
- {
- static unsigned char num;
- TH0=0xe8; //重賦初值
- TL0=0xf0;
- if(flag==0)
- p++; //標志位加1
- if(p==50) //判斷是否采集溫度:p=10,采集溫度,否則不進行采集;
- {
- flag=1;
- p=0; //采集溫度標志位清零
- }
- if(k==0) //顯示溫度傳感器采集到的溫度數據
- {
- if(str[0]==0)
- buf[0]=0x00; //判斷十位是否為'0',是則滅燈;
- else
- buf[0]=tab[str[0]]; //數碼管第一位為實際溫度數據的十位
- buf[1]=tab[str[1]]|0x04; //數碼管第二位實際溫度個位,并且小數點亮
- buf[2]=tab[str[2]]; //小數位
- buf[3]=0x00; //最后一位不顯示,滅
- }
- if(k==1) //數碼管顯示溫度上限值 格式為:_ _._H;
- x_display(sz,sx);
- if(k==2)//數碼管顯示溫度下限值 格式為:_ _._L;
- x_display(xz,xx);
- switch(num)
- {
- case 0:wei_xuan(0);P0=buf[0];break;
- case 1:wei_xuan(1);P0=buf[1];break;
- case 2:wei_xuan(2);P0=buf[2];break;
- case 3:wei_xuan(3);P0=buf[3];break;
- }
- num++;
- if(num==4)num=0;
- }
- //--------------------------主程序 結束--------------------------
- */
復制代碼
0.png (83.9 KB, 下載次數: 86)
下載附件
2016-11-13 16:42 上傳
單片機恒溫控制系統的仿真工程文件和所有源碼下載:
恒溫控制系統程序和仿真.zip
(224.59 KB, 下載次數: 364)
2016-11-7 10:31 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|