基于52单片机的酒店标准房设计的C程序.docx

上传人:爱问知识人 文档编号:5020441 上传时间:2020-01-29 格式:DOCX 页数:27 大小:26.48KB
返回 下载 相关 举报
基于52单片机的酒店标准房设计的C程序.docx_第1页
第1页 / 共27页
基于52单片机的酒店标准房设计的C程序.docx_第2页
第2页 / 共27页
基于52单片机的酒店标准房设计的C程序.docx_第3页
第3页 / 共27页
基于52单片机的酒店标准房设计的C程序.docx_第4页
第4页 / 共27页
基于52单片机的酒店标准房设计的C程序.docx_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《基于52单片机的酒店标准房设计的C程序.docx》由会员分享,可在线阅读,更多相关《基于52单片机的酒店标准房设计的C程序.docx(27页珍藏版)》请在三一文库上搜索。

1、程序:#include #include #define uint unsigned int#define uchar unsigned chartypedef unsigned char BYTE;#define TX_ADR_WIDTH 5 / 5 bytes TX(RX) address width#define TX_PLOAD_WIDTH 20 / 20 bytes TX payload#define RX_PLOAD_WIDTH20/ SPI(nRF24L01) commands #define READ_REG 0x00 / Define read command to regi

2、ster #define WRITE_REG 0x20 / Define write command to register #define WR_TX_PLOAD 0xA0 / Define TX payload register address #define FLUSH_TX 0xE1 / Define flush TX register command #define REUSE_TX_PL 0xE3 / Define reuse TX payload register command /*/ / SPI(nRF24L01) registers(addresses) #define C

3、ONFIG 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_

4、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 RX_ADDR_P0 0x0A / RX address pipe0 register address #define TX_ADDR 0x10 / TX address register address #

5、define RX_PW_P0 0x11 / RX payload width, pipe0 register address uchar const TX_ADDRESSTX_ADR_WIDTH = 0x34,0x43,0x10,0x10,0x01; / 静态发送地址sbit MISO=P14; sbit MOSI=P34;sbitSCK =P35;sbitCE =P17;sbitCSN =P36;sbitIRQ =P33;sbit beef= P15;/蜂鸣器sbit DOUT= P16;/气体检测sbit LED1 = P21;sbit LED2 = P22;sbit LED3 = P2

6、3;sbit LED4 = P24;sbit LED5 = P25;sbit LED6 = P26;sbit LED7 =P27;sbit stratflag= P32;uchar irtime;uchar bitnum;uchar ircode4;uchar irprosok;uchar disp8;void T0init(void)TMOD=0x02;TH0=0x00;TL0=0x00;ET0=1;EA=1;TR0=1;void int0init(void)EA=1;EX0=1;IT0=1;void irwork(void)disp0=ircode0/16;disp1=ircode0%16

7、;disp2=ircode1/16;disp3=ircode1%16;disp4=ircode2/16;disp5=ircode2%16;disp6=ircode3/16;disp7=ircode3%16;void delay2ms(unsigned int ms)/延时1毫秒(不够精确的)unsigned int i,j; for(i=0;ims;i+) for(j=0;j200;j+);void display(void) if(ircode2=24) LED2=LED2;delay2ms(500); else if(ircode2=94) LED3 =LED3;delay2ms(500)

8、; else if(ircode2=8) LED4 =LED4;delay2ms(500); else if(ircode2=28) LED5 =LED5;delay2ms(500); else if(ircode2=90) LED6 =LED6;delay2ms(500); else if(ircode2=74) LED1 = 1; LED2 = 1;LED3 = 1; LED4 = 1;LED5 = 1; LED6 = 1; ircode2=0;/*/void delay10us()uchar i;i+;i+;i+;i+;/ 写一个字节到 24L01,同时读出一个字节 uchar SPI_

9、RW(uchar byte) uchar bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit MOSI = (byte & 0x80); / output byte, MSB to MOSI byte = (byte 1); / shift next bit into MSB. SCK = 1; / Set SCK high. byte |= MISO; / capture current MISO bit SCK = 0; / .then set SCK low again return(byte); / return read

10、byte / 向寄存器 reg写一个字节,同时返回状态字节 uchar SPI_RW_Reg(BYTE reg, BYTE value) uchar status; CSN = 0; / CSN low, init SPI transa status = SPI_RW(reg); / select register SPI_RW(value); / .and write value to it. CSN = 1; / CSN high again return(status); / return nRF24L01 status byte / 写入 bytes 字节的数据 uchar SPI_W

11、rite_Buf(BYTE reg, BYTE *pBuf, BYTE bytes) uchar status,byte_ctr; CSN = 0; status = SPI_RW(reg); for(byte_ctr=0; byte_ctrbytes; byte_ctr+) / SPI_RW(*pBuf+); CSN = 1; / Set CSN high again return(status); / / 发送函数 void nRF24L01_TxPacket(unsigned char * tx_buf) CE=0; SPI_Write_Buf(WR_TX_PLOAD, tx_buf,

12、TX_PLOAD_WIDTH); / Writes data to TX payload SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled. CE=1; delay10us(); CE=0; BYTE SPI_Read(BYTE reg)BYTE reg_val; CSN = 0; / CSN low, initialize SPI communication. SPI_RW(reg); / Select register t

13、o read from. reg_val = SPI_RW(0); / .then read registervalue CSN = 1; / CSN high, terminate SPI communication return(reg_val); / return register value/ 配置函数 void nRF24L01_Config(void) /initial io CE=0; / chip enable CSN=1; / Spi disable SCK=0; / Spi clock line init high CE=0; SPI_RW_Reg(WRITE_REG +

14、CONFIG, 0x0f); / Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled. SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / Enable Auto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / Enable Pipe0 SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03); / Setup address width=5 bytes SPI_RW_Reg(WRITE_REG + SETUP_RETR,

15、 0x1a); / 500us + 86us, 10 retrans. SPI_RW_Reg(WRITE_REG + RF_CH, 0); / Select RF channel 0 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); / TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR SPI_RW_Reg(WRITE_REG+RX_PW_P0, RX_PLOAD_WIDTH); /Number of bytes in RX payload in data pipe 0 SPI_Write_Buf(WRITE_REG + TX_ADDR

16、, TX_ADDRESS, TX_ADR_WIDTH); / Writes TX_Address to nRF24L01SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); / RX_Addr0 same as TX_Adr for Auto.AckCE=1; uchar data discop4=0; unsigned char TxBuf20=0; /发送数据的缓冲区unsigned char flag;unsigned char bdata sta;sbitRX_DR=sta6;sbitTX_DS=sta5;sb

17、itMAX_RT=sta4;sbit key=P37;void delay1ms(unsigned int ms)/延时1毫秒(不够精确的)unsigned int i,j; for(i=0;ims;i+) for(j=0;j32)/检测引导码bitnum=0;irdatabitnum=irtime;irtime=0;bitnum+;if(bitnum=33)bitnum=0;irreceok=1;if(irreceok)irreceok=0;for(j=0;j4;j+)for(i=0;i1;if(irdatak6) value=value | 0x80;k+;ircodej=value;ir

18、prosok=1;#include#include #define unchar unsigned char#define unint unsigned intunchar MIMA4=0,1,2,3;unchar input= ;sbit led1=P11;sbit IN1=P12;sbit IN2=P13;sbit ENA=P14;sbit IN3=P30;sbit IN4=P31;sbit ENB=P32;unchar code lcd=0x31,0x35,0x39,0x44, 0x32,0x36,0x41,0x45, 0x33,0x37,0x42,0x46, 0x34,0x38,0x4

19、3,0x47,0x20; unchar code XIAOMA =0,4, 8,12, 1,5, 9,13, 2,6,10,14, 3,7,11,15; unchar code KEY_TABLE=0x7e,0xbe,0xde,0xee, 0x7d,0xbd,0xdd,0xed, 0x7b,0xbb,0xdb,0xeb, 0x77,0xb7,0xd7,0xe7;sbit lcden=P26;sbit lcdrs=P27;sbit lcdrw=P21;sbit beef=P15;unchar code zifu=NUM:;unchar code tablem=NUM IS TRUE!;uncha

20、r code table1=NUM IS ERROR;unchar num;void write_com(unchar com);void write_date(unchar date);typedef unsigned char unint8;typedef unsigned char unint16;unsigned char str1= ;unsigned char str2= ;unsigned char code dis1 = TRH RH: ;unsigned char code dis2 = TRH T: ;sbit TRH = P16;/温湿度传感器DHT11数据接入sbit

21、ST = P17;/态显示,是为了方便调试,具体使用的时候可以不要unint8 com_data,untemp,temp1;unint8 respond;void delayNOP() _nop_(); _nop_(); _nop_(); _nop_();void delay_ms(unsigned char ms) unsigned char i; while(ms-) for(i = 0; i0;x-)for(y=248;y0;y-);void init();void delay1()unint n=30000;while(n-);void delays()unint n=3000;whi

22、le(n-);char receive() unint8 i; ST=0; com_data=0; for(i=0;i=7;i+) respond=2; while(!TRH)&respond+); delay_us(); delay_us(); delay_us(); if(TRH) temp1=1; respond=2; while(TRH)&respond+); else temp1=0; com_data=1; com_data|=temp1; return(com_data); /*/*/湿度读取子程序 /温度高8位= TL_data/温度低8位= TH_data/湿度高8位= RH

23、_data/湿度低8位= RH_data/校验 8位 = CK_data/调用的程序有 delay();, Delay_5us();,RECEIVE(); /*/void read_TRH() unint8 TH_data,TL_data,RH_data,RL_data,CK_data; unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp; /主机拉低18ms TRH=0; delay_ms(18); TRH=1; /DATA总线由上拉电阻拉高 主机延时20us delay_us(); delay_us(); delay_us(); delay_us(

24、); /delay_us(); /delay_us();delay_us();delay_us();delay_us(); /主机设为输入 判断从机响应信号 TRH=1; /判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!TRH) respond=2; /判断DHT11发出 80us 的低电平响应信号是否结束 while(!TRH)& respond+); respond=2; /判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(TRH & respond+); /数据接收状态 RH_temp = receive(); RL_temp =

25、receive(); TH_temp = receive(); TL_temp = receive(); CK_temp = receive(); TRH=1;ST=1; /数据校验 untemp=(RH_temp+RL_temp+TH_temp+TL_temp); if(untemp=CK_temp) RH_data = RH_temp; RL_data = RL_temp; TH_data = TH_temp; TL_data = TL_temp; CK_data = CK_temp; /湿度整数部分 str10 = (char)(0X30+RH_data/10); str11 = (ch

26、ar)(0X30+RH_data%10); str12 = 0x2e; /小数点 /湿度小数部分 str13 = (char)(0X30+RL_data/10); str15 = 0X25; /% str16 = 0X52; /R str17 = 0X48; /H /温度整数部分 str20 = (char)(0X30+TH_data/10); str21 = (char)(0X30+TH_data%10); str22 = 0x2e; /小数点 /温度小数部分 str23 = (char)(0X30+TL_data/10); str25 = 0X27; / str26 = 0X43; /Cv

27、oid main()unchar x;unchar temp,key,num,i,s;unchar a=0;unchar y=1;unchar num1=0;unchar error=0;init();lcdrw=0;while(1)P3=0xf0;/置行为0,列为1,读列值if(P3!=0xf0)/判断有无键盘按下 delays();/减震if(P3!=0xf0)/如果if任然为真。这是可以确定有按键for(s=0;s4;s+) write_com(0x80+0x00+s); write_date(zifus);for(s=0;s12;s+)write_com(0x80+0x04+s); w

28、rite_date(lcd16);for(s=0;s15;s+)write_com(0x80+0x40+s);write_date(lcd16); doP3=0xf0;/置行为0,列为1,读列值if(P3!=0xf0)/判断有无键盘按下 delays();/减震if(P3!=0xf0)/如果if任然为真。这是可以确定有按键 a=a+1;temp=P3;/存储列读入的值P3=0x0f;/置列为0 行为1,读行值key=temp|P3;/将行列综合,赋值给keyfor(i=0;i16;i+)if(key=KEY_TABLEi)/读按键值表,确定读入的按键值 num=i;inputa-1=XIAOMAi;write_com(0x80+0x03+a); write_date(lcdnum);if(a=4)write_com(0x80+0x03+a); write_date(lcdnum);for(s=1;s5;s+)write_com(0x80+0x03+s); write_date(lcd16);for(s=0;s4;s+) if(inputs=MIMAs)num1+;if(num1=4)IN1=1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1