📄 led.c
字号:
/***********************************
*MCU:AT89S51
*Freq:12M
.edit Tab:4
driver:ht1621
**********************************/
//=============================================================
//OCMJ8X15D触摸屏中断程序
//当触摸事件发生时模块产生中断经INT脚输出信号触发MCU的外部中断0
//=============================================================
//=============================================
//=============================================
#include <reg52.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#include <absacc.h>
//#include "malloc.h"
#define uchar unsigned char
#define uint unsigned int
//=============================================
/**************************************************************************************************\
* 短信控制处理: *
* 1、初始化串口(不会写) *
* 2、初始化GSM模块,主要是为了设定消息接受模式,一般英文TEXT足够,PDU用于中文编码 *
* 3、读取消息,通过指令“AT+CMGR=1”读取SIM卡位置为1的消息 *
* 4、串口收发不是很懂,随便写了一下,好像要用到定时器和中断的start_timer0();close_timer0();都没有写*
\**************************************************************************************************/
unsigned char code Command_At[4] = "AT\r\0";
unsigned char code Command_Cmgf[11] = "AT+CMGF=1\r\0";
unsigned char code Command_Cmgd[11] = "AT+CMGD=1\r\0";
unsigned char code Command_Cmgr[11] = "AT+CMGR=1\r\0";
void delay1 (int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<123;j++);
}
//=================================
//=============================================
uchar *pTBuf;
uchar *SaveRBuf;
uchar RBuf[15];
uchar *pRBuf=RBuf;
uchar R_index=0;
uchar command;
bit com_data=0;
uchar remote_status=0;
void UartInit(unsigned int BandRate)
{
TMOD&=0X0F;
TMOD|=0x20; /*定时器1作为波特率发生器,工作于方式2,自动8位装载*/
SCON=0x50; /*工作方式 1*/
PCON|=0x80; /*波特率加倍*/
TH1=255-57600/BandRate+1;; /*按波特率计算初值 TH1=256-F*(SMOD+1)/(384*Band)=256-57600/Band*/
TL1=TH1;
TR1=1;
EA=1;
ES=1;
}
uchar func(uchar i)
{
if((SaveRBuf-RBuf-i)<0) SaveRBuf=SaveRBuf+15;
if((SaveRBuf-RBuf-i)>=15) SaveRBuf=SaveRBuf-15;
return *(SaveRBuf-i);
}
//uchar *tab
void send_command(uchar code *com)
{
int i=0;
com_data=0;
while(1)
{
pTBuf=com;
SBUF='1';
delay1(500);
// for(i=0;i++;i<9)
// show_num(RBuf[i],i);
// if(command==2)
if((func(3)=='O')&&(func(2)=='K'))break;
}
SaveRBuf=RBuf;
pRBuf=RBuf;
command=0;
}
void read_SMS ()
{
com_data=1;
while(1)
{
pTBuf=Command_Cmgr;
SBUF='1';
delay1(500);
// if((SaveRBuf-RBuf)<2)
if((func(3)=='O')&&(func(2)=='N')) {remote_status=1;break;}
if((func(4)=='O')&&(func(3)=='F')&&(func(2)=='F')) {remote_status=2;break;}
if((func(3)=='T')&&(func(2)=='+')) {remote_status=3;break;}
if((func(3)=='T')&&(func(2)=='-')) {remote_status=4;break;}
if((func(3)=='H')&&(func(2)=='+')) {remote_status=5;break;}
if((func(3)=='H')&&(func(2)=='-')) {remote_status=6;break;}
if((func(5)=='A')&&(func(4)=='U')&&(func(3)=='T')&&(func(2)=='O')) {remote_status=7;break;}
SaveRBuf=RBuf;
pRBuf=RBuf;
command=0;
// else return 0;
}
}
void main(void)
{
int i;
// SP=0x60;
UartInit(6000);
send_command(Command_At);
send_command(Command_Cmgf);
for(i=0;i<10;i++)
send_command(Command_Cmgd);
read_SMS();
while (1);
}
void receive(void)
{
RI=0;
*pRBuf=SBUF;
if (*pRBuf==0x0a){command++;}
if((com_data)&&(command==3))SaveRBuf=pRBuf;
if((!com_data)&&(command==2))SaveRBuf=pRBuf;
if(R_index==15){R_index=0;pRBuf=RBuf;}
else
{pRBuf++;R_index++;}
}
void send(void)
{
TI=0;
if(*pTBuf!=0)
{
SBUF=*pTBuf;
pTBuf++;
}
}
void UART(void)interrupt 4
{
if(RI==1){receive();return;}
if(TI==1){send(); return;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -