解读void wifi_init(void) { // unsigned char x,FLAG = 0; // for(x = 0;x < 100;x ++) // send_buf[x] = '\0'; USART2TxStr("AT+RST\r\n"); LCD_ShowString(30,190,200,16,16,"wait for the connection"); delay_ms(1000); CLR_Buf2(); //清除串口2接收缓存 Flag_usart2_receive_OK = 0; USART2TxStr("AT+CWMODE=2\r\n"); // Serial_SendString("AT+CWMODE=3\r\n"); wait_OK();//等待接收到OK字符串 // LCD_ShowString(0,70,"AT+CWMODE=3"); //连接已知WiFi USART2TxStr("AT+CWSAP=\"esp\",\"88888888\",6,4\r\n"); // USART1TxStr("AT+CWJAP=\"。。。。。\",\"88888888\"\r\n"); LCD_ShowString(30,200,200,16,16,"connection succeeded"); wait_OK();//等待接收到OK字符串 //启动多模块连接 USART2TxStr("AT+CIPMUX=1\r\n"); wait_OK();//等待接收到OK字符串 USART2TxStr("AT+CIPSERVER=1,8080\r\n"); // USART2TxStr("AT+CIPSTART=4,\"TCP\",\"192.168.1.118\",123456\r\n");//6000 wait_OK();//等待接收到OK字符串 USART2TxStr("AT+CIFSR\r\n"); wait_OK(); delay_ms(500); LCD_Clear(WHITE); }
时间: 2023-09-28 15:04:03 浏览: 178
这段代码定义了一个名为 wifi_init 的函数,该函数没有参数和返回值(即 void 类型)。在函数体内部,首先发送了一个 AT+RST 命令,然后在 LCD 上显示一条连接等待消息,并延时 1 秒钟。接下来,清空了 USART2 的接收缓存和标志变量 Flag_usart2_receive_OK,发送了一个 AT+CWMODE=2 命令,并等待接收到 OK 字符串。然后,连接已知 WiFi 并发送一个 AT+CWSAP 命令,再次等待接收到 OK 字符串并在 LCD 上显示连接成功消息。之后,启动了多模块连接并发送一个 AT+CIPSERVER 命令,再次等待接收到 OK 字符串。最后,发送一个 AT+CIFSR 命令,并等待接收到 OK 字符串,并延时 500ms。最后,清空 LCD 屏幕。
相关问题
在这段主函数代码的基础上写一个ISD1820语音芯片采集和存储的代码,语音存储在ISD1820芯片内部:#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include <stdio.h> #include "timer.h" #include "key.h" #include "myled.h" #include "lcd1602.h" char dis0[17]; //暂存数组 unsigned char disFlag=0;//更新显示标志 static unsigned char rekey =0; unsigned char playMode =0; //设置标志 int main(void) { delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为115200 // uart2_init(9600) ; TIM3_Int_Init(499,7199);//5ms 初始化定时器 MyLED_Init(); //初始化输出 KEY_Init(); //初始化输入 Lcd_GPIO_init(); //初始化lcd引脚 Lcd_Init(); //初始化lcd屏幕 delay_ms(20); Lcd_Puts(0,0,(u8 *)"Loop Playback "); //初始化显示 //Key trigger Lcd_Puts(0,1,(u8 *)"Sound recording "); //初始化显示 playMode =0;//初始化方式 while(1) { if(disFlag == 1) { disFlag = 0;//清空标志 if(key3==0){//录音 yy_rec = 1; //录音中 Lcd_Puts(0,1,(u8 *)"Sound recording "); //显示 } else{ yy_rec = 0; //停止录音 Lcd_Puts(0,1,(u8 *)" "); } if(playMode == 0){//手动播报 Lcd_Puts(0,0,(u8 *)"Key trigger "); } else{//循环播报 yy_play = !yy_play; //播报 Lcd_Puts(0,0,(u8 *)"Loop Playback "); //初始化显示 // } } if((key1==0)||(key2==0)) //检测到按键按下 { delay_ms(10); //小抖动 if(rekey==0) { if(key1==0) //检测是否按下 { rekey=1; if(playMode ) { //播放方式 playMode = 0; } else{ playMode = 1; } } else if(key2==0)//设置值键 { rekey=1; yy_play =1; //上电动作下 delay_ms(200); yy_play =0;//关闭运行 } } } else { rekey=0; //防止重复检测到按键 } } }
好的,以下是基于主函数代码的ISD1820语音芯片采集和存储的代码,语音存储在ISD1820芯片内部的实现方法:
```
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
#include "myled.h"
#include "lcd1602.h"
char dis0[17]; //暂存数组
unsigned char disFlag=0;//更新显示标志
static unsigned char rekey =0;
unsigned char playMode =0; //设置标志
void ISD1820_Record()
{
USART_SendData(USART1, 0x22); // 发送指令,开始录音
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送完成
delay_ms(5000); // 录音 5 秒
USART_SendData(USART1, 0x77); // 发送指令,停止录音
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送完成
delay_ms(1000); // 停止录音后需要等待一段时间,让 ISD1820 完成存储操作
}
int main(void)
{
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为115200
TIM3_Int_Init(499,7199);//5ms 初始化定时器
MyLED_Init(); //初始化输出
KEY_Init(); //初始化输入
Lcd_GPIO_init(); //初始化lcd引脚
Lcd_Init(); //初始化lcd屏幕
delay_ms(20);
Lcd_Puts(0,0,(u8 *)"Loop Playback "); //初始化显示
Lcd_Puts(0,1,(u8 *)"Sound recording "); //初始化显示
playMode = 0; //初始化方式
while (1)
{
if (disFlag == 1)
{
disFlag = 0; //清空标志
if (key3 == 0) { //录音
ISD1820_Record(); //调用录音函数
Lcd_Puts(0,1,(u8 *)" "); //清空屏幕
}
if (playMode == 0) { //手动播放
if (key1 == 0) { //检测到按键按下
delay_ms(10); //小抖动
if (rekey == 0) {
rekey = 1;
yy_play = 1; //播放语音
delay_ms(200);
yy_play = 0; //关闭运行
}
}
} else { //循环播放
if (yy_play == 0) { //检测到播放结束
yy_play = 1; //播放语音
}
}
}
if ((key1 == 0) || (key2 == 0)) { //检测到按键按下
delay_ms(10); //小抖动
if (rekey == 0) {
if (key1 == 0) { //检测是否按下
rekey = 1;
if (playMode) { //播放方式
playMode = 0;
Lcd_Puts(0,0,(u8 *)"Key trigger ");
} else {
playMode = 1;
Lcd_Puts(0,0,(u8 *)"Loop Playback ");
}
} else if (key2 == 0) { //设置值键
rekey = 1;
yy_play = 1; //播放语音
delay_ms(200);
yy_play = 0; //关闭运行
}
}
} else {
rekey = 0; //防止重复检测到按键
}
}
}
```
以上代码中,我们在 `ISD1820_Record()` 函数中实现了 ISD1820 语音芯片的录音功能。在 `main()` 函数中,当检测到 `key3` 按键按下时,调用 `ISD1820_Record()` 函数进行录音。在录音结束后,清空屏幕。
此外,我们还调整了 `main()` 函数中的逻辑,以适应录音功能的实现。当 `playMode` 为 0 时,表示手动播放模式,此时按下 `key1` 按键会触发播放语音的动作。当 `playMode` 为 1 时,表示循环播放模式,程序会自动循环播放录制的语音。我们在 `ISD1820_Record()` 函数中加入了延时操作,以确保 ISD1820 芯片在录音结束后能够完成存储操作。
void UartInit(void) //4800bps@12.000MHz { S2CON = 0x50; //8位数据,可变波特率 AUXR |= 0x04; //定时器时钟1T模式 AUXR |= 0x01; T2L = 0x8F; //设置定时初始值 T2H = 0xFD; //设置定时初始值 AUXR |= 0x10; //定时器2开始计时 ES=1; EA=1; } void uart_send(unsigned char *string) { x=string; while(*x!='\0') { SBUF=*x; while(!TI); TI=0; x++; } } void send(unsigned char *string) { while(*string!='\0') { SBUF=*string; while(!TI); TI=0; string++; } } void main() { init(); UartInit(); // a=eepro_rd(1); // Delay5ms(); // b=eepro_rd(2); // Delay5ms(); // c=eepro_rd(3); // Delay5ms(); // Timer1_Init(); // Timer0_Init(); // PCA(); // set_time(date); while(1) { // key(); // eepro_wr(a,1); // Delay5ms(); // eepro_wr(b,2); // Delay5ms(); // eepro_wr(c,3); // Delay5ms(); // sprintf(seg_string,"%d %d %d ",(int)a,(int)b,(int)c); // seg_trans(seg_string,seg_code); // // if(string_r[num-1]=='\n') // { // num=0; // sprintf(string,"hello world"); // send(string); // } sprintf(string,"hello world"); uart_send(string); } } //void timer1()interrupt 3 //{ // ms++; // // if(ms%500==0)seg_flag=1; // if(++key_time==10)key_time=0; // if(ms%1000==0) // { // f=(TH0<<8)|TL0; // TH0=0;TL0=0; // } // seg_dis(seg_code,pos); // if(++pos>=8)pos=0; //} void uart()interrupt 4 { if(RI) { RI=0; string_r[num]=SBUF; num++; } if(TI)TI=0; }有什么问题
这段代码是关于串口通信的程序,但是并没有问题。可以看到,该程序中定义了一些函数,如UartInit()、uart_send()、send()等,用于串口的初始化和数据的发送。在主函数中,通过调用这些函数,来实现串口通信功能。同时,在程序中还定义了一个中断服务函数uart(),用于处理串口接收和发送中断。
因此,如果运行该程序没有出现问题,那么可以认为该程序是可行的。但是,如果想要更深入地了解该程序,还需要知道程序的具体运行环境和目的等信息。
阅读全文