- #include <reg51.h>
- #include <stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit P0_0=P0^0;
- uchar code dt[]="abc";
- uchar code at[] = "AT";
- uchar code cmgf[]="AT+CMGF=1";
- uchar code csca[]="AT+CSCA=+8613800595500";
- uchar code cmgs[]="AT+CMGS=15159753072";
- uchar code cnmi[]="AT+CNMI=1,1,2;"; //短信提醒
- uchar code cmgr[]="AT+CMGR=1"; //短消息读取命令
- uchar code cmgd[]="AT+CMGD=1"; //删除短信
- uchar code cn[6]="+CMTI";
- uchar code cm[4]="GSM";
- /*******************TC35变量定义**************/
- uchar i_TC35_RECE=0;
- uchar i_receive, TC35_MAX, flag, flag0,flag1=0;
- xdata uchar TC35_RE[90];
- uchar flag4;
- uchar tltemp; //临时暂存变量
- uchar temp_value,temp1_value; //temp_value温度值正数部分
- xdata uchar TempBuffer[6];
- /************************变量定义************************/
- uint num,T2=0,TMPL,TMPH,tem;
- uchar tab[5]=0,tab1[4],flag3,h,flag2,flag5,count;
- uchar code str[20]={"bi ye she ji"};
- uchar code str2[10]={"wen du"};
- uchar code str3[10]={"nong du:"};
- /************************引脚定义*************************/
- sbit lcdrs=P3^7; //4脚
- sbit lcdrw=P3^6; //5脚
- sbit lcde=P3^5; //6脚
- sbit clk=P3^2;
- sbit dataout=P3^3;
- sbit cs=P3^4;
- sbit DQ=P2^0;
- sbit la_ba=P0^0 ;
- /*********************LCD子函数定义*************************/
- void lcdinit(void); //lcd初始化
- void lcdsendc(uchar c); //发送lcd指令
- void lcdsendd(uchar c); //发送lcd数据
- void lcdbusy(void); //判断忙状态
- void delay1ms(uint time); //延时子程序
- void display(uchar c1,uchar *str);
- void delay1ms(uint time);
- void display_yanwu();
- /*****************采集电压,读取AD转换结果********************/
- unsigned char get_val(void)
- {
- unsigned i;
- unsigned char T;
- cs=1;
- clk=0;
- cs=0;
- for(i=0;i<8;i++)
- {
- clk=1;
- T=T<<1;
- if(dataout==1)
- T=T+1;
- clk=0;}
- cs=1;
- return T;
- }
- /***********************烟雾浓度显示*************************/
- void display_yanwu()
- { uchar shidu_qian,shidu_bai,shidu_shi,shidu_ge;
- T2=get_val();
- num=((float)T2/255)*5000;
- if(num>4000){flag5=1;}
- shidu_qian=0x30+num/1000;
- shidu_bai=0x30+num/100%10;
- shidu_shi=0x30+num/10%10;
- shidu_ge=0x30+num%10;
- tab[0]=shidu_qian; tab[1]=shidu_bai; tab[2]=shidu_shi; tab[3]=shidu_ge;
- display(0x88,tab);
- }
- //--------------lcd初始化程序-------------------
- void lcdinit()
- {
- lcdsendc(0x01); //清屏
- delay1ms(100);
- lcdsendc(0x3c); //8位 2行 5X10字符
- delay1ms(3);
- lcdsendc(0x0e); //开启显示,光标显示,字符闪烁关闭
- lcdsendc(0x02); //光标归位
- delay1ms(2);
- }
- //----------------发送lcd命令---------------------
- void lcdsendc(uchar c)
- {
- P1=c;
- lcdrs=0;
- lcdrw=0;
- lcde=0;
- lcdbusy();
- lcde=1;
- if(c==1)
- delay1ms(2);
- }
- //-----------------发送数据----------------------
- void lcdsendd(uchar c)
- {
- P1=c;
- lcdrs=1;
- lcdrw=0;
- lcde=0;
- lcdbusy();
- lcde=1;
- }
- //------------------判断忙状态--------------------
- void lcdbusy()
- {
- P1=0xff;
- lcdrs=0;
- lcdrw=1;
- lcde=0;
- lcde=0;
- lcde=1;
- //delay1ms(1);
- while((P1&0x80)==1);
- }
- //------------------延时子程序----------------------
- void delay1ms(uint time)
- {
- uint i,j;
- for(i=0;i<time;i++)
- for(j=0;j<100;j++);
- }
- //-----------------显示子程序---------------------------
- void display(uchar c1,uchar *str)
- { uchar a;
- a=c1 ;
- lcdsendc(a);
- while((*str)!= '\0')
- {
- lcdsendd(*str);
- delay1ms(3);
- str++;
- }
- }
- /***************us级延时函数*****************/
- void delay2(unsigned int num)
- {
- while( --num ) ;
- }
- /***************ds18b20模块********************/
- Reset_DS18B20(void) //复位ds1820
- { DQ = 1 ; //DQ复位
- delay2(8) ; //稍做延时
- DQ = 0 ; //单片机将DQ拉低
- delay2(90) ; //精确延时 大于 480us
- DQ = 1 ; //拉高总线
- delay2(8) ;
- flag3 = DQ ; //如果=0则初始化成功 =1则初始化失败
- delay2(50) ;
- DQ = 1 ;
- return(flag3) ; //返回信号,0=presence,1= no presence
- }
复制代码
|