本帖最后由 ark8976 于 2018-12-13 13:48 编辑
#include <reg51.h> //包含头文件reg51.h,定义了51单片机的专用寄存器
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0;/*上翻页*/
sbit key2=P2^1;/*功能选择*/
sbit key3=P2^2;/*下翻页*/
sbit led=P2^7;
sbit jdq=P2^6;
sbit DQ=P2^4;
void key1_jianyi(void);
void key2_pueren(void);
void key3_jiayi(void);
void key_shaomio(void);
void int_18b20(void);//初始化DS18B20
void read_one_char(void);
void write_one_char(uchar);
void read_temp(void);
uchar temp_mea;
uchar set_flag;
usigned char t0,t1;//定义全局变量,用来保存延时时间循环次数
void delay0_5s1()
{
for(t0=0;t0<10;t0++) //采用全局变量t0作为循环控制变量
{
TH1=(65536-50000)/256; //设置定时器初值
TL1=(65536-50000)%256;
TR1=1; //启动T1
while(!TF1); //查询计数是否溢出,即50ms定时时间到,TF1=1
TF1=0; //50ms定时时间到,将定时器溢出标志位TF1清零
}
}
//函数名:delay_t1
//函数功能:实现0.5~128s延时
//形式参数:unsigned char t;
// 延时时间为0.5s×t
//返回值:无
void delay_t1(unsigned char t)
{
for(t1=0;t1<t;t1++) //采用全局变量t1作为循环控制变量
delay0_5s1();
}
void main()
{
uchar code display1[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code bitcode[]={0x7f,0xbf,0xdf,0xef};
}
void int_18b20(void) //初始化DS18B20
{
uchar x=0;
DQ=1; //复位
delay0_5s1();
DQ=0;
delay0_5s1();
DQ=1;
delay0_5s1();
x=DQ;
delay0_5s1();
}
void read_one_char(void)
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
_nop_();
dat>>=1;
DQ=1;
delay0_5s1();
if(DQ)dat|=0x80;
}
return(dat);
}
void write_one_char(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--);
{
DQ=0;
_nop_();
DQ=dat&0x01;
delay0_5s1();
DQ=1;
dat>>=1;
delay0_5s1();
}
}
void read_temp(void)
{
uchar a=0;
uchar b=0;
uchar t=0;
int_18b20();
write_one_char(0xcc);
write_one_char(0x44);
int_18b20();
write_one_char(0xcc);
write_one_char(0xbe);
a=read_one_char();
b=read_one_char();
t=b;
t<<=8;
t=t|a;
temp_mea=t*(0.0625);
}
void key_shaomio(void)
{
uchar temp;
P2=0xff;
if(P2!=0xff)
{
delay0_5s1();
if(P2!=0xff)
{
temp=P2;
switch(temp)
{
case 0xfe:key2_pueren();break;//P2.1按下,功能选择
case 0xfd:key1_jianyi();break;//P2.0按下,数字加1
case 0xfd:key3_jiayi();break;//P2.2按下,数字减一
default:break;
},
}
}
}
key2_pueren(void)
{
set_flag++;
if( set_flag>=3) //set_flag=1设定上限值
set_flag=0; //set_flag=2设定下限值
}
key1_jianyi(void)
{
switch(set_flag)
{
case 1:temp_set1++;if(temp_set1>=99)temp_set1=99;break;
case 2:temp_set2++;if(temp_set2>=temp_set1)temp_set2=temp_set1;break;
default:break;
}
}
key3_jiayi(void)
{
switch(set_flag)
{
case 1:temp_set1--;if(temp_set1<=temp_set2)temp_set1=temp_set2;break;
case 2:temp_set2--;if(temp_set2<=1)temp_set2=1;break;
default:break;
}
}
|