附录 B 源程序
#include
= P2^0;
sbit lcdrs = P2^1; sbit dula = P2^6; sbit wela = P2^7; sbit DS=P2^2; sbit FM=P2^3;
uint temp; uchar flag1; uchar sum,led1,led2;
uchar code table3[]=\ uchar num;,a
uchar code table3[]=\ uchar Byte_num[]=\ uchar code Sms2_Pdu[]=\ sbit key=P3^7; sbit led=P1^1; sbit ST=P2^4; sbit ATE=P2^5; sbit EOC=P2^6; sbit EN=P2^7; sbit FM=P3^5; void delay(uint ms) {
uchar i; while(ms--) for(i=0;i<120;i++); }
void Print_Char(uchar ch) {
SBUF=ch; while(TI==0); TI=0; }
36
void Print_Str(uchar *str) {
while(*str!='\\0') {
Print_Char(*str++); } }
void Ini_UART(void) {
TMOD = 0x20; TH1 = 0xFD; TL1 = 0xFD; SCON = 0x50; REN=1; PCON = 0x00; TF1 = 1; TR1 = 1; ES=1; ET0=1; EA=1; }
void GSM_PDU() {
Print_Str(GMS); Print_Str(\ delay(1000);
Print_Str(SMS_PDU); Print_Str(\ ES=1; delay(1000); delay(1000); delay(1000); delay(1000); }
void GSM_PDU_SMS() {
Print_Str(SMS_send); Print_Str(Byte_num);
Print_Str(\ delay(900);
Print_Str(Sms2_Pdu); delay(500);
37
Print_Char(0x1A); ES=1; delay(5000); delay(5000); } void delay1(uint a ) { uint z,y; for(z=1;z>0;z--)
for(y=110;y>0;y--);
}
void delay(uint count) {
uint i; while(count) { i=200; while(i>0) i--; count--; } }
void write_com(uchar com)
{ lcdrs=0; P0=com;
delay1(5); lcden=1; delay1(5); lcden=0;
}
void write_data(uchar date)
{ lcdrs=1;
`
P0=date;
delay1(5); lcden=1;
delay1(5); lcden=0;
}
void dsreset(void) {
uint i;
// 初始化液 晶,写命令
// 初始化液 晶,写数据
// 50ns // send reset and initialization command 38
DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; }
bit tmpreadbit(void) // read a bit { uint i; bit dat;
DS=0;i++; DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); }
uchar tmpread(void) {
uchar i,j,dat; dat=0;
for(i=1;i<=8;i++) {
j=tmpreadbit();
dat=(j<<7)|(dat>>1); }
return(dat); }
void tmpwritebyte(uchar dat) { uint i; uchar j; bit testb; for(j=1;j<=8;j++) {
testb=dat&0x01; dat=dat>>1; if(testb)
{ DS=0; i++;i++;
// i++ for delay
// read a byte date
// 读出的数据最低位在最前面,这样刚好一个字节在DAT里
// write a byte to ds18b20
// write 1 39
DS=1;
i=8;while(i>0)i--; } else {
DS=0; // write 0 i=8;while(i>0)i--; DS=1; i++;i++; } } }
void tmpchange(void) //DS18B20 begin change {
dsreset(); delay(1);
tmpwritebyte(0xcc); // address all drivers on bus
tmpwritebyte(0x44); // initiates a single temperature conversion }
uint tmp() // get the temperature { float tt; uchar a,b; dsreset(); delay(1);
tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b;
temp<<=8; temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp; }
void deal() {
uchar temp1,flag1=0; if((temp1=tmp())>25.5)
40