给出主函数的主要流程步骤:void main(void) { Init_Timer0(); //定时器0初始化 UART_Init(); DelayMs(200); //延时有助于稳定 Init_ST7920(); //初始化 ClrScreen(); buzzer =1; while(1) { if(dealSuduFlag == 1) { Sudu=(float)PluNum0.23.6/2; //m/s 20个脉冲为1圈 3s时间进行检测 disPlu = PluNum/2; //转速 PluNum=0; dealSuduFlag=0; juli = juli+Sudu0.2; //公里 } if(disFlag==1) //显示 { disFlag=0; //标志位清零 ReadTempFlag++; //读取温度计时 if(ReadTempFlag >= 3) { ReadTempFlag=0; temp1=ReadTemperature(); //读取温度 temperature=(float)temp10.0625; //温度值转换 } if((yeweiG == 0)&&(yeweiD == 0))//上下液位有水 { yeweiFlag = 'H'; } sprintf(dis0,"液位 %c ",yeweiFlag);//打印 LCD_PutString(0,1,dis0,16);//显示 sprintf(dis1,"温度 %4.1fC 40 ",temperature);//打印 LCD_PutString(0,2,dis1,16);//显示 if((Sudu>1.5)||(temperature>40)||(yeweiFlag=='L')) //异常情况 {buzzer = !buzzer;} } } }
时间: 2024-01-10 22:02:07 浏览: 93
主函数的主要流程步骤如下:
1.初始化定时器0,用于计算转速和里程数。
2.初始化串口,用于与其他设备通信。
3.延时200ms,有助于提高系统稳定性。
4.初始化ST7920液晶屏,用于显示液位、温度等信息。
5.清空屏幕。
6.开启蜂鸣器。
7.进入循环,不断检测传感器数据并进行处理。
8.如果检测到转速变化,计算车速和里程数,并更新标志位。
9.如果需要显示数据,读取温度计时器计数器加1,如果达到3就读取温度值。
10.根据上下液位的状态确定液位标志位。
11.将液位和温度信息格式化为字符串并在液晶屏上显示。
12.如果检测到异常情况,开启蜂鸣器。
13.回到循环开始继续检测数据。
相关问题
给出主函数的主要流程步骤:void main(void) { Init_Timer0(); //定时器0初始化 UART_Init(); DelayMs(200); //延时有助于稳定 Init_ST7920(); //初始化 ClrScreen(); buzzer =1; while(1) { if(dealSuduFlag == 1) { Sudu=(float)PluNum*0.2*3.6/2; //m/s 20个脉冲为1圈 3s时间进行检测 disPlu = PluNum/2; //转速 PluNum=0; dealSuduFlag=0; juli = juli+Sudu*0.2; //公里 } if(disFlag==1) //显示 { disFlag=0; //标志位清零 ReadTempFlag++; //读取温度计时 if(ReadTempFlag >= 3) { ReadTempFlag=0; temp1=ReadTemperature(); //读取温度 temperature=(float)temp1*0.0625; //温度值转换 } if((yeweiG == 0)&&(yeweiD == 0))//上下液位有水 { yeweiFlag = 'H'; } sprintf(dis0,"液位 %c ",yeweiFlag);//打印 LCD_PutString(0,1,dis0,16);//显示 sprintf(dis1,"温度 %4.1fC 40 ",temperature);//打印 LCD_PutString(0,2,dis1,16);//显示 if((Sudu>1.5)||(temperature>40)||(yeweiFlag=='L')) //异常情况 {buzzer = !buzzer;} } } }
该主函数的主要流程步骤为:
1. 初始化定时器0,用于检测车轮转速。
2. 初始化串口通信。
3. 延时等待稳定。
4. 初始化液晶屏幕ST7920。
5. 清空屏幕。
6. 鸣笛。
7. 进入无限循环。
8. 如果检测到车轮转速有变化,则计算车速和里程,并清空转速计数器。
9. 如果需要显示信息,则读取温度,检测液位,打印相关信息,并在异常情况下触发蜂鸣器。
10. 持续循环。
在这段主函数代码的基础上写一个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 芯片在录音结束后能够完成存储操作。
阅读全文