📄 温度传感器程序.txt
字号:
IntNum=0;
KeySETDown=0;
/*-----------按长SET的处理-------------*/
if(KSDNum>=60) //如一直长按了SET 3秒左右
{
RelayOutPort=1; //关闭控制对象
PowTF=1; //电源标识关
LED_Display(0,21,2,"--__OFF__-2007_6_23__--");
LEDPort=0xbf; //显示"--"
LEDOneC=0;
LEDTwoC=0;
LEDThreeC=0;
LED_C=0;
Delay_100ms(40); //延时4S
LEDOneC=1; //关显示
LEDTwoC=1;
LEDThreeC=1;
IntNum=0;
IntNum2=0;
IntNum3=0;
IntNum4=0;
Beep=1;
OPen=1;
LEDTF=0;
}
KSDNum=0;
}
}
KeyV=0; //清空变量准备下次键扫描
TempKeyV=0;
OPen=1;
/*-----------开电源程序-------------*/
if(!PowTF)
{
if(LEDTF==0)
{
LED_Display(0,26,2,"--__OPEN__--_3408_YOUJJYY_--");
if(DS1820ON==0)LED_Display(0,14,2,"--__ON-SENSOR__--");
LEDTF=1;
}
InitDS1820();
if(DS1820ON==0)IntNum5+=1;
if((DS1820ON==0)&&(IntNum5>400))
{LED_Display(0,14,2,"--__ON-SENSOR__--");IntNum5=0;IntNum4+=500;}
Write_Data(0xcc);
Write_Data(0x44);
Delay_6n5_8us(152); //延时1000uS 等转换完成
InitDS1820();
Write_Data(0xcc);
Write_Data(0xbe); //读出温度指令
ReadDS1820(); //读出温度值
V2ToV(); //转换显示值
if(TMV>TMSetV)RelayOutPort=0,Beep=0,IntNum4+=1; //根据采集的温度值控制对象
else if(DS1820ON==1) RelayOutPort=1,Beep=1,IntNum4=0;
if(IntNum4>=2000)KSDNum=60,IntNum=60,KeySETDown=1,KeyV=4;
if(SetTF)IntNum2+=1,OPen=1; //用于闪烁计数
if(IntNum2>50)IntNum2=0,OPen=0;
/*-----连按Key_UP或Key_DOWN键时的采集次数------*/
if(KeyTF)IntNum3+=1; //用于防止按键连按
if(IntNum3>15) //检测按键是否超过
{
IntNum3=0;
KeyTF=0;
}
if((SetTF)&&(IntNum2<20))goto InitEnd; //使LED闪烁
LEDPort=LED_One;
LEDOneC=0;
Delay_1ms(1);
LEDOneC=1; //显示百位数
LEDPort=LED_Two;
LEDTwoC=0;
Delay_1ms(1);
LEDTwoC=1; //显示十位数
LEDPort=LED_Three;
LEDThreeC=0;
Delay_1ms(1);
LEDThreeC=1; //显示个位数
}
InitEnd:
if(!PowTF){LEDPort=0x34;
LED_C=0;
Delay_1ms(1);
LED_C=1;}
}
==================================================================================================
/*==========================================
LED显示驱动程序
文件名:LED_Display.c
作者 YOUJJYY
时间:2007.4.6
============================================*/
#include <at89x52.h>
#include <main_led_display.h>
#define uchar unsigned char
//***********显示数据的转换***************//
uchar TO_DATA(bit n_s,uchar I,uchar led_data)
{
uchar x[3],y;
if(n_s==1)
{
switch(I)
{
case 0:if(led_data!=y){P0=P0^0x20;y=led_data;}
break;
case 1: {x[2]=(led_data>>4)+1;x[3]=(led_data&0x0f)+1;}
break;
case 2: {x[0]=(led_data>>4)+1;x[1]=(led_data&0x0f)+1;}
break;
default:break;
}
return x[I];
}
else
{
if(led_data<46)led_data=0;
else led_data-=47;
return led_data;
}
}
/*****************LED显示程序***************/
void LED_Display(bit N_S,uchar data_size,uchar S_D,uchar *LED_data)//N_S是数字和字符串显示选择,
//data_size显示多少位
//S_D是显示方式(0x00:静态,0x01:半动态,0x02:全动态)
//LED_data是要显示的数据
{
uchar t,y,i,x,z,a,k=20,size=0;
//*****************显示方式S_D***************//
switch(S_D)
{
case 0:a=0;
break;
case 1:a=4,k=80,size/=4;
break;
case 2:a=1;//size-=4;
break;
default:break;
}
//*************显示个数data_size***********//
for(i=0;i<data_size;i++) //BCD码转换成LED码
{
if(N_S==1)size=0;
else size+=1;
}
//****************显示程序**************//
for(t=0;t<=size;t++) //要显示的位数
{
for(y=0;y<=k;y++) //循环20显示
{
z=0x7f;
for(i=0;i<=3;i++) //一次显示
{
P2=z;
z>>=1;
z+=0x80;
x=TO_DATA(N_S,i,LED_data[i+t*a]);
P0=BCD_ASCII[x];
Delay_1ms(3);//延时时间
}
}
}
}
=====================================================================================================
/*==============================
延时程序函数
晶振:11.0592
文件名:Delay_1mS(uint x).c
===============================*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*------------------------------
延时1mS*n
-------------------------------*/
void Delay_1ms(uchar timer)
{
uchar j;
uint i;
for(j=timer;j>0;j--)
{
for(i=0;i<329;i++);
}
}
/*-----------------------------
延时(100ms*n=T)秒
--------------------------*/
void Delay_100ms(unsigned char nS)
{
unsigned char i,x,y;
for(i=0;i<nS;i++)
{
for(x=0;x<228;x++)
{
y=200;
while(y)y--;
}
}
}
/*-------------------------------
延时间(6.5*n+8=T)微秒
------------------------------*/
void Delay_6n5_8us(uchar nUs)//4微秒级延时<255us
{
uchar i=nUs;
while(i)i--;
}
=================================================================================================
/*==============================
ASCII转换成LED显示
文件名:BCD_ASCII.c
===============================*/
#include <at89x52.h>
#define uchar unsigned char
//**********ASCII转换成十进制显示LED************//
const uchar code BCD_ASCII[]={0xff,0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,
0xf6,0xb7,0x3c,0xb7,0xaa,0xc0,0x02,
0x60,0x25,0x3c,0x23,0x34,0x74,0x24,0x61,0xeb,0xab,0x35,
0x3d,0x48,0x68,0x28,0x70,0x08,0x50,0xa4,0x7c,0x29,0x09,
0xb1,0x41,0xa1,0x32,0x3c,0xe5,0xaa,0xf8,0xbf,0xdf,0x02,
0x25,0x37,0x23,0x30,0x74,0xa0,0x65,0xeb,0xab,0x35,0x3d,
0xf8,0x67,0x28,0x70,0xe0,0x57,0xa4,0xdc,0x2f,0x0f,0xf1,
0x41,0xa1,0x32,0xdf};
===================================================================================================
/*=================================
接口函数文件
文件名:LED_Display.h
=================================*/
#include <at89x52.h>
#define uchar unsigned char
#define uint unsigned int
/*********声明外部变量*******/
/*------显示程序------*/
extern void LED_Display(bit N_S,uchar data_size,uchar S_D,uchar *LED_data);
/*------延时程序------*/
extern void Delay_1ms(uchar timer);
extern void Delay_100ms(unsigned char nS);
extern void Delay_6n5_8us(uchar nUs);
const uchar code BCD_ASCII[];
/*-------接口定义-------*/
#define Key_UP P3_2 //上调温度
#define Key_DOWN P3_3 //下调温度
#define Key_SET P3_4 //设定键(温度设定,长按开电源)
#define RelayOutPort P2_1 //控制对象输出
#define LEDPort P0 //LED控制口
#define LEDOneC P2_7 //LED DS1控制(百位)
#define LEDTwoC P2_6 //LED DS2控制(十位)
#define LEDThreeC P2_5 //LED DS3控制(个位)
#define LED_C P2_4
#define TMPort P3_0 //DS18B20的数据输出引脚
#define Beep P2_0
#define ON_DS1820 P2_3
#define OPen P2_2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -