单片机源程序如下:
#include"reg52.h" /*51串口通信by沸腾的冰块/不拼不活*/
typedef unsigned int u16;
typedef unsigned char u8;
#define Data_SIZE 7 //存入数组RevBuf数据长度==uart_Data_SIZE-2
#define uart_Data_SIZE 5//协议实际长度(一个汉字占两位)
u8 RevBuf[Data_SIZE]; //数据接收缓冲区
u8 indata[uart_Data_SIZE]; //防数据抵消缓冲区
u16 data_count=0; //数据长度,串口中断自增
u16 temp_length=0; //数据长度,协议长度中转
u8 flished_flag=0; //数据接收符合要求标志
u8 uart_flished_flag=0; //串口成功标志
u8 i=0;//延时用
u16 temp=0,count=0;//temp缓存,count用于判断是否接受到数据
sbit LED1=P1^0;sbit k1=P2^0;
sbit LED2=P1^1;sbit k2=P2^1;
sbit LED3=P1^2;sbit k3=P2^2;
sbit LED4=P1^3;sbit k4=P2^3;
sbit LED5=P1^4;sbit k5=P2^4;
sbit LED6=P1^5;sbit k6=P2^5;
sbit LED7=P1^6;sbit k7=P2^6;
sbit LED8=P1^7;sbit k8=P2^7;
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFA;//在此修改波特率
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void delay(u16 i)
{
while(i--);
}
void keypros()//按键处理
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
LED1=~LED1;
}
while(!k1);
}
if(k2==0)
{
delay(1000);
if(k2==0)
{
LED2=~LED2;
}
while(!k2);
}
if(k3==0)
{
delay(1000);
if(k3==0)
{
LED3=~LED3;
}
while(!k3);
}
if(k4==0)
{
delay(1000);
if(k4==0)
{
LED4=~LED4;
}
while(!k4);
}
if(k5==0)
{
delay(1000);
if(k5==0)
{
LED5=~LED5;
}
while(!k5);
}
if(k6==0)
{
delay(1000);
if(k6==0)
{
LED6=~LED6;
}
while(!k6);
}
if(k7==0)
{
delay(1000);
if(k7==0)
{
LED7=~LED7;
}
while(!k7);
}
if(k8==0)
{
delay(1000);
if(k8==0)
{
LED8=~LED8;
}
while(!k8);
}
}
void UartSendByte(unsigned char c)//发送一个字符
{
SBUF = c;
while(!TI);
TI = 0;
}
void UartSendString(u8 *string)//发送一个字符串
{
while(*string)
{
UartSendByte(*string++);
}
}
void main(void)
{
InitUART();
UartSendString("Uart_test is OK rn");
while(1)
{
keypros();
if(count count=data_count; if(temp!='n') //判断是否接收到结束符 { RevBuf[data_count-1]=temp;// 否,就存到RevBuf【】数组中 flished_flag=0;//未接收完 } else { temp_length=data_count;//是,记录其数据长度 data_count=count=0; flished_flag=1;//接收完 } } if(temp_length == Data_SIZE&&flished_flag==1) //判断数据长度是否满足要求,是否接收完。 { for(i=0;i indata[i]=RevBuf[i]; //缓冲区 } uart_flished_flag=1; //数据接收成功标志 flished_flag=0; } if(uart_flished_flag==1) //数据接收完整成功 { UartSendString("你发送的是rn"); for(i=0;i SBUF = indata[i]; while(!TI); TI=0; } UartSendString("rn"); uart_flished_flag=0; if(indata[1]=='n')//发送:on :1 switch(indata[4]) {
上一篇:2864串口接线方式与实例程序
下一篇:51单片机旋转led(POV-LED)显示系统设计报告与代码
推荐阅读最新更新时间:2024-11-22 12:51
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LT1506CR-SYNC 的参考设计
- 使用 Microchip Technology 的 TC38C46CPE 的参考设计
- AD9753-EB,使用 AD9753、12 位、300 MSPS 高速数模转换器的评估板
- 具有反馈关断功能的 LT1120CN8 5V 稳压器的典型应用电路
- LTC2184 演示板,16 位 105Msps 双路 ADC,DDR LVDS 输出,5-140MHz
- 基于MCU的Alexa语音服务解决方案
- 带有外部 PNP 饱和开关的 MC34063A 电压反相转换器的典型应用
- STM32CoreBoard—V1.0.0
- SC8802升降压验证板
- LT3091IFE 无镇流器负载共享的典型应用(使用 IMONP)
- 下载有礼|是德科技电子书 《通过了解测试精度的基础知识, 提高良率并降低风险》,不做“差不多先生”
- 赛灵思工业与医疗专题有奖问答
- TI LM3S811 分组DIY,火热进行中......
- 【已结束】 Qorvo、村田、NI直播【UWB最新技术、方案、市场、应用解析】(13:30开始入场)
- 有奖直播:基于GaN 的高频(1.2MHz)高效率 1.6kW 高密度临界模式 (CrM) 图腾柱功率因数校正 (PFC)转换器的应用介绍
- 有奖直播|贝能国际推出基于英飞凌技术的毫米波雷达模组,完美解决PIR市场痛点
- 了解PI InnoSwitch-CE,答题赢好礼
- 报名2019年ST全国巡回研讨会,赢三重好礼
- 瓜分2000元新年开工红包!贸泽电子邀你元宵猜灯谜
- 泰克 4200A-SCS 带您走进半导体材料测试世界 下载赢好礼!