#include "60s2.h"
#include "stdarg.h"
#include "stdio.h"
#include "string.h"
u8 xdata uart1_rxbuf[40];
u8 xdata uart1_txbuf[40];
u8 xdata uart2_rxbuf[40];
u8 xdata uart2_txbuf[40];
u8 counter,rcv1,rcv2,flag=0;
void delay(u16 z)
{
u16 x,y;
for(x=z;x>0;x--)
for(y=500;y>0;y--);
}
u8 key_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(key1==0))
{
delay(10);//去抖动
key_up=0;
if(key1==0)
return 1;
}
else if(key1==1)
key_up=1;
return 0;// 无按键按下
}
void write_com(u8 com)//根据写时序图写出指令程序
{
rs=0;
LCD_DATA=com;
delay(5);
ea=1;
delay(5);
ea=0;
}
void write_data(u8 date)//根据写时序图写出数据程序
{
rs=1;
LCD_DATA=date;
delay(5);
ea=1;
delay(5);
ea=0;
}
void lcd_init(void)
{
P4SW|=0x70; //初始化P4端口为普通IO口
rw=0; //禁止
ea=0; //使能端为低电平
write_com(0x38);//显示模式设置
write_com(0x0c);//开显示,显示光标,光标闪烁
write_com(0x06);//地址指针自动+1且光标+1,写字符屏幕不会移动
write_com(0X01);
}
void display(u8 mode)
{
if(mode==1)
{
write_com(0X01);
write_com(0x80); //第一行
write_data('L');
write_data('e');
write_data('N');
write_data('g');
write_data('t');
write_data('h');
write_data(':');
write_data('0');
write_data('0');
write_com(0xc0); //第二行
}
else if(mode==2)
{
write_com(0x87); //第一行
write_data(rcv2/10+'0');
write_data(rcv2%10+'0');
}
else if(mode==3)
{
write_com(0x80); //第一行
write_data('W');
write_data('I');
write_data('F');
write_data('I');
write_com(0xc0); //第二行
write_data('i');
write_data('n');
write_data('i');
write_data('t');
write_data('.');
write_data('.');
write_data('.');
}
}
void uart1_init(void)
{
SCON = 0x50; //串口1控制寄存器 01010000 8位可变波特率,无奇偶校验位
BRT = 0xfD; //11.0592m晶振 9600波特率
AUXR = 0x15; //辅助寄存器 11 9600波特率 15 115200波特率
ES = 1; //串口1中断允许位 (打开串口1中断)
EA = 1; //开总中断
}
void uart2_init(void)
{
S2CON= 0x50; //串口2控制寄存器 0101,0000 8位可变波特率,无奇偶校验位
BRT = 0xfD; //11.0592m晶振
AUXR = 0x15; //辅助寄存器 11 9600波特率 15 115200波特率
IE2 = 0x01; //中断允许寄存器2 (打开串口2中断 ES2=1)
EA=1; //开总中断
}
void uart1_send(u8 i)
{
ES = 0; //串口1中断允许位 (关闭串口1中断)
TI = 0; //发送中断标志清零
SBUF = i; //将数据写入串口数据缓存
while(TI ==0); //等待发送完成
TI = 0; //发送中断标志清零
delay(1); //延时1毫秒
ES = 1; //串口1中断允许位 (打开串口1中断)
}
void uart2_send(u8 i)
{
u8 temp = 0;
IE2 = 0x00; //中断允许寄存器2 (关闭串口2中断 ES2=0)
S2CON = S2CON & 0xFD; //B'11111101,清零串口2发送完成中断请求标志
S2BUF = i; //将数据写入串口数据缓存
do
{
temp = S2CON;
temp = temp & 0x02;
}
while(temp==0); //等待发送完成
S2CON= S2CON & 0xFD; //B'11111101,清零串口2发送完成中断请求标志
IE2 = 0x01; //中断允许寄存器2 (打开串口2中断 ES2=1)
}
void uart1_recv(void) interrupt 4
{
if(RI==1) //串口1接收中断标志
{
RI = 0;
uart1_rxbuf[rcv1] = SBUF;
rcv1++;
if(rcv1>39)
rcv1 = 0;
}
else
{
TI = 0;
}
}
void uart2_recv(void) interrupt 8
{
if(S2CON%2==1)
{
S2CON = S2CON & 0xFE; //1111,1110
if(flag==1)
{
uart2_rxbuf[rcv2] = S2BUF;
rcv2++;
if(rcv2>39)
rcv2 = 0;
}
}
else
{
S2CON = S2CON & 0xFD; //1111,1101
}
}
void u1_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)uart1_txbuf,fmt,ap);
va_end(ap);
i=strlen((const char*)uart1_txbuf);
for(j=0;j<i;j++)
{
uart1_send(uart1_txbuf[j]);
}
}
void u2_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)uart2_txbuf,fmt,ap);
va_end(ap);
i=strlen((const char*)uart2_txbuf);
for(j=0;j<i;j++)
{
uart2_send(uart2_txbuf[j]);
}
}
void esp8266_init(void)
{
display(3);
u2_printf("AT+CWMODE=1\r\n"); //配置为STA模式
delay(500);delay(500); delay(500);
u2_printf("AT+CWJAP=\"yangkefeng\",\"88888888\"\r\n");
delay(500);delay(500);delay(500);delay(500);
delay(500);delay(500);delay(500);delay(500);
delay(500);delay(500);delay(500);delay(500);
u2_printf("AT+CIPSTART=\"TCP\",\"10.13.88.100\",8086\r\n");
delay(500);delay(500);delay(500);delay(500);
flag=1;
}
void main()
{
lcd_init();
uart1_init();
uart2_init();
esp8266_init();
relay1=0;relay2=0;relay3=0;relay4=0;
display(1);
while(1)
{
if(rcv2>0)
{
display(2);
for(counter=0;counter<rcv2;counter++)
{
if(uart2_rxbuf[counter]==':')
break;
}
counter=counter+1;
switch(uart2_rxbuf[counter])
{
case '1':
u1_printf("1\r\n");
relay1=~relay1;
break;
case '2':
u1_printf("2\r\n");
relay2=~relay2;
break;
case '3':
u1_printf("3\r\n");
relay3=~relay3;
break;
case '4':
u1_printf("4\r\n");
relay4=~relay4;
break;
default:
u1_printf("other\r\n");
break;
}
memset(uart2_rxbuf,0,40);
rcv2=0;
counter=0;
}
}
}
ESP8266通信源码+继电器控制
5星 · 超过95%的资源 需积分: 44 179 浏览量
2017-07-09
12:29:00
上传
评论 10
收藏 36KB RAR 举报
yangkefeng19911007
- 粉丝: 11
- 资源: 23
最新资源
- HandTrackingModule.py
- Python基于卷积神经网络的鸟类识别项目源代码,ipynb文件
- 批量将py编译为pyd文件.atbx
- Python项目-学生管理系统
- 图像处理基于matlab图像RGB三色合成分离【含Matlab源码第1发】
- verilog HDL硬件语法设计包括算术运算三人表决器Verilog的阻塞和非阻塞赋值源码例程quartus13.1工程合集
- 【文章话题分类论文】OpenAlex Topic Classification Whitepaper
- linux学习常用命令
- 功率拓扑快速参考指南-ti,TI官方出品
- 开源2023电赛国赛运动目标控制(E题)视觉部分
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈