?? tc35i.c
字號:
#include<reg52.h>
#include<string.h>
#include<intrins.h>
//**************************************************************************
#define uchar unsigned char
#define uint unsigned int
#define uchar unsigned char
#define uint unsigned int
uchar xdata getdata;
int xdata time;
sbit ST=P2^7;
sbit EOC=P2^3;
sbit OE=P2^2;
sbit P2_0=P2^0;
sbit E_CLK = P2^4; //clock input同步時鐘輸入端
sbit RW_SID = P2^5; // data input/output串行數據輸入、輸出端//
sbit RS_CS = P2^6 ; // chip select
//-------------------------------------
unsigned int tempL=0;
unsigned int tempH=0;
float temperature,tempdate;
sbit DQ = P1^0; //溫度傳感器
//-----------------------------------------
sbit EquipOne = P1^1; // 設備1
sbit EquipTwo = P1^2; // 設備2
sbit EquipThree = P1^3;// 設備3
sbit RedwornOne = P3^4;// 后門報警
sbit RedwornTwo = P3^4; //
sbit Bell = P1^6;//
sbit TC35iOpen = P1^7;// TC35i 點火
sbit P3_6 = P3^6;
sbit P3_7 = P3^7;
uchar xdata mgsOK[]="OK!";//
uchar xdata Homeworn[]="Home Gate Worning!";//
uchar xdata Meiqiworn[]="Coal Gas Worning!";//
char Tem[4];
char xdata Volt[4];
uchar xdata Telnum[12];
uchar xdata redata[40];
uchar xdata delchar,i;
uchar xdata zone,num2,datesbuf,k;// ,flagOK
bit havemess;
//bit flag;
//**************************************************************************
//延遲函數
void delayms(unsigned int time) //delay1
{
unsigned int n;
n=0;
while(n<time)
{n++;}
return;
}
void delays(uchar n) // void Delay11(uchar n)
{
uchar i=204;
while(n--)
{
while(i--);
}
}
void longdelay( unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<127;j++);
}
void delay(unsigned int n)
{
unsigned int i;
for(i=0; i<n; i++) {;}
}
/*********************************************************************/
//串行發送一字節數據
void SendByte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
E_CLK=0;
if(dat&0x80)RW_SID=1;else RW_SID=0;
E_CLK=1;
dat=dat<<1;
}
}
//串行接收一字節數據
unsigned char ReceieveByte(void)
{
unsigned char i,d1,d2;
for(i=0;i<8;i++)
{
E_CLK=0;delay(100);
E_CLK=1;
if(RW_SID)d1++;
d1=d1<<1;
}
for(i=0;i<8;i++)
{
E_CLK=0;delay(100);
E_CLK=1;
if(RW_SID)d2++;
d2=d2<<1;
}
return (d1&0xF0+d2&0x0F);
}
//讀取標志位BF
bit ReadBF(bit bf)
{
unsigned char dat;
SendByte(0xFA);//11111,01,0 RW=1,RS=0
dat=ReceieveByte();
if(dat>0x7F)bf=1;else bf=0;
return bf;
}
//寫控制命令
void SendCMD(unsigned char dat)
{
SendByte(0xF8);//11111,00,0 RW=0,RS=0 同步標志
SendByte(dat&0xF0);//高四位
SendByte((dat&0x0F)<<4);//低四位
}
//寫顯示數據或單字節字符
void SendDat(unsigned char dat)
{
// while(ReadBF){;}
// RS_CS=1;
SendByte(0xFA);//11111,01,0 RW=0,RS=1
SendByte(dat&0xF0);//高四位
SendByte((dat&0x0F)<<4);//低四位
// RS_CS=0;
}
// 寫漢字到LCD 指定的位置 x_add顯示RAM的地址 dat1/dat2顯示漢字編碼
void display(unsigned char x_add,unsigned char dat1,unsigned char dat2){
SendCMD(x_add);//1xxx,xxxx 設定DDRAM 7位地址xxx,xxxx到地址計數器AC
SendDat(dat1);
SendDat(dat2);
}
//初始化 LCM
void initlcm(void)
{
SendCMD(0x30);//功能設置,一次送8位數據,基本指令集
SendCMD(0x0C);//0000,1100 整體顯示,游標off,游標位置off
SendCMD(0x01);//0000,0001 清DDRAM
SendCMD(0x02);//0000,0010 DDRAM地址歸位
SendCMD(0x80);//1000,0000 設定DDRAM 7位地址000,0000到地址計數器AC// SendCMD(0x04);//點設定,顯示字符/光標從左到右移位,DDRAM地址加 一// SendCMD(0x0F);//顯示設定,開顯示,顯示光標,當前顯示位反白閃動
}
///---------------溫度傳感器驅動-------------------------////
Init_DS18B20(void)//ds1820 初始化子程序
{
float x=0;
DQ=1;
delayms(8);
DQ=0;
delayms(85);
DQ=1;
delayms(14);
x=DQ;
delayms(20);
}
//向DS18B20讀一字節數據
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for(i=8;i>0;i--)
{
DQ=1;
delayms(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delayms(4);
}
return(dat);
}
//向DS18B20寫一字節數據
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delayms(5);
DQ=1;
dat>>=1;
}
delayms(4);
}
//向DS18B20讀溫度值
float ReadTemperature(void)
{
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delayms(125);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();
temperature=((tempH*256)+tempL)*0.0625;
delayms(200);
return(temperature);
}
//=======================================================================================
////////////////////////////////////////////////////////////////
void sendATC(void) // 發送AT+C,應答
{
SBUF=65; //將ASCII碼A發送到串口去
longdelay(20);
SBUF=84; // 將ASCII碼T發送到串口去
longdelay(20);
SBUF=43; //;發送"+"
longdelay(20);
SBUF=67; //;發送C
longdelay(20);
}
// 從SIM卡中讀取一條短消息
// AT指令:AT+CMGR=1<CR>
void read_msg(unsigned char imsg)
{
for(k=0;k<40;k++)
{
redata[k]=0;
}
SBUF='A'; longdelay(20);
SBUF='T'; longdelay(20);
SBUF='+'; longdelay(20);
SBUF='C'; longdelay(20);
SBUF='M'; longdelay(20);
SBUF='G'; longdelay(20);
SBUF='R'; longdelay(20);
SBUF='='; longdelay(20);
SBUF=imsg; longdelay(20);
SBUF = 0x0d; longdelay(20);
SBUF = 0x0a; longdelay(20);
}
void sendCNMI(void) //發送(AT+CNMI=1,1,0,0,1),短信到達TE; //( 設置短消息到達自動提示) ///
{ //// New SMS message storage(顯示新收到的短消息)
sendATC();
SBUF=78; //發送N
longdelay(20);
SBUF=77; //發送M
longdelay(20);
SBUF=73; //發送I
longdelay(20);
SBUF=61; //發送"="
longdelay(20);
SBUF=49; //發送1
longdelay(20);
SBUF=44; //發送","
longdelay(20);
SBUF=49; //發送1
longdelay(20);
SBUF=44; //發送","
longdelay(20);
SBUF=48; //發送0
longdelay(20);
SBUF=44; //發送","
longdelay(20);
SBUF=48; //發送0
longdelay(20);
SBUF=44; //發送","
longdelay(20);
SBUF=49; //發送1
longdelay(20);
SBUF=13; //;發送"回車"指令!
longdelay(20);
SBUF=10; //;發送"換行符"指令!
longdelay(20);
}
//發送一個ASCII
void SendASC(uchar ASC)
{
bit es;
es=ES;//
ES=0;//關閉串行中斷
TI=0;
SBUF=ASC;
while(!TI);
TI=0;
ES=es;
}
/****************************************************************************/
//發送AT命令到TC35I
void SendCmdToTc35i(uchar *p)
{
uchar len;
len=strlen(p); /*strlen 的計算是以 '\0' 作為結束判斷標志,strlen 從 str[0] 開始搜索,
當恰好遇到 '\0' 結束。 */
//strlen( )函數是測試字符串長度的函數.函數的值為字符串中的實際長度,不包括'\0'在內
while(len--)
{
SendASC(*p++);
}
}
//刪除sim卡內全部短信息
void EraseMsgAll()
{
SendCmdToTc35i("AT+CMGD=1");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=2");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=3");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=4");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=5");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=6");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=7");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=8");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=9");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=10");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=11");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=12");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=13");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=14");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=15");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=16");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=17");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=18");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=19");
SendASC(0x0d); SendASC(0x0a); delays(50);
SendCmdToTc35i("AT+CMGD=20");
SendASC(0x0d); SendASC(0x0a); delays(50);
ES=1;
}
// 從SIM卡中刪除一條短消息
// AT指令:AT+CMGD=1<CR>
void delete_msg(unsigned char imsg) // delete read msg from sim kard
{
SBUF='A';longdelay(20);
SBUF='T';longdelay(20);
SBUF='+';longdelay(20);
SBUF='C';longdelay(20);
SBUF='M';longdelay(20);
SBUF='G';longdelay(20);
SBUF='D';longdelay(20);
SBUF='=';longdelay(20);
SBUF=imsg;longdelay(20);
SBUF = 0x0d;longdelay(20);
SBUF = 0x0a; longdelay(20);
}
/*/發送短消息
void SendTextT_SMS(uchar *t,uchar *h)
{
uchar tmp=0;
ES=0;
SendCmdToTc35i("AT+CMGF=1\r");
SBUF = 0x0d; longdelay(20);
SBUF = 0x0a; longdelay(20);
SendCmdToTc35i("AT+CSCA=+8613800769500"); //信息中心號碼
SBUF = 0x0d; longdelay(20);
SBUF = 0x0a; longdelay(20);
SendCmdToTc35i("AT+CMGS=");//("AT+CMGS=\r");13728247589
SendCmdToTc35i(t);//("AT+CMGS=\r");13728247589
SBUF = 0x0d; longdelay(20);
SBUF = 0x0a; longdelay(20);
TH0=0x4C;
TL0=0;
time=0;
TR0=1;
while(1)
{
tmp=SBUF;
RI=0;
if(tmp==0x3e||tmp==0x41) //">||A";"||"邏輯或,當tmp==0x3e和tmp==0x41都為假時,表達式為假,否則為真。
//">" 表示可以接收數據
{
break;
}
if(time>100)
{
time=0;
TR0=0;
break;
}
}
SendCmdToTc35i(h);// //發送內容
SendASC(0X1A); //發送結束標志,一定要十六進制大寫,不是ASIC碼
ES=1;
} */
//發送短消息
void SendText_SMS(uchar *h)
{
uchar tmp=0;
ES=0;
SendCmdToTc35i("AT+CMGF=1\r");
SBUF = 0x0d; longdelay(20);
SBUF = 0x0a; longdelay(20);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -