各位看看这个程序什么问题?怎么进行不到LED1=1;LED2=1;?
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#include<string.h>
#include<stdio.h>
#include <intrins.h>
#define Buf_Max 90 //缓存长度200
#define Delay_Time 3000; //延时长度3000
sbit KEY1=P0^0;
sbit LED1=P2^0;
sbit LED2=P2^1;
char code num[]="18330382022"; //定义要拨打的电话号码,拨打其它电话在这时修改
void Serial_Init(void); //声明串口初始化函数
void Delay_ms(unsigned int time);//声明延时函数
void GSM_Call(unsigned char *num);
unsigned char i=0;//定义缓存指针
unsigned char Rec_Buf[Buf_Max];//定义缓存数组
void CLR_Buf(void) //声明清除缓存内容
{
unsigned char k;
for(k=0;k<Buf_Max;k++) //将缓存内容清零
{
Rec_Buf[k] = 0;
}
i = 0; //接收字符串的起始存储位置
}
bit Hand(unsigned char *a)//判断缓存中是否有制定字符串函数
{
if(strstr(Rec_Buf,a)!=NULL)
return 1;
else
return 0;
}
void Send_ASCII(unsigned char *b)
{
ES = 0; //关串口中断
for (b; *b!='\0';b++)
{
SBUF = *b;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
ES = 1; //开串口中断
}
void Send_Hex(unsigned char c)
{
ES = 0; //关串口中断
SBUF = c;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
ES = 1; //开串口中断
}
void main(void)
{
LED1=0;
LED2=1;
Serial_Init();
TI=1;
CLR_Buf();
while(!Hand("OK"))
{ Send_ASCII("AT"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
Delay_ms(60000); //延时
}
LED1=1;
LED2=1;
while(1)
{
if(KEY1==0)
{
Delay_ms(20);
if(KEY1==0)
{
GSM_Call(num);
}
}
}
}
void Serial_Init(void)//串口初始化函数
{
SCON = 0x50;//串口:方式1,允许发送和接收
TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率
TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600
TL1 = 0xFD;
TR1 = 1; //开启定时器1
//ES = 1; //开启串口中断
//EA = 1; //开启全局中断
}
void Serial_Int() interrupt 4
{
ES=0; //关串口中断,防止中断嵌套
if(TI) //如果是发送中断,则不做任何处理
{
TI = 0; //清除发送中断标志位
}
if(RI) //如果是接送中断,则进行处理
{
RI = 0; //清除接收中断标志位
}
ES = 1; //开启串口中断
}
void Delay_ms(unsigned int time) //延时函数
{
int i=250;
for(time;time>0;time--)
{
for(i;i>0;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void GSM_Call(unsigned char *num)//打电话函数
{
printf("ATD");
printf("%s;\n",num);
Delay_ms(100);
}
#include<string.h>
#include<stdio.h>
#include <intrins.h>
#define Buf_Max 90 //缓存长度200
#define Delay_Time 3000; //延时长度3000
sbit KEY1=P0^0;
sbit LED1=P2^0;
sbit LED2=P2^1;
char code num[]="18330382022"; //定义要拨打的电话号码,拨打其它电话在这时修改
void Serial_Init(void); //声明串口初始化函数
void Delay_ms(unsigned int time);//声明延时函数
void GSM_Call(unsigned char *num);
unsigned char i=0;//定义缓存指针
unsigned char Rec_Buf[Buf_Max];//定义缓存数组
void CLR_Buf(void) //声明清除缓存内容
{
unsigned char k;
for(k=0;k<Buf_Max;k++) //将缓存内容清零
{
Rec_Buf[k] = 0;
}
i = 0; //接收字符串的起始存储位置
}
bit Hand(unsigned char *a)//判断缓存中是否有制定字符串函数
{
if(strstr(Rec_Buf,a)!=NULL)
return 1;
else
return 0;
}
void Send_ASCII(unsigned char *b)
{
ES = 0; //关串口中断
for (b; *b!='\0';b++)
{
SBUF = *b;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
ES = 1; //开串口中断
}
void Send_Hex(unsigned char c)
{
ES = 0; //关串口中断
SBUF = c;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
ES = 1; //开串口中断
}
void main(void)
{
LED1=0;
LED2=1;
Serial_Init();
TI=1;
CLR_Buf();
while(!Hand("OK"))
{ Send_ASCII("AT"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
Delay_ms(60000); //延时
}
LED1=1;
LED2=1;
while(1)
{
if(KEY1==0)
{
Delay_ms(20);
if(KEY1==0)
{
GSM_Call(num);
}
}
}
}
void Serial_Init(void)//串口初始化函数
{
SCON = 0x50;//串口:方式1,允许发送和接收
TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率
TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600
TL1 = 0xFD;
TR1 = 1; //开启定时器1
//ES = 1; //开启串口中断
//EA = 1; //开启全局中断
}
void Serial_Int() interrupt 4
{
ES=0; //关串口中断,防止中断嵌套
if(TI) //如果是发送中断,则不做任何处理
{
TI = 0; //清除发送中断标志位
}
if(RI) //如果是接送中断,则进行处理
{
RI = 0; //清除接收中断标志位
}
ES = 1; //开启串口中断
}
void Delay_ms(unsigned int time) //延时函数
{
int i=250;
for(time;time>0;time--)
{
for(i;i>0;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void GSM_Call(unsigned char *num)//打电话函数
{
printf("ATD");
printf("%s;\n",num);
Delay_ms(100);
}
这是tc35基于51单片机的程序,实现握手之后的LED等出现效果,下一步进行等待按键按下拨号。