📄 index.c
字号:
/////////////////////////////////////////////////////////////////////////////////////////////////////
///// /////
///// 电子温度计c语言程序 /////
///// /////
///// /////
/////////////////////////////////////////////////////////////////////////////////////////////////////
#include "reg52.h"
#include "string.h"
#include "ds1302.h"
#include "ds18b20.h"
#include "lcd1602.h"
sbit RED=P1^3; //高温报警灯
sbit BLUE=P1^4; //低温报警灯
sbit SPEAKER=P3^7;//蜂鸣器
sbit SET=P3^0; //以下按钮设置
sbit SET2=P3^1;
sbit SET3=P2^0;
sbit NEXT=P2^1;
sbit REDUCE=P2^2;
sbit ADD=P2^3;
int tH=-1,tL=-1;//报警状态,1为关闭
int m,keyon,keytype,out=0,out2=0;//设置报警温度时使用的中间变量
float temperatureH=35,temperatureL=18; //报警温度
void delay(unsigned int time)
{
unsigned int n;
n=0;
while(n<time) n++;
return;
}
void ds_codechange()
{
dis1[0]=code_switch(((int)month)/10);
dis1[1]=code_switch(((int)month)%10);
dis1[3]=code_switch(((int)date)/10);
dis1[4]=code_switch(((int)date)%10);
dis1[6]=code_switch(((int)hour)/10);
dis1[7]=code_switch(((int)hour)%10);
dis1[9]=code_switch(((int)minute)/10);
dis1[10]=code_switch(((int)minute)%10);
dis1[12]=code_switch(((int)second)/10);
dis1[13]=code_switch(((int)second)%10);
dis1[15]=code_switch((int)week);
}
void t_codechange()//主界面温度显示float转换成字符
{
if(temperature>=0)
{
dis2[10]=code_switch((int)(temperature/100));
dis2[11]=code_switch(((int)(temperature)%100)/10);
dis2[12]=code_switch(((int)temperature)%10);
dis2[13]='.';
dis2[14]=code_switch(((int)(temperature*10))%10);
}
else
{
dis2[10]='-';
dis2[11]=code_switch(((int)(-temperature)%100)/10);
dis2[12]=code_switch(((int)(-temperature))%10);
dis2[13]='.';
dis2[14]=code_switch(((int)((-temperature)*10))%10);
}
}
///////////////////////////温度报警设置显示/////////////////////////
void Display2()
{
unsigned char i;
if(tH==1)//高温开关值设置
{
dis1[9]='O';
dis1[10]='F';
dis1[11]='F';
}
else
{
dis1[9]='O';
dis1[10]='N';
dis1[11]=' ';
}
if(temperatureH>=0)//高温温度值设置
{
dis1[13]=code_switch(((int)(temperatureH)%100)/10);
dis1[14]=code_switch(((int)temperatureH)%10);
}
else
{
dis1[13]='-';
dis1[14]=code_switch(((int)(-temperatureH))%10);
}
if(tL==1)//低温开关值设置
{
dis2[9]='O';
dis2[10]='F';
dis2[11]='F';
}
else
{
dis2[9]='O';
dis2[10]='N';
dis2[11]=' ';
}
if(temperatureL>=0)//低温温度值设置
{
dis2[13]=code_switch(((int)(temperatureL)%100)/10);
dis2[14]=code_switch(((int)temperatureL)%10);
}
else
{
dis2[13]='-';
dis2[14]=code_switch(((int)(-temperatureL))%10);
}
lcd_pos(0);
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x40);
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);
i++;
}
switch (m)
{
case 0: lcd_pos(0x0a);break;
case 1: lcd_pos(0x0E);break;
case 2: lcd_pos(0x4a);break;
case 3: lcd_pos(0x4E);break;
}
}
/////////////////////////////报警设置显示结束///////////////////////////////////
////////////////////////////////报警设置/////////////////////////////////////////
void seting()
{
if(SET==1&&NEXT==1&&REDUCE==1&&ADD==1); //无键盘按下
else /////有键盘按下时
{
keyon=1;
if(SET==0)keytype=0;
if(NEXT==0)keytype=1;
if(REDUCE==0)keytype=2;
if(ADD==0)keytype=3;
}
if(keyon==1&&SET==1&&NEXT==1&&REDUCE==1&&ADD==1) //键盘松开后判断键盘状态
{
if(keytype==1)////////////////菜单下翻
{
if(m>=3)m=0;
else m++;
}
if(keytype==2) ////////////////加操作
{
if(m==0)tH=-tH;
if(m==1)
{
if(temperatureH>(temperatureL+1)) temperatureH--;
else temperatureH=99;
}
if(m==2)tL=-tL;
if(m==3)
{
if(temperatureL>-9) temperatureL--;
else temperatureL=(temperatureH-1);
}
}
if(keytype==3) ////////////////减操作
{
if(m==0)tH=-tH;
if(m==1)
{
if(temperatureH<99) temperatureH++;
else temperatureH=(temperatureL+1);
}
if(m==2)tL=-tL;
if(m==3)
{
if(temperatureL<(temperatureH-1)) temperatureL++;
else temperatureL=-9;
}
}
if(keytype==0) ///////////跳出温度设置
{
keyon=0;
keytype=4;
out=1;
}
keyon=0;
keytype=4;
}
}
/////////////////////////////报警设置结束/////////////////////////////////////////
void Too_hot ()
{ unsigned char i;
unsigned char m;
lcd_init();
delay(100); //初始化LCD
lcd_pos(0); //设置显示位置为第一行的第1个字符
m = 0;
while(cdis3[m] != '\0')
{ //显示字符
lcd_wdat(cdis3[m]);
m++;
}
lcd_pos(0x40); //设置显示位置为第二行第1个字符
m = 0;
while(cdis4[m] != '\0')
{
lcd_wdat(cdis4[m]); //显示字符
m++;
}
for(m=0;m<5;m++)
{
RED=0;
SPEAKER=0;
delay(10000);
SPEAKER=1;
RED=1;
delay(10000);
SPEAKER=0;
}
if(SET==0) /////////////////////////进入报警温度设定
{
out=0;
delay(300);
while(SET==0);
strcpy(dis1,"ALARM-H: ON 35 \0");
strcpy(dis2,"ALARM-L: ON 18 \0");
lcd_init2();
lcd_pos(0);
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x40);
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);
i++;
}
lcd_pos(0x0a);//光标显示在高温开关位置
if(SET==0)
{
lcd_pos(0);
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x40);
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);
i++;
}
lcd_pos(0x0a);
}
m=0;
keyon=0;
keytype=4;
while(1)
{
Display2(); ///OFF,ON
seting(); ///ADD,DEC
if (out==1)
{
lcd_init();
delay(10);
strcpy(dis1,"10-11 19:57:00 2\0");
strcpy(dis2,"NOW TEMP: 000.0 \0");
break;
}
delay(1000);
}
delay(200);
while(SET==0);
}
}
void Too_cold ()
{ unsigned char i;
unsigned char m;
lcd_init();
delay(100); //初始化LCD
lcd_pos(0); //设置显示位置为第一行的第1个字符
m = 0;
while(cdis3[m] != '\0')
{ //显示字符
lcd_wdat(cdis3[m]);
m++;
}
lcd_pos(0x40); //设置显示位置为第二行第1个字符
m = 0;
while(cdis5[m] != '\0')
{
lcd_wdat(cdis5[m]); //显示字符
m++;
}
for(m=0;m<5;m++)
{
BLUE=0;
SPEAKER=0;
delay(10000);
SPEAKER=1;
BLUE=1;
delay(10000);
SPEAKER=0;
}
if(SET==0) /////////////////////////进入报警温度设定
{
out=0;
delay(300);
while(SET==0);
strcpy(dis1,"ALARM-H: ON 35 \0");
strcpy(dis2,"ALARM-L: ON 18 \0");
lcd_init2();
delay(50);
lcd_pos(0);
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x40);
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);
i++;
}
lcd_pos(0x0a);//光标显示在高温开关位置
if(SET==0)
{
lcd_pos(0);
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x40);
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);
i++;
}
lcd_pos(0x0a);
}
m=0;
keyon=0;
keytype=4;
while(1)
{
Display2(); ///OFF,ON
seting(); ///ADD,DEC
if (out==1)
{
lcd_init();
delay(10);
strcpy(dis1,"10-11 19:57:00 2\0");
strcpy(dis2,"NOW TEMP: 000.0 \0");
break;
}
delay(1000);
}
delay(200);
while(SET==0);
}
}
////////////////////////////////时间设置显示///////////////////////////////////////
void Display3()
{
unsigned char i;
dis1[12]=code_switch(((int)year)/10);
dis1[13]=code_switch(((int)year)%10);
dis2[0]=code_switch(((int)month)/10);
dis2[1]=code_switch(((int)month)%10);
dis2[3]=code_switch(((int)date)/10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -