标题:
远程报警单片机程序
[打印本页]
作者:
707548342
时间:
2019-5-17 15:26
标题:
远程报警单片机程序
#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
}
复制代码
作者:
admin
时间:
2019-5-18 03:41
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1