基于ATmega128的DHT11溫濕度傳感器的使用
#define LCK_1 PORTB|=(1
#define SDI_0 PORTB=~(1
#define SDI_1 PORTB|=(1
void init(void);
void send_595(unsigned char dat);
void digitron_show(unsigned int int_part,unsigned int float_part);
#endif
================================================
//這里是xianshi.c
#includexianshi.h
#ifndef __DELAY_H
#includedelay.h
#endif
#ifndef __DHT11_H
#includedht11.h
#endif
//數(shù)碼管顯示數(shù)組定義
const unsigned char table[]=
{
0x3F,// 0
0x06,// 1
0x5B,// 2
0x4F,// 3
0x66,// 4
0x6D,// 5
0x7D,// 6
0x07,// 7
0x7F,// 8
0x6F,// 9
0x3F+0x80,// 0.
0x06+0x80,// 1.
0x5B+0x80,// 2.
0x4F+0x80,// 3.
0x66+0x80,// 4.
0x6D+0x80,// 5.
0x7D+0x80,// 6.
0x07+0x80,// 7.
0x7F+0x80,// 8.
0x6F+0x80// 9.
};
unsigned int s,t,st,int_part,float_part,temp,SH;
//發(fā)送一字節(jié)數(shù)據(jù)到595
void send_595(unsigned char dat)
{
unsigned char i;
LCK_0;
SDI_1;
SCK_0;
//上面的三條語句為了初始化端口狀態(tài)
for(i=0;i8;i++)
{
LCK_0;//時(shí)鐘線拉低
if(dat0x80)
SDI_1;
else SDI_0;
dat=dat1;
delay_us(100);
LCK_1; //時(shí)鐘線拉高將數(shù)據(jù)讀入595的移位寄存器
delay_us(100);
}
SCK_1; //發(fā)送數(shù)據(jù)到并行端口
SCK_0;
}
void show(void)
{
unsigned char temp_shi,temp_ge,SH_shi,SH_ge,x,y;
unsigned int i;
st=dht();
t=st0x0000ffff;
s=st0xffff0000;
s=s>>16;
//下面為把溫度和濕度換算成十進(jìn)制并且四舍五入
temp=(t>>8);
temp_shi=temp/10;
temp_ge=temp%10;
SH=(s>>8);
SH_shi=SH/10;
SH_ge=SH%10;
int_part=SH_shi*10+SH_ge;
float_part=0;
for(i=0;i50;i++)
{
digitron_show(int_part,float_part);
}
}
void digitron_show(unsigned int int_part,unsigned int float_part)
{
PORTA=0x01;
send_595(table[float_part/10]);
send_595(0x00);
delay_ms(5);
PORTA=0x02;
send_595(table[(int_part%10)+10]);
send_595(0x00);
delay_ms(5);
PORTA=0x04;
send_595(table[int_part/10]);
send_595(0x00);
delay_ms(5);
}
================================================
//這里是MAIN.C
#include
#include
#includedelay.h
#includedht11.h
#includexianshi.h
#pragma interrupt_handler Timer0_COMP:16
#define uchar unsigned char
uchar k=0;
void init(void);
void main()
{
init();//初始化
TCCR0=0X0F;
DDRA=0XFF;
TCCR0=0X0f;//CTC模式
OCR0=145;//10ms
TIMSK=0X02;
SEI();
while(1);
}
//初始化子函數(shù)
void init(void)
{
DDRA=0XFF;
DDRB=0XFF;
}
void Timer0_COMP(void)
{
TCCR0=0X08;
CLI();
k++;
if(k==255)
{
k=0;
show();
}
TCCR0=0X0f;//重置初值
SEI();
}
電磁爐相關(guān)文章:電磁爐原理
上拉電阻相關(guān)文章:上拉電阻原理 土壤濕度傳感器相關(guān)文章:土壤濕度傳感器原理
評(píng)論