当前位置:文档之家› 51单片机智能风扇点阵显示温度及按键控制程序(3)

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

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--){}
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,
{
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)
{
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();}
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;
}
/*****************************************************/
/* write a bety from ds18b20写字节*/
/****************************************************/
void wr_ds18_1(char dat)
{
signed char idata i=0;
unsigned char idata j;
}
/*****************************************************/
/* Read a bit from 1820位读取*/
/*****************************************************/
bit tmrbit_1(void)
/* reset ds18b20 */
/*****************************************************/
void ds_reset_1(void)
{
unsigned char idata count=0;
DQ1=0;
time_delay(240);
time_delay(240);
}
/***************延时程序,单位us,大于10us*************/
void time_delay(unsigned char time)
{
time=time-10;
time=time/6;
while(time!=0)time--;
}
/*****************************************************/
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_();
void delay1(unsigned int z);
bit flag=0,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;//包含头文件
#define BUSY1 (DQ1==0)//定义busy信号
//打开本定义为显示笑脸(默认打开),注意b数组不可以重复定义,打开一组,应该关闭前一组
0x80,
0xF0,
0x90,
0x90,
0x60,
//7
0xF0,
0x10,
0x10,
0Hale Waihona Puke 20,0x40,0x40,
0x40,
0x40,
//8
0x60,
0x90,
0x90,
0x60,
0x90,
0x90,
0x90,
0x60,
//9
0x60,
0x90,
0x90,
0x90,
0x70,
0x10,
0x90,
0x60
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)
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,
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;
/*
必要操作:正确连接点阵到学习板
*/
#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;//摇头
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)
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)
{
dis[j]=b[(TemH/10%10)*8+j]|(b[(TemH%10)*8+j]>>4);
}
for(i=0;i<8;i++)//点阵8列动态扫描法显示,每次扫描一列并发送数据码
相关主题