📄 test1.c
字号:
//基于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 + -