PTR简易编程Word文件下载.docx
- 文档编号:18641608
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:17
- 大小:17.87KB
PTR简易编程Word文件下载.docx
《PTR简易编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《PTR简易编程Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
//////////////////////////////////////////////////
voiddelay_ms(uinttime)
{
uinti,j;
for(i=0;
i<
1000;
i++)
for(j=time;
j>
0;
j--);
}
//////////////////////////////////////////
voiduartinit()//串口初始化
EA=1;
ES=1;
PS=1;
//串口中断为高优先级;
TMOD=0x20;
//波特率定时器1;
TL1=0xFD;
TH1=0xFD;
//波特率9600
PCON=0x00;
SCON=0x50;
//方式1
TR1=1;
//开定时器1;
////////////////////////////////////////////////////
/*
voidptr_rece()//PTR接收,频道2
TXEN=0;
CS=1;
PWR=1;
delay_ms(15);
*/
/////////////////////////////////////////
voidptr_send()//PTR发送,频道2
TXEN=1;
delay_ms(10);
///////////////////////////////////////////////
voidClearR_buf()///清除r_buf
uchari=0;
while(r_buf[i]!
='
)
r_buf[i++]=0;
*/
/////////////////////////////////////////////
voidClearS_buf()//清除s_buf
while(s_buf[i]!
s_buf[i++]='
/////////////////////////////////////////////////
voidDatachange(uchar*str)//数据包装
uchari=0,checksum=0;
s_buf[0]='
$'
s_buf[1]='
%'
//起始位
s_buf[2]='
@'
s_buf[3]='
#'
while(str[i]!
)//数据位
{
s_buf[i+4]=str[i];
checksum=checksum+str[i];
i++;
}
s_buf[i+4]=checksum+i;
//校验位//数据长度//
s_buf[i+5]='
*'
//结束标志
s_buf[i+6]='
voidsend()//串口数据发送
{
uchari,j=0;
ES=0;
//先关串口中断,防止没有发送完整;
while(s_buf[j]!
SBUF=s_buf[j];
while(TI==0);
TI=0;
j++;
for(i=10;
i>
i--);
///////////////////////////////////////////////////////////////
/*
voidrece()interrupt4//接收中断
RI=0;
if((!
flag_start)&
&
(SBUF=='
))//判断是否收到‘$'
根据收到的指令设置相应标志;
flag_start=1;
if(flag_start)
if(Rcount<
5)
{
r_buf[Rcount]=SBUF;
Rcount++;
}
if((r_buf[Rcount]=='
)||(Rcount==5))//判断是否接收结束;
flag_start=0;
Rcount=0;
if(r_buf[2]==SEND_RE)//收到重发标志;
{
flag_rsend=1;
}
else
ClearR_buf();
///////////////////////////////////////////////////////////////////
voidmain()
//flag_rsend=0;
//重发标志置0;
ClearS_buf();
//ClearR_buf();
ptr_send();
//ptr设置为发送状态;
uartinit();
LCD_Clear();
LCD_Init();
LCD_dis1(str);
LCD_dis2(Data);
while
(1)
{
ClearS_buf();
Datachange(Data);
//数据包装;
send();
//发送数据
delay_ms(10);
/*ptr_rece();
//ptr设置为接收状态;
delay_ms(100);
if(flag_rsend)//要求重新发送
ptr_send();
send();
flag_rsend=0;
ptr_send();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**********接收部分*********************/
LCDDIS.h>
#defineLEN1
#defineSEND_RE0x99//重发标志
sbitCS=P1^0;
sbitPWR=P1^1;
sbitTXEN=P1^2;
bitflag_start=0;
bitflag_dis=1;
//bitflag_rsend;
//请求重发标志;
ucharstr1[5]="
ucharR_data[16]='
//接收的数据;
ucharr_buf[23]='
//4个起始位“$%@#”,16字节数据,1校验长度,1结束标志“*”
ucharRcount=0;
//uchars_buf[5];
//ucharScount=0;
voiduartinit(void);
voidptr_rece(void);
voidClearR_buf(void);
voidClear_Data(void);
voiduartinit()//串口初始化
//串口中断为高优先级;
//波特率定时器1;
//方式1
//开定时器1;
delay2(1000);
///////////////////////////////////////////////////
voidClear_Data()
while(R_data[i]!
R_data[i]='
'
voidptr_send()//PTR发送,频道2
}
///////////////////////////////////////////////////////////////
voidrece()interrupt4//接收中断
uchars=0;
ucharlen=0x30;
////////////////////////验证收到数据//////////////////////
))//判断是否收到‘$%@#'
flag_start=1;
if((Rcount==1)&
(SBUF!
)&
(flag_start))//判断第二个验证字符
ClearR_buf();
flag_start=0;
if((Rcount==2)&
(flag_start))//判断第三个验证字符
if((Rcount==3)&
(flag_start))//判断第四个验证字符
//////////////////////////////////////////////////////////////
if(Rcount<
23)
r_buf[Rcount]=SBUF;
Rcount++;
if((r_buf[Rcount-1]=='
)||(Rcount>
=23))//判断是否接收结束;
{
len=len+Rcount-6;
if(len==r_buf[Rcount-2])//数据校验
{
Clear_Data();
while(r_buf[s+4]!
=len)//获得数据;
{
R_data[s]=r_buf[s+4];
//获得数据;
s++;
ClearR_buf();
//初始化标志;
Rcount=0;
flag_dis=1;
ClearR_buf();
ptr_rece();
LCD_dis1(str1);
if(flag_dis==1)
LCD_dis2(R_data);
flag_dis=0;
////////////////////////////////////////////////////////////
/*********************1602驱动***********************************/
//lcdsub.h
#include"
reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_DATAP0
sbitLCD_RS=P1^5;
//寄存器
sbitLCD_R_W=P1^6;
//读写
sbitLCD_ENABLE=P1^7;
//使能
////////////////////////////////////////////////////////
voiddelay2(uinttime);
//延时
voidLCD_WriteCommand(ucharcmd);
//写指令
voidLCD_Clear(void);
//清屏
voidLCD_Init(void);
//初始化
voidLCD_CheckBusy(void);
//检查忙
voiddelay1(void);
//延时
voidLCD_WriteData(ucharData);
//写数据
voidLCD_flash(uinttime);
//闪烁三次
voidLshift(void);
//字符左移
voidRshift(void);
//字符右移
voidG_reset(void);
//光标复位
voidG_flash(void);
//光标闪烁
voidG_rshift(void);
//光标右移
voidLCD_dis1(uchar*pStr);
//显示第一行
voidLCD_dis2(uchar*pStr);
//显示第二行
/////////////延时//////////////////////////////////
voiddelay2(uinttime)
{uinti,j;
i--)
///////////////写指令//////////////////////////////
voidLCD_WriteCommand(ucharcmd)
LCD_CheckBusy();
delay2
(1);
LCD_ENABLE=0;
LCD_RS=0;
LCD_R_W=0;
LCD_ENABLE=1;
LCD_DATA=cmd;
////////////清屏////////////////////
voidLCD_Clear(void)
LCD_WriteCommand(0x01);
//////////////初始化///////////////////////////////
voidLCD_Init(void)
LCD_WriteCommand(0x38);
//设置8位总线,显示2行
LCD_WriteCommand(0x0c);
//显示允许,光标显示
LCD_WriteCommand(0x06);
//光标右移一格,AC植
////////////////检查是否忙/////////////////////////
voidLCD_CheckBusy(void)
uchartmp;
tmp=0x80;
while(tmp&
0x80)
LCD_ENABLE=0;
LCD_R_W=1;
LCD_RS=0;
LCD_ENABLE=1;
tmp=LCD_DATA;
delay1();
////////////////延时//////////////////////
voiddelay1(void)
{uintj;
uinti;
for(i=50;
for(j=30;
///////////////写数据/////////////////////////////
voidLCD_WriteData(ucharData)
delay2
(1);
delay2
(1);
LCD_RS=1;
LCD_DATA=Data;
//////////////////闪烁三次/////////////////////////
/*
voidLCD_flash(uinttime)
delay2(time);
LCD_WriteCommand(0x08);
//////////////左移//////////////////////////////
voidLshift(void)
40;
LCD_WriteCommand(0x18);
delay2(2500);
////////////////////右移///////////////////////////////////
voidRshift(void)
LCD_WriteCommand(0x1c);
////////////////////////光标复位////////////////////////////////
voidG_reset(void)
LCD_WriteCommand(0x02);
////////////////////////光标显示并闪烁//////////////////////
voidG_flash(void)
LCD_WriteCommand(0x0f);
//////////////////////////光标右移一位////////////////////
voidG_rshift(void)
LCD_WriteCommand(0x14);
/////////////////显示第一行/////////////////////////////////
voidLCD_dis1(uchar*pStr)
{uchari=0;
while(pStr[i]!
LCD_WriteCommand(0x80|i);
//1strow
LCD_WriteData(*(pStr+i));
delay1();
//////////////////显示第二行//////////////////////////////
voidLCD_dis2(uchar*pStr)
while(pStr[i]!
LCD_WriteCommand(0xc0|i);
//2ndrow
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PTR 简易 编程