📄 lcd1602.c
字号:
#include "lcd1602.h"
#include "ds18b20.h"
#include <stdio.h>
void interrupt_init(void);
void serial_init(void);
void time0_init(void);
//unsigned char temp[5];
extern char xiaoshu_temp[5],zhen_temp[4];
extern bit flag;
extern bit dot_dis;
uchar data serial1=0;
uchar data serial2=0;
bit intval1=0;
bit intval2=0;
bit int_pro1=0;
bit int_pro2=0;
bit clr_screen=0;
uchar adc_val=0;
sbit P1_7 = P1^7;
void main(void)
{
uchar *str="temperature is ";
uchar *str1="serial1 !";
uchar *str2="serial2 !";
serial_set();
Lcd_Init();
interrupt_init();
time0_init();
ClrScreen();
GotoXY(0,0);
Print(str);
dot_dis=1;
P1_7=0;
while(1)
{
if(intval1&&int_pro1) //如果触发中断0,即采集从机1的值
{ clr_screen=1;
serial_init(); //初始化串口
SBUF=0x7f; //发送从机1地址0x7f
while(!TI); //等待发送完成
TI=0;
intval1=0;//0
while(int_pro1) //如果没触发第二次中断0,循环
{
if(serial1) //从机1响应是否正确
{
if(serial1==1) //如果从机正确接收到地址
{ SCON=0xd0; //TB8=0
serial1=0;
SBUF=0xaa; //发送A/D转换命令0xaa
while(!TI);
TI=0;
}
if(serial1==2) //如果从机正确接受到转化命令0xaa
{
serial1=0; //
SBUF=0xbb; //发送把从机转化结果送主机的命令0xbb
while(!TI);
TI=0;
}
if(serial1==3) //如果从机发送结果完成
{
ClrScreen();
serial1=0;
Print("adc_success1!");//显示结果
}
}
}
}
if(intval2&&int_pro2)
{ clr_screen=1;
serial_init(); //初始化串口
SBUF=0x8f; //发送从机2地址0x8f
while(!TI); //等待发送完成
TI=0;
intval2=0;//0
while(int_pro2) //如果没触发第二次中断1,循环
{
if(serial2) //从机2响应是否正确
{
if(serial2==1) //如果从机正确接收到地址
{
SCON=0xd0;
serial2=0;
SBUF=0xaa; //发送A/D转换命令0xaa
//while(!TI);
//TI=0;
}
if(serial2==2) //如果从机正确接受到转化命令0xaa
{
serial2=0; //
SBUF=0xbb; //发送把从机转化结果送主机的命令0xbb
//while(!TI);
//TI=0;
}
if(serial2==3) //如果从机发送结果完成
{
serial2=0;
ClrScreen();
Print("adc_success2!");//显示结果
//P1_7=~P1_7;
}
}
}
}
if(clr_screen)
{
clr_screen=0;
ClrScreen();
Print(str);
}
ds18b20_process(); //温度处理函数
}
}
void interrupt_init(void)
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
}
void serial_init(void)
{
SCON=0xd8;
TMOD=0x20;
TH1=0xfd;
TL0=0xfd;
TR1=1;
ES=1;
}
void interrupt0(void) interrupt 0 using 1
{
intval1=1;
int_pro1=~int_pro1;
}
void interrupt4(void) interrupt 4 using 2
{
ES=0;
if(TI)
{
TI=0;
}
if(RI)
{
RI=0;
if(SBUF==0x11) //如果接收到从机1发送的地址响应码0x11
{
serial1=1; //置serial1=1
}
if(SBUF==0x22) //如果接收到从机1发送的A/D转换命令的响应码0x22
{
serial1=2; //置serial1=2
}
if(SBUF==0x33) //如果接收到从机1发送把从机转化结果送主机的命令响应码0x33
{
serial1=3; //置serial1=3
SBUF=0xcc;
while(!TI);
TI=0;
while(!RI) //等待接收
;
RI=0;
adc_val=SBUF; //接收转换值
}
if(SBUF==0x44) //如果接收到从机1发送的地址响应码0x44
{
serial2=1; //置serial2=1
}
if(SBUF==0x55) //如果接收到从机1发送的A/D转换命令的响应码0x55
{ //P1_7=1;
serial2=2; //置serial2=2
}
if(SBUF==0x66) //如果接收到从机1发送把从机转化结果送主机的命令响应码0x66
{
serial2=3; //置serial2=3
SBUF=0xcc;
while(!TI);
TI=0;P1_7=~P1_7;
while(!RI)
;
RI=0;
adc_val=SBUF; //接收转换值
//ClrScreen();
//Print("adc_success2 !");
//int_pro2=0;
}
}
ES=1;
}
void interrupt2(void) interrupt 2 using 3
{
intval2=1; //1
int_pro2=~int_pro2;
}
void time0_init(void)
{
TMOD=TMOD&0xf0;
TMOD=TMOD|0x01;
TH0=0x0;
TL0=0x0;
ET0=1;
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -