{ uchar reg_val;
CSN = 0;
SPI_RW(reg); //写指令 reg_val = SPI_RW(0); //读reg的内容 CSN = 1; return(reg_val); }
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) { uchar status,byte_ctr;
CSN = 0; status = SPI_RW(reg);
for(byte_ctr=0; byte_ctr CSN = 1; return(status); } void TX_Mode(void) { CE=0; SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); /*接收模块的地址*/ SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); /*通道0 接收数据地址*/ SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); /*写待发数据指令a0*/ SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); //数据通道0应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //接收数据通道0允许 SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);//等待 500+86us 自动重发10次 SPI_RW_Reg(WRITE_REG + RF_CH,40); SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //数据传输率1Mbps ,发射功率0dBm SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); //配置寄存器 CE=1; } void checkflag() { sta=SPI_Read(STATUS);//读状态寄存器 if(MAX_RT) { SPI_RW_Reg(FLUSH_TX,0); /*冲洗发送FIFO指令*/ } SPI_RW_Reg(WRITE_REG+STATUS,sta);//清除中断 } //以下是DS18B20的操作程序 //************************************************************************/ void delay_18B20(unsigned int i)//延时1微秒 { while(i--); } set18b20()/*ds1820复位*/ { EA=0; ds18b20= 1; //复位 delay_18B20(4); //延时 ds18b20 = 0; //拉低 delay_18B20(100); //精确延时大于480us ds18b20 = 1; //拉高 delay_18B20(10); crrent=ds18b20; while(!ds18b20); EA=1; return(crrent); //返回值 } uchar read18b20() /*读数据*/ { uchar i; uchar dat = 0; EA=0; for(i=0x01; i!=0; i<<=1) { ds18b20 = 0; _nop_(); _nop_(); ds18b20 = 1; _nop_(); _nop_(); if(!ds18b20) dat &= ~i; else dat |= i; delay_18B20(8); } EA=1; return dat; } void write18b20(uchar wdata) /*写数据*/ {unsigned char i=0; EA=0; for (i=8; i>0; i--) { ds18b20 = 0; _nop_(); _nop_(); ds18b20=wdata&0x01; delay_18B20(10); ds18b20 = 1; wdata>>=1; } EA=1; } //******************************LCD1602**************************************************************** void delayms(uint z) //不精确延时 { uchar x; uint y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void LCD_BUSY() //LCD忙检测 { uchar sta; P0=0xff; lcdrs=0; lcdrw=1; do{ lcden=1; sta=P0; lcden=0; }while(sta & 0x80); } void writelcdcmd(uchar cmd) //LCD写命令 { LCD_BUSY(); delayms(1); lcdrs=0; lcdrw=0; lcden=0; P0=cmd; delayms(1); lcden=1; delayms(1); lcden=0; } void writelcddat(uchar dat) //LCD写数据 { LCD_BUSY(); delayms(1); lcdrs=1; lcdrw=0; lcden=0; P0=dat; delayms(1); lcden=1; delayms(1); lcden=0; } void inilcd() //LCD初始化 { delayms(15); writelcdcmd(0x38); delayms(5); writelcdcmd(0x0c); delayms(5); writelcdcmd(0x06); delayms(5); writelcdcmd(0x01); delayms(5); } void play(unsigned char *p)//显示// {
相关推荐: