⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test1.c

📁 nRF401串口通信的C语言程序代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//基于nRF401的无线通信程序
//////////////////////////
//功能:能实现两个单片机模
//      快之间相互通信(互
//      发短信)
//说明:接收数据时若采用查
//      询接收,则要采用超
//      时控制,否则程序很
//      容易死
//修改日期 2008.6.10
//////////////////////////
#include <reg51.h>
#include <string.h>
#include "scancodes.h"
#include "lcd12864.h"
#include "zifuku88.h"
#define uchar unsigned char
#define uint unsigned int

/* 握手信号宏定义 */
#define ADDR_A 0XF1		// 本机地址	 ADDR_A
#define ADDR_B 0XF2		// 对方地址  ADDR_B
#define MAXLEN 10    	// 缓冲区最大长度 
uchar buf[MAXLEN];
uchar addr;
uchar flag = 0;// t 为输入的字符串的长度

sbit P27 = P2^7;		// 此引脚控制发光管

sbit Key_Data = P3^4;  //定义Keyboard引脚
sbit Key_CLK  = P3^3; 

//全局变量
static unsigned char IntNum = 0;           //中断次数计数
static unsigned char KeyV;                 //键值
static unsigned char DisNum = 0;           //显示用指针
static unsigned char Key_UP=0, Shift = 0;  //Key_UP是键松开标识,Shift是Shift键按下标识
static unsigned char BF = 0;               //标识是否有字符被收到


uchar R_ye = 0,R_lie = 64+16;	   //液晶右半屏
unsigned char code Bmp[]=
{
/*------------------------------------------------------------------------------
  源文件 / 文字 : D:\tool3\液晶字模提取一\图例\yema.bmp
  宽×高(像素): 128×64
------------------------------------------------------------------------------*/
0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x90,0xD0,0x78,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,
0xE0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x06,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0xCF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xDD,0x9F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x78,0xF8,0xF0,0xE0,0xC0,0xC0,0x80,
0xC0,0xE0,0xE0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0x3B,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFC,0x9C,0x3C,0x3D,0x3F,0x7F,0xFD,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xE1,0xC3,0x87,
0x05,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFE,0xE3,0xF1,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x1F,0x1F,0x78,0xF0,0x00,0x00,0x00,0x01,
0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFE,0xFE,0xFC,0xF8,0xF0,0xE0,0x80,0x80,0x80,0xC0,0xE0,0xFF,0xDF,0x7F,0x1F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x7F,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x1F,0x07,0xBF,0xFF,0x3F,0x1F,0x05,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x0E,0x0E,0x0E,0x1F,0x1F,0x07,0x9F,0xFF,
0xFF,0x7B,0x61,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x18,0x1C,0x1E,0x07,0x03,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};		


///////////////////////////////////////////////
/***********     接收数据函数       **********/
///////////////////////////////////////////////
uchar recvdata(uchar *buf)
{
	uchar i,tmp;
	uchar len;					// 保存数据长度
	uchar ecc;					// 保存校验字节
	
	/* 接收数据长度字节 */
	RI = 0;
	while(!RI);
	if (RB8==1)					
		return 0xee;			// 若接收的为地址帧,则返回0xee
	len = SBUF;
	RI = 0;
	
	/* 使用len的值为校验字节ecc赋初值 */
	ecc = len;					

	/* 接收数据 */
	for (i=0;i<len;i++)
	{
		while(!RI);				 //注,此处要采用超时控制	 查询接收要采用超时控制,否则容易死
		if (RB8==1)
			return 0xee;		// 若接收的为地址帧,则返回0xee
		buf[i] = SBUF;	
		ecc = ecc^(buf[i]);		// 进行字节校验
		RI = 0;			
	}
	buf[i] = 0;					// 表示数据结束	此时已经 i = 10;
	
	/* 接收校验字节 */
	while(!RI);
	if (RB8==1)					
		return 0xee;			// 若接收的为地址帧,则返回0xee
	tmp = SBUF;					//
	RI = 0;		

	/* 进行数据校验 */
	ecc = tmp^ecc;
	
	if (ecc!=0)					// 如果校验错误
	{
		//*buf = 0;			// 清空数据缓冲区

		return 0xff;			// 返回0xff表示校验错误
	}
  	else
	    return 0;					// 校验成功,返回0
}

//////////////////////////////////////////////////
/************     发送数据函数     **************/
//////////////////////////////////////////////////
void senddata(uchar *buf)
{
	uchar i;
	uchar len;					// 保存数据长度
	uchar ecc;					// 保存校验字节

	len = strlen(buf);			// 计算要发送数据的长度
	ecc = len;					// 开始进行校验字节计算

	/* 发送数据长度 */
	TI = 0;
	TB8 = 0;					// 发送数据帧
	SBUF = len;					// 发送长度
	while(!TI);
	TI = 0;

	/* 发送数据 */
	for (i=0;i<len;i++)
	{
		ecc = ecc^(buf[i]);
		TB8 = 0;				// 发送数据帧
		SBUF = buf[i];	
		while(!TI);
		TI = 0;
	}
	
	/* 发送校验字节 */
	TB8 = 0;					// 发送数据帧
	SBUF = ecc;
	while(!TI);
	TI = 0;
}

/* 串口初始化函数 */
void init_serial()
{
	TMOD = 0x20;				   // 定时器T1使用工作方式2
    TL1 = -11059200/(9600*12*32);  /*初值 波特率为9600bit */
	TH1 = TL1;
	TR1 = 1;					// 开始计时
	PCON = 0x80;				// SMOD = 1
	SCON = 0xd0;				// 工作方式,9位数据位,波特率9600kbit/s,允许接收 
}

/*    串口中断函数   */	 
void Receive_RXD() interrupt 4  
{ 
  if(RI)                                    //处理接收中断 
  { 
  		RI = 0;							 
		if(SM2 == 1)						 //	 接收地址  只有地址采用中断接收	 此时就可不用循环接收,数据仍然才用循环接收
		{
			addr = SBUF;
			SM2 = 0;	   		         // 允许数据接收	
		}	 
  } 
} 	

//右半屏显示发送的数据
//入口参数 :
void Display_Right(uchar temp)
{		
     switch(temp) 
	{
		 case '0': zf_disp8(R_ye,R_lie,sz_0);R_lie=R_lie+8;    break;      
         case '1': zf_disp8(R_ye,R_lie,sz_1);R_lie=R_lie+8;    break;  
         case '2': zf_disp8(R_ye,R_lie,sz_2);R_lie=R_lie+8;    break; 
		 case '3': zf_disp8(R_ye,R_lie,sz_3);R_lie=R_lie+8;    break; 
         case '4': zf_disp8(R_ye,R_lie,sz_4);R_lie=R_lie+8;    break;
         case '5': zf_disp8(R_ye,R_lie,sz_5);R_lie=R_lie+8;    break; 
		 case '6': zf_disp8(R_ye,R_lie,sz_6);R_lie=R_lie+8;    break; 
         case '7': zf_disp8(R_ye,R_lie,sz_7);R_lie=R_lie+8;    break; 
         case '8': zf_disp8(R_ye,R_lie,sz_8);R_lie=R_lie+8;    break; 
		 case '9': zf_disp8(R_ye,R_lie,sz_9);R_lie=R_lie+8;    break;
		 case 'a': zf_disp8(R_ye,R_lie,smalla);R_lie=R_lie+8;  break;
	 	 case 'b': zf_disp8(R_ye,R_lie,smallb);R_lie=R_lie+8;  break;
		 case 'c': zf_disp8(R_ye,R_lie,smallc);R_lie=R_lie+8;  break;
	     case 'd': zf_disp8(R_ye,R_lie,smalld);R_lie=R_lie+8;  break;
		 case 'e': zf_disp8(R_ye,R_lie,smalle);R_lie=R_lie+8;  break;
		 case 'f': zf_disp8(R_ye,R_lie,smallf);R_lie=R_lie+8;  break;
		 case 'g': zf_disp8(R_ye,R_lie,smallg);R_lie=R_lie+8;  break;
		 case 'h': zf_disp8(R_ye,R_lie,smallh);R_lie=R_lie+8;  break;
		 case 'i': zf_disp8(R_ye,R_lie,smalli);R_lie=R_lie+8;  break;
		 case 'j': zf_disp8(R_ye,R_lie,smallj);R_lie=R_lie+8;  break;
		 case 'k': zf_disp8(R_ye,R_lie,smallk);R_lie=R_lie+8;  break;
		 case 'l': zf_disp8(R_ye,R_lie,smalll);R_lie=R_lie+8;  break;
		 case 'm': zf_disp8(R_ye,R_lie,smallm);R_lie=R_lie+8;  break;
		 case 'n': zf_disp8(R_ye,R_lie,smalln);R_lie=R_lie+8;  break;
		 case 'o': zf_disp8(R_ye,R_lie,smallo);R_lie=R_lie+8;  break;	
		 case 'p': zf_disp8(R_ye,R_lie,smallp);R_lie=R_lie+8;  break;
		 case 'q': zf_disp8(R_ye,R_lie,smallq);R_lie=R_lie+8;  break;
		 case 'r': zf_disp8(R_ye,R_lie,smallr);R_lie=R_lie+8;  break;
		 case 's': zf_disp8(R_ye,R_lie,smalls);R_lie=R_lie+8;  break;
		 case 't': zf_disp8(R_ye,R_lie,smallt);R_lie=R_lie+8;  break;
		 case 'u': zf_disp8(R_ye,R_lie,smallu);R_lie=R_lie+8;  break;
		 case 'v': zf_disp8(R_ye,R_lie,smallv);R_lie=R_lie+8;  break;
	 	 case 'w': zf_disp8(R_ye,R_lie,smallw);R_lie=R_lie+8;  break;
		 case 'x': zf_disp8(R_ye,R_lie,smallx);R_lie=R_lie+8;  break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -