📄 cj1.c
字号:
#include<reg51.h>
#include"18B20_1.h" // 包含18b20函数
#define uchar unsigned char
#define uint unsigned int
sbit RE=P3^4;
uchar code display_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x77,0x73};
uchar ti=0;temperature[4]={11,0,0,0};
void display(); // 显示函数
void delay1(uint a); // 延时函数
void main()
{
int temp;
TMOD=0x21; //定时计数器1设置为模式2 ,定时计数器0为模式1
TL1=0XFD;
TH1=0XFD;
TH0=(65536-50000*110592/120000)/256; //设置50ms溢出一次
TL0=(65536-50000*110592/120000)%256;
PCON=0X00;
SCON=0xf0; //工作在方式3,允许通信,SM2=1只有RB8为1时才接受数据,否则不要
TR0=1;
TR1=1;
ET0=1;
RE=0; //设置457为接受状态
EA=1;
ES=1;
while(1)
{
display();
if(ti==20)
{
ti=0;
temp=b20_temperate(); // 获得整数部分温度
temperature[1]=temp%1000/100; // 百位温度
temperature[2]=temp%100/10; // 十位温度
temperature[3]=temp%10; // 个位温度
}
}
}
void delay1(uint a)
{
uchar i;
for(;a>0;a--)
for(i=100;i>0;i--);
}
void display()
{
P2=0XFF; // 显示从机的代号
P0=display_table[temperature[0]];
P2=0xfe;
delay1(1);
P2=0XFF; // 显示温度
P0=display_table[temperature[1]];
P2=0xfd;
delay1(1);
P2=0XFF;
P0=display_table[temperature[2]];
P2=0xfb;
delay1(1);
P2=0XFF;
P0=display_table[temperature[3]]+0x80;
P2=0xf7;
delay1(1);
}
void time() interrupt 1
{
TH0=(65536-50000*110592/120000)/256;
TL0=(65536-50000*110592/120000)%256;
ti++;
}
void r_scon() interrupt 4 //串口中断
{
uchar i;
if(RI==1)
{
RI=0;
delay1(10);
if(SBUF==1) //判断是否是本机地址,为1
{
ES=0; //关串口中断
SM2=0;
RE=1; //准备发送数据
delay1(5);
SBUF=1; //将本机的地址发送给主机
while(TI!=1);
TI=0;
delay1(10);
for(i=0;i<4;i++) //发送要显示的4个数据
{
SBUF=temperature[i];
while(TI!=1);
TI=0;
delay1(10);
}
RE=0;
ES=1;
SM2=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -