xxxx职业技专科毕业设计(论文)
DQ=1; jump(1); } else {
dat0=dat0&0xFE; } }
dat[i]=dat0; }
DQ=1; }
\子函数 #include
#define uchari unsigned char
extern unsigned char code asc[]={\#define LCD_Date P0 sbit RS =P2^5; sbit RW =P2^6; sbit E =P2^7;
void delay(void) //100uS,误差 0us {
unsigned char a,b; for(b=1;b>0;b--)
for(a=47;a>0;a--); }
void LCD_CMD(uchari cmd) {
E=0; RS=0; RW=0;
LCD_Date=cmd; E=1; delay(); E=0; }
void LCD_D(uchari Dat) {
E=0; RS=1; RW=0;
LCD_Date=Dat; E=1;
29
xxxx职业技专科毕业设计(论文)
delay(); E=0; }
void LCD_Init() {
LCD_CMD(0X38); delay();
LCD_CMD(0X0F); delay(); delay();
LCD_CMD(0X0c); delay();
LCD_CMD(0X06); delay(); delay(); }
void LCD_DAT(uchari add,uchari dat) {
LCD_CMD(0X80+add); LCD_D(dat); }
void LCD_String(uchari add,uchari *dat) {
uchari i=0;
LCD_CMD(add+0x80); while(dat[i]) {
LCD_D(dat[i]); i++; } }
\子函数
#define uchar unsigned char #include
/*****************************
30
xxxx职业技专科毕业设计(论文)
*****************************/
uchar code address[]={0x01,0x00,0x03,0xaa,0x55}; #define data_width 32 #define add_width 5
void Delay(uchar time) {
while(time--); }
void Delay_ms(uchar time) //误差 0us {
unsigned char a,b,c; c=time;
for(;c>0;c--)
for(b=142;b>0;b--) for(a=2;a>0;a--); }
void Init_IO() {
Delay(255); CE =0; CSN =1; SCLK=0; }
uchar SPI_RW(uchar byte) //SPI读写 {
uchar i;
for(i=0;i<8;i++) // output 8-bit {
MOSI = (byte & 0x80); // 输出
byte = (byte << 1); // 准备保存数据 SCLK = 1; i++;
i--; // 稍做延时.
byte |= MISO; // 读出当前数据位 SCLK = 0; // 准备时钟 }
return(byte); // 返回数据 }
uchar NRF_WCMD(uchar cmd)//NRF写命令 {
uchar state;
31
xxxx职业技专科毕业设计(论文)
CSN =0;
state=SPI_RW(cmd); CSN =1;
return(state); }
uchar NRF_WriteReg(uchar reg,uchar value)//NRF写寄存器 {
uchar state;
CSN =0;
state=SPI_RW(T_REG+reg); SPI_RW(value); CSN =1;
return(state); }
uchar NRF_ReadReg(uchar reg) //NRF读寄存器 {
uchar state;
CSN =0;
SPI_RW(R_REG+reg); state=SPI_RW(0); CSN =1;
return(state); }
uchar NRF_ReadBuf(uchar reg,uchar *buf,uchar bytes)// NRF读缓冲区{
uchar state,i;
CSN =0;
state=SPI_RW(reg); for(i=0;i return (state); } uchar NRF_WriteBuf(uchar reg,uchar *buf,uchar bytes)//NRF写缓冲区 { uchar state,i; 32 xxxx职业技专科毕业设计(论文) CSN =0; state=SPI_RW(reg); for(i=0;i return (state); } void NRF_Init() { Init_IO();//IO口初始化 CE =0; NRF_WriteReg(EN_AA, 0x03);// 允许通道0'1自动重发 NRF_WriteReg(EN_RXADDR, 0x03);//允许通道0'1接收 NRF_WriteReg(RF_SETUP, 0x07);//1Mbps--0dB NRF_WriteReg(SETUP_AW,0x03);//地址宽度 NRF_WriteReg(RX_PW_P0 ,data_width);//接收数据宽度 NRF_WriteReg(RF_CH ,0x0F);//接收频道 NRF_WriteBuf(T_REG+RX_ADDR_P0 ,address,add_width );//接收地址 NRF_WriteBuf(T_REG+TX_ADDR ,address,add_width );//发射地址 NRF_WriteReg(CONFIG,0x0f);//设置配置寄存器 CE=1; Delay(255); } void NRF_TxPacket(uchar *buf)//发射数据包 { uchar status; CE=1; NRF_WriteReg(EN_AA, 0x01);// 允许通道0自动重发 NRF_WriteReg(EN_RXADDR, 0x01);//允许通道0接收 NRF_WriteReg(RF_SETUP, 0x07);//1Mbps--0dB NRF_WriteReg(SETUP_AW,0x03);//地址宽度 NRF_WriteReg(SETUP_RETR,0X1A);//设置自动重发 NRF_WriteReg(RX_PW_P0 ,data_width);//接收数据宽度 NRF_WriteBuf(T_REG+RX_ADDR_P0,address,add_width );//接收地址 NRF_WriteBuf(T_REG+TX_ADDR ,address,add_width );//发射地址 NRF_WCMD(FLUSH_TX);//清TX_FIFO status=NRF_ReadReg(STATUS);//读取状态 33