這是師傅叫我們做的藍橋杯的題,用的是Proteus8和keil5;
單片機進階
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include "supend.h"
- #include "Nixie_tube.h"
- #include "pcf8591.h"
- #include "ds1320.h"
- #include "key_bord.h"
- #include "at24c02.h"
- void Time_out();
- void Decide();
- void LED_A_M() ;
- //------------------------------------------------------------------------------------------------------
- u8 time[8]; //臨時存儲,時間,濕度值等 //手動/自動切換標志位
- u8 V; //用于存儲濕度值
- bit K7,flag,K6,K4,K5,H,K; //標志位,H自動下蜂鳴器叫
- bit set=0,Z; //set自動和手動切換,Z標志位
- u8 X=50,Y; //X存儲自動設定下的濕度值,Y蜂鳴器和繼電器
- //---------------------------------------定時器0中斷服務函數---------------------------------------------
- void Service1_function() interrupt 1
- {
- TR0=0;
- TH0=(65536-500)/256;
- TL0=(65536-500)%256; //數碼管顯示函數
- keyscan(); //按鍵掃描函數
- switch(Trg) //選擇第幾頁
- {
- case 0x01:{K7=~K7;};break; //S7
- case 0x02:{K6=~K6;};break; //S6
- case 0x04:{K5=~K5;K=1;};break; //S5
- case 0x08:{K4=~K4;K=0;};break; //S4
- }
- V=Pcf8591ReadByte(); //濕度測量函數
- V=(V*100)/254; //濕度處理函數
- Time_out(); //時間/濕度處理
- Decide(); //
- display();
- LED_A_M() ;
- TR0=1;
- }
- //---------------------------------------時間/濕度處理---------------------------------------------------------
- void Time_out()
- {
- if(flag==0)
- {
- WriteSet1302(0x82,0x30);//分
- WriteSet1302(0x84,0x08);//時
- X=EEP_ReadChar(0x01);
- flag=1;
- }
- if(set==0)
- {
- time[0]=ReadSet1302(0x85)>>4;
- time[1]=ReadSet1302(0x85)&0x0f;
- time[2]=10;
- time[3]=ReadSet1302(0x83)>>4;
- time[4]=ReadSet1302(0x83)&0x0f;
- time[5]=11;
- time[6]=V/10;
- time[7]=V%10;
- }
- if(set==1)
- {
- time[0]=10;
- time[1]=10;
- time[2]=11;
- time[3]=11;
- time[4]=11;
- time[5]=11;
- time[6]=X/10;
- time[7]=X%10;
- }
-
- }
- //----------------------------------------判斷蜂鳴器開關/存儲X到at24c02-------------------------------------------------
- void Decide()
- {
- if(K7==0)
- {
- if(K6==1) set=1;
- if(K5==1) {K5=0;X++;Z=1;}
- if(K4==1) {K4=0;X--;Z=1;}
- if(K6==0) set=0;
- if(Z==1) {Z=0;EEP_WriteChar(0x01,X);}
- }
- if(V>=X){H=0;}
- if(V<X){H=1;}
- }
- //--------------------------------------led閃亮/繼電器-------------------------------------------------------------------------
- void LED_A_M() //手動/自動模式切換燈函數
- {
- if(K7==0) //自動
- {
- LED=0xfe;
- if(H==1) BUZZER=0x50;
- if(H==0) BUZZER=0x00;
- }
- if(K7==1) //手動
- {
- LED=0xfd;
-
- if(K6==1)Y=Y|0x40;
- if(K6==0)Y=Y&0xbf;
- if(K==1){ Y=Y|0x10;}
- if(K==0) {Y=Y&0xef;}
- BUZZER=Y;
- }
- }
復制代碼
仿真無法運行,求幫助:
智能灌溉.7z
(226.12 KB, 下載次數: 181)
2019-9-25 12:48 上傳
點擊文件名下載附件
|