|
單片機源程序如下:
- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- //頭函數
- #include <reg51.h>
- #include <intrins.h>
- //屏幕函數調用
- #include "Lcd.h"
- //無線模塊
- #include "api.h"
- #include "nRF24L01P.h"
- //繼電器定義
- sbit jiangwen=P3^5;
- sbit shengwen=P3^4;
- sbit choushi=P3^3;
- sbit jiashi=P3^2;
- //LED 管腳定義
- sbit TXLED_R=P1^3;
- sbit RXLED_Y=P1^5;
- //蜂鳴器
- sbit Feng=P1^2;
- //蜂鳴器閃爍標志位
- bit shan=0;
- #include "KEY.h"
- //主機詢問命令
- uchar CMD[]={0xaa,0xbb,0xcc,0xdd};
- uchar Mode=0;
- uchar temp=0;
- uchar KK=0;
- //報警溫濕度
- uchar TNumber=30,RHNumber=50,TX=20,HX=40;
- //主函數
- void main()
- {
- TH0=0x4b;
- TL0=0xff;//賦初值
- TMOD=0x01;//設置工作方式
- EA=1;//打開中斷總開關
- ET0=1;//打開允許開關
- TR0=1;
- //LCD初始化顯示
- Init_LCD();
- delay_ms(250);
- TXLED_R=0; //初始化
- RXLED_Y=0;
- init_io(); //無線初始化IO
- RX_Mode(); //設置為接收模式
- TXLED_R=1;
- RXLED_Y=1;
- /////////////////////////////////////////////
- TXLED_R=0; //發送指示燈
- ////////////////////////////////////////////////////////////////////////////////
- //循環顯示
- while(1)
- {
- TXLED_R=0; //發送指示燈
- TX_ACK(); //發送詢問信號
- sta = SPI_Read(STATUS); //讀狀態寄存器
- TXLED_R=1; //發送指示燈
- if(RX_DR) //判斷是否接受到數據
- {
- SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); // 從RX FIFO讀出數據
- flag = 1;
- }
- delay_ms(100);
- SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除RX_DS中斷標志
- if(flag==1) // 接受完成
- {
- Mode=0;
- flag=0;
- }
- else //設備丟失
- {
- Mode=1;
- }
- //顯示
- //數據顯示
- if(Mode==0)
- {
- RXLED_Y=0;
- if(temp!=1)//重新初始化
- {
- display1();
- temp=1;
- }
- display2(RX_BUF[1],RX_BUF[2]);//顯示讀數
- if(RX_BUF[1]>TNumber) //溫度超標降溫
- {
- jiangwen=0;
- }
- else
- {
- jiangwen=1;
- }
- if(RX_BUF[1]<TX) //溫度過低升溫
- {
- shengwen=0;
- }
- else
- {
- shengwen=1;
- }
- if(RX_BUF[2]>RHNumber) //濕度超標抽濕
- {
- choushi=0;
- }
- else
- {
- choushi=1;
- }
- if(RX_BUF[2]<HX) //濕度過低加濕
- {
- jiashi=0;
- }
- else
- {
- jiashi=1;
- }
- if(((RX_BUF[1]>TNumber||RX_BUF[2]>RHNumber||RX_BUF[1]<TX||RX_BUF[2]<HX))&&(shan==1)) //超閥值蜂鳴器報警
- {
- Feng=0;
- }
- else
- {
- Feng=1;
- }
- RXLED_Y=1;
- }
- //讀取鍵值
- KK=KEY_();
- if(KK==3)//調整模式
- {
- Mode=2;
- KK=0;
- }
- //數據顯示不在線
- if(Mode==1)
- {
- if(temp!=2)
- NoLine();//設備丟失
- temp=2;
- }
- //鍵盤
- else if(Mode==2)
- {
- temp=3;
- display3();
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- write_com(0x80+5);
- //調溫上限
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- TNumber++;
- if(TNumber==51)
- TNumber=50;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- write_com(0x80+5);
- }
- if(KK==2)//--
- {
- TNumber--;
- if(TNumber==TX)
- TNumber++;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- write_com(0x80+5);
- }
- }
- KK=0;
- write_com(0x0f);//打開光標
- write_com(0x80+0x40+5);
- //調溫x下限
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- TX++;
- if(TX==TNumber)
- TX--;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- write_com(0x80+0x40+5);
- }
- if(KK==2)//--
- {
- TX--;
- if(TX==0xff)
- TX=0;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- write_com(0x80+0x40+5);
- }
- }
- KK=0;
- write_com(0x0f);//打開光標
- write_com(0x80+14);
- //調濕 上
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- RHNumber++;
- if(RHNumber==91)
- RHNumber=90;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- write_com(0x80+14);
- }
- if(KK==2)//--
- {
- RHNumber--;
- if(RHNumber==HX)
- RHNumber++;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- write_com(0x80+14);
- }
- }
- KK=0;
- write_com(0x0f);//打開光標
- write_com(0x80+0x40+14);
- //調濕 下
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- HX++;
- if(HX==RHNumber)
- HX--;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
|
展開
- 商品類型:
-
全新商品
- 剩余時間:
-
成交結束
|