📄 main.c
字号:
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
extern void LCD_DispIni(void);
extern void LCD_DispFill(uchar filldata);
extern void LCD_DispChar(uchar cy, uchar cx, char dispdata);
extern void LCD_DispStr (uchar cy, uchar cx, char *disp_str);
extern void LCD_DispHZ (uchar cy, uchar cx, char dispdata);
extern void LCD_DispHZStr (uchar cy, uchar cx, char *disp_str);
extern int readt(void);
extern void convert(void);
//时间初始化为0
uchar sec0=0x30,min0=0x30,hour0=0x30;
uchar sec1=0x30,min1=0x30,hour1=0x30;
//定时器1
//uchar s0=0x30,m0=0x30,h0=0x30;
//uchar s1=0x30,m1=0x30,h1=0x30;
uint count=0;//用于计数
uint count1=0;
sbit led=P1;
void timer0(void) interrupt 1 //计数器0,用于浇灌时间
{
TH0=-25000/256;
TL0=-25000%256;
count++;
if(count==20)//满1秒
{
count=0;
sec0++;//秒加一
if(sec0==0x3a)
{
sec0=0x30;
sec1++;
if(sec1==0x36)
{
min0++;
sec0=0x30;
sec1=0x30;
if(min0==0x3a)
{
min1++;
if(min1==0x36)
{
hour0++;
min1=0x30;
min0=0x30;
if(hour0==0x3a)
{
hour1++;
}
}
}
}
}
}
LCD_DispChar(7, 13,sec0);
LCD_DispChar(7,12,sec1);
LCD_DispChar(7,10,min0);
LCD_DispChar(7, 9,min1);
//LCD_DispChar(3,1,hour0);
//LCD_DispChar(3,0,hour1);
}
uchar dp[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};//小数部分转换
uchar str[6]={0,0,0,0,0,0};
void time0_Ini(void)
{
TMOD=0x01;
TH0=-25000/256;
TL0=-25000%256;
TR0=1;
ET0=1;
EA=1;
}
void timer1(void) interrupt 3 //计数器0,用于浇灌时间
{
TH1=-25000/256;
TL1=-25000%256;
count1++;
if(count1==1200)//满1秒
{
count1=0;
TR1=0;
ET1=0;
time0_Ini();
led=0x00;
}
}
void time1_Ini(void)
{
TMOD=0x10;
TH1=-25000/256;
TL1=-25000%256;
TR1=1;
ET1=1;
EA=1;
}
void main()
{
uchar buf[4]={1,0,13,0x55};//常温
uchar buf1[4]={2,0,13,0x55};//低温
uchar buf2[4]={3,0,13,0x55};//高温
uchar buf3[]={4,5,6,7,8,13,0x55};//电磁阀开关
uchar buf4[]={9,10,11,12,13,0x55};//浇灌时间
uchar guan[]={8,0x55};
uchar kai[]={7,0x55};
uchar hm[]={16,14,16,15,0x55};
int temp;
bit zf; //正负标记,0:正数 1:负数
LCD_DispIni();
while(1)
{
LCD_DispHZStr(2, 0, buf3);
LCD_DispHZStr(3, 0, buf4);
convert(); //启动温度转换
temp=readt(); //读取温度值
if(temp<=0x230)
{
if(temp<=0x180)
{LCD_DispHZStr(0, 0, buf1);
LCD_DispHZStr(2, 6, guan);
TR0=0;
ET0=0;
EA=0;
LCD_DispChar(7, 13,'0');
LCD_DispChar(7,12,'0');
LCD_DispChar(7,10,'0');
LCD_DispChar(7, 9,'0');
led=0xff;
}
else
{
time0_Ini();
LCD_DispHZStr(0, 0, buf);
LCD_DispHZStr(2, 6, kai);
led=0x00;
if(min0==0x31)//到一分钟,停止浇灌
{
TR0=0;
ET0=0;
LCD_DispHZStr(2, 6, guan);
led=0xff;
sec0=0x30;
sec1=0x30;
min0=0x30;
min1=0x30;
time1_Ini();//启动定时器T1
}
}
}
else
{
time0_Ini();
LCD_DispHZStr(0, 0, buf2);
LCD_DispHZStr(2, 6, kai);
led=0;
if(min0==0x32)
{
TR0=0;
ET0=0;
EA=0;
led=0xff;
sec0=0x30;//时间清零
sec1=0x30;
min0=0x30;
min1=0x30;
}
}
zf=0;
if(temp<0) //如果温度在0度以下
{ zf=1; //置负数标志
temp=-temp; //求补
}
str[4]=dp[temp&0x0f]+0x30; //求出温度的小数
temp=temp>>4;
str[0]=temp/100+0x30; //求出百位
temp=temp%100;
str[1]=temp/10+0x30; //求出十位
str[2]=temp%10+0x30; //求出个位
str[3]='.';
if(zf==1) //如果是负数
{ if(str[1]=='0') //如果十位为0
{ str[0]=' '; //显示格式为' -x.x'
str[1]='-';
}
else //如果十位不为0
str[0]='-'; //显示格式为'-xx.x'
}
else //否则,如果是正数
{ if(str[0]=='0') //如果百位、十位都是0
{ if(str[1]=='0') //显示格式为' x.x'
str[1]=' '; // 如果只有百位为0
str[0]=' '; //显示格式为' xx.x'
}
}
LCD_DispStr(1.5, 5, str);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -