#include #define uchar unsigned char #define uint unsigned int sbit DQ=P1^4; sbit bell=P0^6; uchar code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code led_t[]={25,30}; uchar led_quan[],led_n=0,t_n=0; bit mim; bit flag; void delay1(uint t) { while(t--); } void delay(uchar del) { uchar x,y; for(x=0;x for(y=0;y<=148;y++); } } //DS18B20初始化函数 bit init_ds18b20(void) { bit initflag = 0; DQ = 1; delay1(12); DQ = 0; delay1(80); // 延时大于480us DQ = 1; delay1(10); // 14 initflag = DQ; // initflag等于1初始化失败 delay1(5); return initflag; } //通过单总线向从器件写一个字节 void wr_ds18b20(unsigned char byt) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; DQ = byt&0x01; delay1(5); DQ = 1; byt >>= 1; } delay1(5); } //通过单总线从从器件读一个字节 unsigned char rd_ds18b20(void) { unsigned char i; unsigned char byt; for(i=0;i<8;i++) { DQ = 0; byt >>= 1; DQ = 1; if(DQ) { byt |= 0x80; } delay1(5); } return byt; } //温度转换、读取及数据处理器函数 unsigned char rd_temperature(void) { unsigned char low,high; char temp; init_ds18b20(); wr_ds18b20(0xCC); wr_ds18b20(0x44); //启动温度转换 delay1(200); init_ds18b20(); wr_ds18b20(0xCC); wr_ds18b20(0xBE); //读取寄存器 low = rd_ds18b20(); //低字节 high = rd_ds18b20(); //高字节 temp = high<<4; temp |= (low>>4); return temp; } void dingwen() { if(rd_temperature()>=30) { bell=1; P2|=0xa0; P2&=0x5f; } if(rd_temperature()<=25) { bell=1; P2|=0xa0; P2&=0x5f; } } void tine0() { TMOD=0X01; TH0 = 0xDC; // 定时10ms TL0 = 0x00; EA=1; ET0=1; TR0=1; } void time1_isr() interrupt 1 { TH0 = 0xDC; // 定时10ms TL0 = 0x00; t_n++; if (t_n == 100) // 1s { t_n = 0; flag=~flag; } } void led_shuju() { led_quan[0]=table[rd_temperature()%10]; led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10]; led_quan[3]=table[led_t[1]/10]; led_quan[4]=0xbf; led_quan[5]=table[led_t[0]%10]; led_quan[6]=table[led_t[0]/10]; } void flash1(mim) { switch(mim) {case 0: led_quan[0]=table[rd_temperature()%10]; led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10]; led_quan[3]=table[led_t[1]/10]; led_quan[4]=0xbf; led_quan[5]=table[led_t[0]%10]; led_quan[6]=table[led_t[0]/10]; case 1: led_quan[0]=table[rd_temperature()%10]; led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=0xff; led_quan[3]=0xff; led_quan[4]=0xbf; led_quan[5]=table[led_t[0]%10]; led_quan[6]=table[led_t[0]/10]; } } void flash2(mim) { switch(mim) {case 0: led_quan[0]=table[rd_temperature()%10]; led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10]; led_quan[3]=table[led_t[1]/10]; led_quan[4]= 0xbf; led_quan[5]= 0xff; led_quan[6]= 0xbf; case 1: led_quan[0]=table[rd_temperature()%10]; led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10]; led_quan[3]=table[led_t[1]/10]; led_quan[4]=0xff; led_quan[5]=table[led_t[0]%10]; led_quan[6]=table[led_t[0]/10]; } } void display( uchar *del) { switch(led_n) { case 0: P0=del[0]; P2=0xe0; P2&=0x1f; P0=0x80; P2=0xc0; P2&=0x3f; delay(3); break; case 1: P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; case 2: P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; case 3: P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; case 4: P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; case 5: P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; case 6: P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; } if(led_n==7) led_n=0; else led_n++; } void main() { init_ds18b20(); while(1) { display(); dingwen(); } } 因篇幅问题不能全部显示,请点此查看更多更全内容{
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务