📄 cj2.c
字号:
#include<reg51.h>
#include<18B20_1.h> // 包含18b20函数
#define uchar unsigned char
sbit RE=P3^4;
uchar code display_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x77,0x7c};
uchar ti=0;temperature[4]={12,0,0,0};
bit t=0; //数据发送控制位
void display(); // 显示函数
void delay1(uchar a); // 延时函数
void judge_button(); // 判断按键
void more_send(); //数据发送函数
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;
EA=1;
ET0=1;
RE=1; //设置457为发送状态
while(1)
{
display();
judge_button();
if(ti==20)
{
ti=0;
temp=b20_temperate(); // 获得整数部分温度
temperature[1]=temp%1000/100; // 百位温度
temperature[2]=temp%100/10; // 十位温度
temperature[3]=temp%10; // 个位温度
if(t==1) //控制数据是否不断发送
{
more_send();
}
}
}
}
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 one_send() // 发送一次数据
{
uchar i;
SBUF=0XFD; //将本机的地址发送给主机
while(TI!=1);
TI=0;
delay(10);
for(i=0;i<4;i++) //发送要显示的4个数据
{
SBUF=temperature[i];
while(TI!=1);
TI=0;
delay(10);
}
}
void more_send() // 不断发送数据
{
uchar i;
SBUF=0XFE; //将本机的地址发送给主机
while(TI!=1);
TI=0;
delay(10);
SBUF=0XFE; //用来验证数据的传送
while(TI!=1);
TI=0;
delay(10);
for(i=0;i<4;i++) //发送要显示的4个数据
{
SBUF=temperature[i];
while(TI!=1);
TI=0;
delay(10);
}
}
void judge_button()
{
if(P1!=0xff) //判断是否有按钮按下
{
delay(10);
switch(P1)
{
case 0xfe: t=0; one_send(); break; // 发送一次数据
case 0xfd: t=1; break; // 连续发送数据
}
P1=0XFF;
}
}
void time() interrupt 1 //定时器
{
TH0=(65536-50000*110592/120000)/256;
TL0=(65536-50000*110592/120000)%256;
ti++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -