📄 zj.c
字号:
#include<reg51.h>
#define uchar unsigned char
sbit RE=P3^4; // 控制487接收,发送控制端
uchar code display_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x77,0x7c};
uchar j,temperature[4]; //存储温度数组
bit t; // 控制数据连续传送位
void display();
void delay(uchar a);
void main()
{
uchar i;
TMOD=0x21; //定时计数器1设置为模式2
TH0=(65536-50000*110592/120000)/256; //设置50ms溢出一次
TL0=(65536-50000*110592/120000)%256;
TL1=0XFD; //波特率设置
TH1=0XFD;
PCON=0X00;
SCON=0xd0; //工作在方式3,允许通信;
TR1=1; //定时计数器1开始计数
TR0=1;
ET0=1;
RE=0; //487准备接受数据数据
EA=1; //开总中断
ES=1; //开串口通信中断
while(1)
{
if(t==1&j>=20) //判断是否满足数据连续传送的条件
{
j=0;
while(RI!=1);
display();
if(SBUF==0XFE)
{
RI=0;
delay(10);
for(i=0;i<4;i++) //发送要显示的4个数据
{
while(RI!=1);
temperature[i]=SBUF;
RI=0;
delay(10);
}
}
ES=1;
t=0;
}
display();
}
}
void delay(uchar a)
{
uchar i;
for(;a>0;a--)
for(i=100;i>0;i--);
}
void display() //显示函数
{
P2=0XFF; // 显示从机的代号
P0=display_table[temperature[0]];
P2=0xfe;
delay(1);
P2=0XFF; // 显示温度
P0=display_table[temperature[1]];
P2=0xfd;
delay(1);
P2=0XFF;
P0=display_table[temperature[2]];
P2=0xfb;
delay(1);
P2=0XFF;
P0=display_table[temperature[3]]+0x80;
P2=0xf7;
delay(1);
}
void time() interrupt 1 //定时器
{
TH0=(65536-50000*110592/120000)/256;
TL0=(65536-50000*110592/120000)%256;
j++;
}
void r_scon() interrupt 4 //串口中断函数
{
uchar i;
if(RI==1)
{
RI=0;
delay(10);
if(SBUF==0XFD) //判断是否是接受一次数据,还是不断传输数据
{
ES=0;
t=0; //停止数据连续传送
for(i=0;i<4;i++) //发送要显示的4个数据
{
while(RI!=1);
temperature[i]=SBUF;
RI=0;
delay(10);
}
ES=1;
}
else if(SBUF==0XFE) //连续发送数据
{
t=1;
ES=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -