新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > 基于ATmega128的DHT11溫濕度傳感器的使用

        基于ATmega128的DHT11溫濕度傳感器的使用

        作者: 時間:2012-08-14 來源:網絡 收藏

        #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 ___H

        #includedht11.h

        #endif

        //數碼管顯示數組定義

        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;

        //發送一字節數據到595

        void send_595(unsigned char dat)

        {

        unsigned char i;

        LCK_0;

        SDI_1;

        SCK_0;

        //上面的三條語句為了初始化端口狀態

        for(i=0;i8;i++)

        {

        LCK_0;//時鐘線拉低

        if(dat0x80)

        SDI_1;

        else SDI_0;

        dat=dat1;

        delay_us(100);

        LCK_1; //時鐘線拉高將數據讀入595的移位寄存器

        delay_us(100);

        }

        SCK_1; //發送數據到并行端口

        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;

        //下面為把溫度和濕度換算成十進制并且四舍五入

        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);

        }

        //初始化子函數

        void init(void)

        {

        DDRA=0XFF;

        DDRB=0XFF;

        }

        void Timer0_COMP(void)

        {

        TCCR0=0X08;

        CLI();

        k++;

        if(k==255)

        {

        k=0;

        show();

        }

        TCCR0=0X0f;//重置初值

        SEI();

        }

        電磁爐相關文章:電磁爐原理


        上拉電阻相關文章:上拉電阻原理
        土壤濕度傳感器相關文章:土壤濕度傳感器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 东港市| 固安县| 鹤庆县| 诸暨市| 同江市| 盐边县| 闻喜县| 渑池县| 成安县| 诸暨市| 吉水县| 吴旗县| 东丽区| 朝阳区| 怀安县| 桦川县| 塔河县| 阿图什市| 临西县| 视频| 克拉玛依市| 临颍县| 天镇县| 巴塘县| 九龙坡区| 瑞安市| 周至县| 涡阳县| 和田县| 沅陵县| 体育| 福鼎市| 涪陵区| 沿河| 烟台市| 宣恩县| 岳池县| 墨脱县| 林芝县| 绿春县| 武山县|