📄 串口通信.c
字号:
#include<reg52.h>
#include<stdio.h>
//定义变量//
unsigned char dispbuf[]={0,0,0,0};
unsigned char sendbuf[]={0,0,0,0};
unsigned char rec_data[]={0,0,0,0};
unsigned int j,h;
sbit disp_data=P1^0;//四位数码管送显的数据端
sbit disp_clk=P1^1; //四位数码管送显的时钟端
char dispdata[0x04];
unsigned char cgf2[11]={0x88,0xEB,0x4C,0x49,0x2B,0x19,0x18,0xCB,0x08,0x09,0xFF};//数码管段码;
//***************延时******************//
void delay(unsigned int i)
{
while(i--);
}
void display4(char dispdata[0x04]) //四位数码管显示程序
{char i,j,temp;
for(i=0;i<4;i++)
{temp=cgf2[dispdata[i]]; //取出段码
for(j=0;j<8;j++) //循环送出
{if (temp&0x01) //判断高低
disp_data=1;
else disp_data=0;
disp_clk=0;
disp_clk=1; //clk端口置高
temp>>=1; //段码右移
}
}
}
void Dispbuf(unsigned int temper) //转换程序;
{
dispbuf[3]=temper/1000;
dispbuf[2]=(temper%1000)/100;
dispbuf[1]=(temper%100)/10;
dispbuf[0]=temper%10;
}
void scomre(unsigned char B0,unsigned char B1)//应答会信号//
{
unsigned char k;
k=0;
sendbuf[0]=B0;
sendbuf[1]=B1;
while(k<2)
{
SBUF=sendbuf[k];
while(TI==0);
TI=0;
k++;
}
delay(200);
}
main()
{
unsigned char i,rec_data,npos=0x01,flag=0;
TMOD=0X20;//初始化定时/计数器//
TL1=0xfe;TH1=0xf4;//波特率2400b/s,晶振为11.0592MHz
SCON=0x50;//串口初始化//
TR1=1;
RI=0;
while(1)
{
if(RI)//是否有信号//
{
rec_data=SBUF;//送缓存区//
Dispbuf(rec_data);
RI=0;//清接收标志//
delay(300);
display4(dispbuf);
flag=1;
}
if(flag==1)
{
scomre('O','K');
flag=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -