⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temperature.c

📁 一个简易的温度计的程序,在室内测试温度.
💻 C
字号:
#include<AT892051.H> 

extern void _nop_ (void); 
extern unsigned char Buf0[]={0x88,0x88,0x88,0x88}; 
sbit Bell=P3^7; 
sbit no1=P3^5; 
sbit no2=P3^4; 
sbit no3=P3^3; 
sbit no4=P3^2; 
unsigned char DELAY = 250; 

unsigned char Buf[20][2]={ 
{0x00,0x03,}, 
{0x01,0x9f,}, 
{0x02,0x25,}, 
{0x03,0x0d,}, 
{0x04,0x99,}, 
{0x05,0x49,}, 
{0x06,0x41,}, 
{0x07,0x1f,}, 
{0x08,0x01,}, 
{0x09,0x09,}, 
{0x80,0x02,}, 
{0x81,0x9e,}, 
{0x82,0x24,}, 
{0x83,0x0c,}, 
{0x84,0x98,}, 
{0x85,0x48,}, 
{0x86,0x40,}, 
{0x87,0x1e,}, 
{0x88,0x00,}, 
{0x89,0x08 }, 
}; 

void Dsplay(void) 
{ 
        unsigned char i; 

        for(i=0;i<20;i++) 
        { 
                if(Buf0[0] == Buf[i][0]) 
                { 
                        P1=Buf[i][1];         
                } 
        } 
        no1=1;no2=0;no3=0;no4=0; 
        while(DELAY--);while(DELAY--); 
        while(DELAY--);while(DELAY--); 

        for(i=0;i<20;i++) 
        { 
                if(Buf0[1] == Buf[i][0]) 
                { 
                        P1=Buf[i][1];         
                } 
        } 
        no1=0;no2=1;no3=0;no4=0; 
        while(DELAY--);while(DELAY--); 
        while(DELAY--);while(DELAY--); 

        for(i=0;i<20;i++) 
        { 
                if(Buf0[2] == Buf[i][0]) 
                { 
                        P1=Buf[i][1];         
                } 
        } 
        no1=0;no2=0;no3=1;no4=0; 
        while(DELAY--);while(DELAY--); 
        while(DELAY--);while(DELAY--); 

        for(i=0;i<20;i++) 
        { 
                if(Buf0[3] == Buf[i][0]) 
                { 
                        P1=Buf[i][1];         
                } 
        } 
        no1=0;no2=0;no3=0;no4=1; 
        while(DELAY--);while(DELAY--); 
        while(DELAY--);while(DELAY--); 

} 

void UART(void) 
{ 
        TMOD=0x20; 
        TL1=0xfd; 
        TH1=0xfd; 
        SCON=0xd8; 
        PCON=0x00; 
        TR1=1; 
        ES=1; 
        EA=1; 
} 

void Receive(void) interrupt 4                                                                                            
{ 
    Buf0[0]=SBUF; 
        RI = 0; 

        while(RI==0); 
    Buf0[1]=SBUF; 
        RI = 0; 

        while(RI==0); 
    Buf0[2]=SBUF; 
        RI = 0; 

        while(RI==0); 
    Buf0[3]=SBUF; 
        RI = 0; 

} 

main() 
{ 
        UART(); 
        while(1) 
        { 
                Dsplay(); 
        } 
} 



1:2051-2 
  
/**************************Minsys.c************************/ 

#include<AT892051.H> 
#include<ds18b20_2.h> 

extern unsigned char DELAY=100,HOUR=0,MIN=0,SEC=0,ENABLE=0xff,DELETE=0; 

unsigned char ADDR_1,ADDR_2,ADDR_3,ADDR_4,nun1=0,nun2=0,nun3=0,nun4=0; 

sbit Bell=P1^7; 
sbit KEY1=P3^5; 
sbit KEY2=P3^4; 
sbit KEY3=P3^3; 
sbit KEY4=P3^2; 
bit OK=0; 

unsigned char jishi(void); 
void disp_H_M(void); 
void disp_M_S(void); 
void putchar(unsigned char a); 

void UART(void) 
{ 
        TMOD=0x20; 
        TL1=0xfd; 
        TH1=0xfd; 
        SCON=0xd8; 
        PCON=0x00; 
        TR1=1; 
}  

void Init(void) 
{ 
        IE|=0x81; 
        IT0=1; 
} 

void KEY_4(void) interrupt 0  
{ 
        unsigned char i; 
        EA = 0; 

        while(DELAY--); 

        ADDR_1=0;ADDR_2=0;ADDR_3=0;ADDR_4=1; 
        nun1=0,nun2=0,nun3=0,nun4=0; 
        putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80); 

        while(KEY4 == 0) 
        { 
                if(KEY1 == 0) 
                { 

                        for(i=0;i<200;i++) 
                        { 
                                while(DELAY--);while(DELAY--); 
                        } 

                        if(ADDR_1==1) 
                        { 
                                ADDR_1 = 0; 
                                ADDR_4 = 1; 
                                    putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80); 
                        } 
                        if(ADDR_2==1) 
                        { 
                                ADDR_2 = 0; 
                                ADDR_1 = 1; 
                                    putchar(nun1|0x80);putchar(nun2);putchar(nun3);putchar(nun4); 
                        } 
                        if(ADDR_3==1) 
                        { 
                                ADDR_3 = 0; 
                                ADDR_2 = 1; 
                                    putchar(nun1);putchar(nun2|0x80);putchar(nun3);putchar(nun4); 
                        } 
                        if(ADDR_4==1) 
                        { 
                                ADDR_4 = 0; 
                                ADDR_3 = 1; 
                                    putchar(nun1);putchar(nun2);putchar(nun3|0x80);putchar(nun4); 
                        } 
                } 

                if(KEY2 == 0) 
                { 

                        for(i=0;i<200;i++) 
                        { 
                                while(DELAY--);while(DELAY--); 
                        } 

                        if(ADDR_1==1) 
                        { 
                                nun1++; 
                                if(nun1<10) 
                                { 
                                         
                                            putchar(nun1|0x80);putchar(nun2);putchar(nun3);putchar(nun4); 
                                } 
                                else 
                                { 
                                        nun1 = 0; 
                                        putchar(nun1|0x80);putchar(nun2);putchar(nun3);putchar(nun4); 
                                } 
                        } 

                        if(ADDR_2==1) 
                        { 
                                nun2++; 
                                if(nun2<10) 
                                { 
                                            putchar(nun1);putchar(nun2|0x80);putchar(nun3);putchar(nun4); 
                                } 
                                else 
                                { 
                                        nun2 = 0; 
                                        putchar(nun1);putchar(nun2|0x80);putchar(nun3);putchar(nun4); 
                                } 
                        } 

                        if(ADDR_3==1) 
                        { 
                                nun3++; 
                                if(nun3<6) 
                                { 
                                            putchar(nun1);putchar(nun2);putchar(nun3|0x80);putchar(nun4); 
                                } 
                                else 
                                { 
                                        nun3 = 0; 
                                        putchar(nun1);putchar(nun2);putchar(nun3|0x80);putchar(nun4); 
                                } 
                        } 

                        if(ADDR_4==1) 
                        { 
                                nun4++; 
                                if(nun4<10) 
                                { 
                                            putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80); 
                                } 
                                else 
                                { 
                                        nun4 = 0; 
                                        putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80); 
                                } 
                        } 


                } 

                if(KEY3 == 0) 
                { 
                        while(DELAY--); 
                        HOUR = nun1*10+nun2; 
                        MIN = nun3*10+nun4; 
                        SEC = 0; 
                        OK = 1; 
                        DELETE=1; 

                        for(i=0;i<200;i++) 
                        { 
                                while(DELAY--);while(DELAY--); 
                        } 
                } 
        } 
        EA = 1; 
} 

unsigned char jishi(void) 
{ 
        if(SEC !=0x00) 
        { 
                SEC --; 
                DELETE = 0x00; 
                return 0xff; 
        } 
        else 
        { 
                if(MIN !=0) 
                { 
                        MIN --; 
                } 
                else 
                { 
                        if(HOUR !=0) 
                        { 
                                HOUR --; 
                        } 
                        else 
                        { 
                                return 0x00; 
                        } 
                        MIN =59; 
                } 
                SEC = 59; 
        } 
} 

void disp_H_M(void) 
{ 
        unsigned char tempHH,tempHL,tempMH,tempML; 
        tempHH = HOUR/10; 
        tempHL = HOUR%10; 
        tempMH = MIN/10; 
        tempML = MIN%10; 
        putchar(tempHH); 
        putchar(tempHL); 
        putchar(tempMH); 
        putchar(tempML); 
} 

void disp_M_S(void) 
{ 
        unsigned char tempMH,tempML,tempSH,tempSL; 
        tempMH = MIN/10; 
        tempML = MIN%10; 
        tempSH = SEC/10; 
        tempSL = SEC%10; 
        putchar(tempMH); 
        putchar(tempML); 
        putchar(tempSH); 
        putchar(tempSL); 
}  

void putchar(unsigned char a) 
{ 
        TI=0; 
        SBUF=a; 
        while(!TI); 
        TI=0; 
} 

main() 
{ 
        unsigned char i,temper; 
        UART(); 
        Init(); 
        Bell = 0; 
        DELETE = 1; 
        while(1) 
        { 
                for(i=0;i<241;i++) 
                { 
                        while(DELAY--);while(DELAY--);while(DELAY--);while(DELAY--);while(DELAY--); 
                } 

                ENABLE = jishi(); 

                if(HOUR != 0) 
                { 
                        disp_H_M();         
                } 
                else 
                { 
                        disp_M_S();         
                } 


                temper = ReadTemperature(); 


                if(((ENABLE == 0x00)&&(DELETE == 0x00))||((temper>50)||(temper<5))) 
                { 
                        Bell = 1;         
                } 
                else 
                { 
                         Bell = 0;         
                } 
        } 
} 



/**************************Ds18b20_2.h*********************/ 

sbit DQ =P3^7;   //定义通信端口 

//延时函数 
void delay(unsigned int i) 
{ 
     while(i--); 
} 

//初始化函数 
void Init_DS18B20(void) 
{ 
        unsigned char x=0; 
        DQ = 1;    //DQ复位 
        delay(8);  //稍做延时 
        DQ = 0;    //单片机将DQ拉低 
        delay(80); //精确延时 大于 480us 
        DQ = 1;    //拉高总线 
        delay(14); 
        x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 
        delay(20); 
} 

//读一个字节 
unsigned char ReadOneChar(void) 
{ 
        unsigned char i=0; 
        unsigned char dat = 0; 
        for (i=8;i>0;i--)   //读八位,一个字节的数据
        { 
                DQ = 0; // 给脉冲信号 ,通信端口,上升沿有效
                dat>>=1; 
                DQ = 1; // 给脉冲信号 
                if(DQ) 
                dat|=0x80; 
                delay(4); 
        } 
        return(dat); 
} 

//写一个字节 
void WriteOneChar(unsigned char dat) 
{ 
        unsigned char i=0; 
        for (i=8; i>0; i--) 
        { 
                DQ = 0; 
                DQ = dat&0x01; 
                delay(5); 
                DQ = 1; 
                dat>>=1; 
        } 
        delay(4); 
} 

//读取温度 
unsigned char ReadTemperature(void) 
{ 
        unsigned char a=0; 
        unsigned char b=0; 
        unsigned char t=0; 
        Init_DS18B20(); 
        WriteOneChar(0xCC);  
        WriteOneChar(0x44);  
        Init_DS18B20(); 
        WriteOneChar(0xCC);  
        WriteOneChar(0xBE);  
        a=ReadOneChar();    
        b=ReadOneChar();    
        a=a>>4;            
        t=b<<4;             
        t=t|a;              
        return(t); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -