📄 text1.c
字号:
#include <reg51.h>
#include<stdio.h>
#define RX_PAN_UP 0x40 //串口命令字 上
#define RX_PAN_DOWN 0x41 //串口命令字 下
#define RX_PAN_LEFT 0x42 //串口命令字 左
#define RX_PAN_RIGHT 0x43 //串口命令字 右
#define uchar unsigned char
#define uint unsigned int
xdata uchar RxByte[4]; //定义数据缓冲区
xdata uchar ReadIndex; //缓冲区读指针
xdata uchar WriteIndex; //缓冲区写指针
Uart_Init();
sbit P10=0x90; //P1.0位
sbit P11=0x91; //P1.1位
sbit P12=0x92; //P1.2位
sbit P13=0x93; //P1.3位
void Translate_RxByte(uchar RxByte);
//将命令字转化为控制信号
bit Change_Flag;
void Update_LED();
main()
{ uchar CurrentByte;
Uart_Init();
P0=0XFF; //初始化输出为1
P1=0X00; //初始化输出为0
P2=0XFF;
P3=0XFF;
ReadIndex=0; //读指针置0
WriteIndex=0; //写指针置0
ES=1; /* 串行口中断允许 */
EA=1; /* 全局中断允许 */
for(;;)
{
if(WriteIndex!=ReadIndex)
CurrentByte=RxByte[ReadIndex];
if(ReadIndex==2)
{
Translate_RxByte(CurrentByte);
//将命令字转化为控制信号
}
ReadIndex++;
if(ReadIndex>3) ReadIndex=0;
}
}
void Translate_RxByte(uchar RxByte )
{ switch(RxByte)
{ case RX_PAN_UP: P12=1; //云台上转
break;
case RX_PAN_DOWN: P13=1;//云台下转
break;
case RX_PAN_LEFT: P10=1;//云台左转
break;
case RX_PAN_RIGHT: P11=1;//云台右转
break;
default : P1=0x00; //云台停止转动
break;
}
}
Uart_Init()
{SCON = 0x52; /* 设置串行口控制寄存器SCON*/
TMOD = 0x21; /* 12M时钟时波特率为2400 */
TCON = 0x69; /* TCON */
TH1 = 0xf3; /* TH1 */
}
void Serial_int() interrupt 4 using 0
{ //串行口中断
if(RI==1)
{ RxByte[WriteIndex]=SBUF;
if(WriteIndex>3) WriteIndex=0;
WriteIndex++;
}
TI=0; //清串行口中断标准位
RI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -