51单片机智能风扇点阵显示温度及按键控制程序(3)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* write a bety from ds18b20写字节*/
/****************************************************/
void wr_ds18_1(char dat)
{
signed char idata i=0;
unsigned char idata j;
DQ1=1;
return;
}
void check_pre_1(void)
{
while(DQ1);
while(~DQ1);
time_delay(30);
}
void read_ROM(void)
{
int n;
ds_reset_1();
check_pre_1();
wr_ds18_1(0x33);
for(n=0;n<8;n++){ROM[n]=rd_ds18_1();}
}
void main(void)//主函数
{
unsigned int i,j;
P0=0XFF;
r=1;//P0口各脚输出高电平,点阵不显示
a=1;
q=1;
w=1;
e=1;
t=1;
ds_init();
while(1)
{
ds_getT(); //生成一个变量TemH,存储温度的整数位
for(j=0;j<8;j++)
ds_reset_1();
ds_reset_1();//reset
wr_ds18_1(0xcc);//skip rom
_nop_();
wr_ds18_1(0x7f);
ds_reset_1();
wr_ds18_1(0xcc);
_nop_();
wr_ds18_1(0x44);
for(k=0;k<11000;k++)
{
delay();
if(P1_5==0&&flag5==0)
{
t=0;
delay1(1);
a=0;
delay1(20);
flag5=1;
}
}
if(P1_5=wenku.baidu.com1)
{
delay();
if(P1_5==1)
{
flag5=0;
a=1;
}
}
}
}
void ds_init(void)
{
unsigned int k=0;
if(P1_1==0&&flag1==0)
{
q=0;
w=1;
e=0;
r=1;
delay1(1);
a=0;
delay1(20);
flag1=1;
}
}
if(P1_1==1)
{
delay();
if(P1_1==1)
{
flag1=0;
a=1;
}
}
if(P1_2==0&&flag1==0)
{
delay();
if(P1_2==0&&flag1==0)
void delay1(unsigned int z);
bit flag=0,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;//包含头文件
#define BUSY1 (DQ1==0)//定义busy信号
//打开本定义为显示笑脸(默认打开),注意b数组不可以重复定义,打开一组,应该关闭前一组
q=1;
w=1;
e=1;
r=1;
t=1;
delay1(1);
a=0;
delay1(20);
flag3=1;
}
}
if(P1_3==1)
{
delay();
if(P1_3==1)
{
flag3=0;
a=1;
}
}
//if(P1_4==0&&flag4==0)
//{
//delay();
// if(P1_4==0&&flag4==0)
_nop_();
}
}
}
int get_temp_1(void)
{
unsigned char idata a=0,b=0;
unsigned char idata i;
EA=0;
ds_reset_1();
check_pre_1();
wr_ds18_1(0xcc);
wr_ds18_1(0x44);
while(BUSY1);
0x80,
0xF0,
0x90,
0x90,
0x60,
//7
0xF0,
0x10,
0x10,
0x20,
0x40,
0x40,
0x40,
0x40,
//8
0x60,
0x90,
0x90,
0x60,
0x90,
0x90,
0x90,
0x60,
//9
0x60,
0x90,
0x90,
0x90,
0x70,
0x10,
0x90,
0x60
{
idata char i=0;
bit dat;
DQ1=0;_nop_();
DQ1=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
q=1;
w=1;
e=1;
r=1;
delay1(2000);
q=0;
w=1;
e=1;
r=0;
delay1(2000);
//flag4=1;
}
//}
//if(P1_4==1)
//{
// delay();
//if(P1_4==1)
//{
//flag4=0;
//a=1;
// }
// }
if(P1_5==0&&flag5==0)
void wr_ds18_1(char dat);
void time_delay(unsigned char time);
int get_temp_1(void);
void delay_ds(unsigned int x);
void read_ROM(void);
int get_temp_d(void);
/* reset ds18b20 */
/*****************************************************/
void ds_reset_1(void)
{
unsigned char idata count=0;
DQ1=0;
time_delay(240);
time_delay(240);
void ds_init(void);
void ds_getT(void);
unsigned char ResultSignal;
int ResultTemperatureLH,ResultTemperatureLL,ResultTemperatureH;
unsigned char ROM[8];
unsigned char idata TMP;
if (a>8)
{
TMP=(TMP+1);
unsigned char idata TMP_d;
unsigned char f;
unsigned char rd_ds18_1();
unsigned int TemH,TemL;
unsigned int count;
void delay()
{
unsigned int c;
c=50;
while(c--){}
{
dis[j]=b[(TemH/10%10)*8+j]|(b[(TemH%10)*8+j]>>4);
}
for(i=0;i<8;i++)//点阵8列动态扫描法显示,每次扫描一列并发送数据码
{
P0=dis[i];//P0数据口
P2=~(1<<i);//扫描该列
delay1(1);//延时
}
if(P1_0==0&&flag==0)
}
/***************延时程序,单位us,大于10us*************/
void time_delay(unsigned char time)
{
time=time-10;
time=time/6;
while(time!=0)time--;
}
/*****************************************************/
unsigned char code b[80]={
//0
0x60,
0x90,
0x90,
0x90,
0x90,
0x90,
0x90,
0x60,
//1
0x20,
0x60,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
//2
0x60,
0x90,
0x10,
0x10,
0x20,
0x40,
0x80,
dat = DQ1;
time_delay(50);
return dat;
}
/*****************************************************/
/* read a bety from ds18b20字节读取*/
/*****************************************************/
if(P1_4==0)
{
q=0;
w=0;
e=1;
r=1;
delay1(2000);
q=1;
w=1;
e=1;
r=1;
delay1(2000);
q=0;
w=1;
e=0;
r=1;
delay1(2000);
q=1;
w=1;
e=1;
r=1;
delay1(2000);
q=0;
w=1;
e=1;
r=0;
delay1(2000);
time_delay(255);
ds_reset_1();
}
void ds_getT(void)
{
wr_ds18_1(0xcc);
wr_ds18_1(0xbe);
TemH=get_temp_1();
TemL=get_temp_d();
TemH&=0x00ff;
TemL&=0x00ff;
count=(TemH*256+TemL)*6.25;
ds_reset_1();
check_pre_1();
wr_ds18_1(0xcc);
wr_ds18_1(0xbe);
a=rd_ds18_1();
b=rd_ds18_1();
i=b; /*若b为1则为负温*/
i=(i>>4);
if(i==0)
{
f=0;
TMP=((a>>4)|(b<<4));
a=(a&0x0f);
}
/*****************************************************/
/* Read a bit from 1820位读取*/
/*****************************************************/
bit tmrbit_1(void)
};
unsigned char dis[8]={0,0,0,0,0,0,0,0};
sbit DQ1=P3^5;
void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);
void ds_reset_1(void);
{
q=0;
w=1;
e=1;
r=0;
delay1(1);
a=0;
delay1(20);
flag2=1;
}
}
if(P1_2==1)
{
delay();
if(P1_2==1)
{
flag2=0;
a=1;
}
}
if(P1_3==0&&flag3==0)
{
delay();
if(P1_3==0&&flag3==0)
{
unsigned char rd_ds18_1()
{
unsigned char idata i,j,dat=0;
for(i=1;i<=8;i++)
{
j=tmrbit_1();
dat=(j<<(i-1))|dat;
}
return dat;
}
/*****************************************************/
bit testb;
for(j=1;j<=8;j++)
{
testb=dat & 0x01;
dat = dat>>1;
if(testb)
{
DQ1=0;
_nop_();
_nop_();
DQ1=1;
time_delay(60);
}
else
{
DQ1=0;
time_delay(50);
DQ1=1;
_nop_();
{
delay();
if(P1_0==0&&flag==0)
{
q=0;
w=0;
e=1;
r=1;
delay1(1);
a=0;
delay1(20);
flag=1;
}
}
if(P1_0==1)
{
delay();
if(P1_0==1)
{
flag=0;
a=1;
}
}
if(P1_1==0&&flag1==0)
{
delay();
0xF0,
//30
0x60,
0x90,
0x10,
0x60,
0x10,
0x10,
0x90,
0x60,
//4
0x10,
0x20,
0x60,
0xA0,
0xA0,
0xF0,
0x20,
0x20,
//5
0xF0,
0x80,
0x80,
0xE0,
0x10,
0x10,
0x90,
0x60,
//6
0x60,
0x90,
0x80,
/*
必要操作:正确连接点阵到学习板
*/
#include "INTRINS.H"
#include <AT89X52.H>
sbit a=P3^4; //蜂鸣器
sbit q=P3^6;//总开关
sbit w=P3^3; //三档
sbit e=P3^2;//二档
sbit r=P3^1;//一档
sbit t=P1^7;//摇头
相关文档
最新文档