#include <reg52.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/***************************************************/
#define TX_ADR_WIDTH 5 // 5个字节宽度的发送/接收地址
#define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度
sbit k1=P1^4; //按键
sbit k2=P1^5; //按键
sbit k3=P1^6; //按键
sbit k4=P1^7; //按键
sbit beep=P2^3;
sbit RS = P2^6;
sbit RW = P2^5;
sbit E = P2^7;
sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
uchar temp,humi;
uchar TEMP_data[15]; //用于记录实测的温度
uchar HUMI_data[15]; //用于记录实测的湿度
uchar set_temp[5]; //保存设定的温度
uchar set_humi[4]; //保存设定的湿度
uchar idata temp_humi_cache[8]; //温湿度设置缓存
uint temp_high=30; //温度上限变量
uint temp_low=20; //温度下限变量
uint humi_high=60; //湿度上限变量
uint humi_low=30; //湿度下限变量
uchar presskeynum; //按键次数变量
uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定义静态发送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
uchar flag;
uchar DATA = 0x01;
uchar bdata sta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT = sta^4;
sbit CE = P2^0;
sbit CSN= P3^7;
sbit SCK= P3^2;
sbit MOSI= P3^3;
sbit MISO= P2^1;
sbit IRQ = P2^2;
// SPI(nRF24L01) commands
#define READ_REG 0x00 // Define read command to register
#define WRITE_REG 0x20 // Define write command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define FLUSH_TX 0xE1 // Define flush TX register command
#define FLUSH_RX 0xE2 // Define flush RX register command
#define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
#define NOP 0xFF // Define No Operation, might be used to read status register
// SPI(nRF24L01) registers(addresses)
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
#define SETUP_AW 0x03 // 'Setup address width' register address
#define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
#define RF_CH 0x05 // 'RF channel' register address
#define RF_SETUP 0x06 // 'RF setup' register address
#define STATUS 0x07 // 'Status' register address
#define OBSERVE_TX 0x08 // 'Observe TX' register address
#define CD 0x09 // 'Carrier Detect' register address
#define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
#define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
#define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
#define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
#define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
#define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
#define TX_ADDR 0x10 // 'TX address' register address
#define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
#define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
#define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
#define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
#define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
#define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
#define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
//--??SPI???? IO--//
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;
void blink(char i);
void ASame(char t);
//--函数声明--//
/******** 1602函数声明 ********/
void LCD_Initial();
void GotoXY(unsigned char x, unsigned char y);
void Print(unsigned char *str);
void LCD_Write(bit style, unsigned char input);
/*************************************************************************/
void Delay1(uint );
void Delay_10us(void);
void COM(void);
uchar RH(void);
//1602程序
//内部等待函数*************************************************************
unsigned char LCD_Wait(void)
{
RS=0;
RW=1; _nop_();
E=1; _nop_();
E=0;
return DBPort;
}
//向LCD写入命令或数据********************************************************
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
E=0;
RS=style;
RW=0; _nop_();
DBPort=input; _nop_();//注意顺序
E=1; _nop_();//注意顺序
E=0; _nop_();
LCD_Wait();
}
//设置显示模式************************************************************
#define LCD_SHOW 0x04 //显示开
#define LCD_HIDE 0x00 //显示关
#define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标
#define LCD_FLASH 0x01 //光标闪动
#define LCD_NO_FLASH 0x00 //光标不闪动
void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
//设置输入模式************************************************************
#define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default
#define LCD_MOVE 0x01 // 画面可平移
#define LCD_NO_MOVE 0x00 //default
void LCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//初始化LCD************************************************************
void LCD_Initial()
{
E=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
}
//液晶字符输入的位置************************
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
//将字符输出到液晶显示
void Print(unsigned char *str)
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
void delay(uint z) //延时函数z为毫秒数
{
int a,b;
for(a=z;a>0;a--)
for(b=120;b>0;b--);
}
void key()
{
if (k1==0) //调整按键检测
{
delay(10);
if (k1==0)
{
presskeynum++;
if(presskeynum==5)
presskeynum=0;
while(k1==0);
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
}
}
if(presskeynum==1)//温度上限设置
{
if(k2==0)// 加
{
delay(10);
temp_high++;
if (temp_high>99)
temp_high=0;
if (temp_high<0)
temp_high=99;
while(k2==0); //加上此句必须松按键才处理
}
if(k3==0)//减
{
delay(10);
temp_high--;
if (temp_high>99)
temp_high=0;
if (temp_high<0)
temp_high=99;
while(k3==0); //加上此句必须松按键才处理
}
}
if(presskeynum==2)//温度下限设置
{
if(k2==0)// 加
{
delay(10);
temp_low++;
if (temp_low>99)
temp_low=0;
if (temp_low<0)
temp_low=99;
while(k2==0);
bbxyliyang
- 粉丝: 142
- 资源: 181
最新资源
- 【锂电池剩余寿命预测】TCN时间卷积神经网络锂电池剩余寿命预测,马里兰大学锂电池数据集(Pytorch完整源码和数据)
- stm32 USB 复合设备使用msc cdc
- 武汉、西安等城市预处理后的路网数据,包括道路双线转单线、中心打断等等
- 【锂电池剩余寿命预测】Transformer锂电池剩余寿命预测,马里兰大学锂电池数据集(Pytorch完整源码和数据)
- 汽车电机壳体压装产线sw18可编辑全套技术资料100%好用.zip
- boot-win7.c2c84adb.mp4
- redis笔记自学笔记自学笔记
- 前端分析-2023071100789
- 工创赛k210视觉识别
- 前端分析-2023071100789
- Java 21 新特性详解:虚拟线程、字符串模板与模式匹配等亮点
- Photoshop-CS6-13.0.1-简化版
- 通过网盘分享的文件:中国国家级地面气象站基本气象要素日值数据集(V3.0)SURF-CLI-CHN-MUL-DAY-V3.0.zip
- AI游戏Flappy-Bird
- Java各版本新特性一览表,汇总Java 8~21的新特性,按功能分类速查
- 大模型与智能制造融合创新报告,涵盖智能制造背景、大模型技术赋能、工艺优化、智能研发、生产调度、供应链优化、数据安全等内容,助力制造业降本增效、智能化升级与高效决策,适用于行业报告撰写与企业战略规划
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈