给出主函数的主要流程步骤:#include "system.h" #include "lcd12864_st7920.h" #include "delay.h" #include <stdio.h> #include "18b20.h" sbit buzzer = P1^3 ; sbit yeweiG =P1^0; sbit yeweiD =P1^1; unsigned char xdata dis0[16];//定义显示区域临时存储数组 unsigned char xdata dis1[16]; unsigned char xdata dis2[16]; unsigned char xdata dis3[16]; unsigned char i; unsigned char ReadTempFlag;//定义读时间标志 int temp1; //温度读取值 float temperature; unsigned long time_20ms=0; //定时器计数 float Sudu =0; //速度值 unsigned int PluNum = 0; //脉冲数 unsigned int disPlu = 0; //脉冲数 bit dealSuduFlag =0; //处理速度标志 float xdata juli=0; //距离 bit disFlag =0;//更新显示 unsigned char yeweiFlag = 'N';//液位标志 void main(void) { Init_Timer0(); //定时器0初始化 UART_Init(); DelayMs(200); //延时有助于稳定 Init_ST7920(); //初始化 ClrScreen(); buzzer =1; // sprintf(dis0,"20%02d-%02d-%02d ",(int)time_buf1[1],(int)time_buf1[2],(int)time_buf1[3],(int)time_buf1[7]);//年月日周 // LCD_PutString(0,1,dis0,16);//显示第时间 // // sprintf(dis0,"%02d:%02d:%02d ",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6]);//时分秒 // LCD_PutString(0,2,dis0,16);//显示第时间 // // LCD_PutString(0,3,"起:5元 3元/km ",16); //固定显示价格 // LCD_PutString(0,4,"实际价格",8); // uartSendStr("ready ok !",10); // Ds1302_Write_Time(); 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;} } } }
时间: 2023-12-11 07:02:41 浏览: 40
1. 引入头文件和声明变量
2. 初始化定时器0和串口
3. 初始化LCD屏幕
4. 清空屏幕并关闭蜂鸣器
5. 格式化时间和价格的字符串并在LCD屏幕上显示
6. 进入主循环
7. 如果需要处理速度,计算速度、转速和距离,并将处理速度标志清除
8. 如果需要更新显示,将更新标志清除并读取温度、更新液位状态和在LCD屏幕上显示
9. 如果需要读取温度,将读取标志计数器加1并读取温度值
10. 如果发现温度、液位或速度异常,则触发蜂鸣器警报
相关问题
#include "cmsis_version.h" ..\SYSTEM\delay\delay.c: 0 warnings, 1 error compiling stm32f1xx_ll_usb.c... ..\core\core_cm3.h(63): error: #5: cannot open source input file "cmsis_version.h": No such file or directory
这个错误提示说找不到 "cmsis_version.h" 这个头文件,可能是库文件路径或者头文件路径没有设置正确。您需要确认您的开发环境是否正确安装了 CMSIS 库,并且正确设置了库文件路径和头文件路径。
如果您已经安装了 CMSIS 库,可以尝试在代码中添加以下语句:
```c
#include "path/to/cmsis_version.h"
```
其中 "path/to/" 是 CMSIS 库的安装路径。如果您不知道 CMSIS 库的安装路径,可以在开发环境中搜索该文件,找到其绝对路径。
另外,您还需要确认您的开发环境是否正确设置了编译选项。在编译选项中,需要将 CMSIS 库路径添加到库文件路径和头文件路径中。具体操作方法可以参考您所使用的开发环境的文档。
假设这段代码是在一个名为delay.c的文件中实现的,那么它应该引用一个名为delay.h的头文件,其中应该包含以下内容: 在delay.h文件中: 复制 #ifndef __DELAY_H #define __DELAY_H #include "stm32f4xx.h" void delay_init(void); void delay_ms(uint16_t ms); #endif 在delay.c文件中: 复制 #include "delay.h" static __IO uint32_t delay_ms_ticks; void delay_init(void) { SysTick_Config(SystemCoreClock/1000); } void delay_ms(uint16_t ms) { delay_ms_ticks = ms; while(delay_ms_ticks); } void SysTick_Handler() { if (delay_ms_ticks > 0) { delay_ms_ticks--; } } 需要注意的是,这个代码使用了STM32F4xx的库函数,因此需要在代码中包含相应的头文件,如stm32f4xx.h。同时,这个代码的延时函数是基于SysTick中断实现的,因此需要先调用delay_init()函数初始化SysTick。可以直接使用SysTick_Config(SystemCoreClock/1000);不要定义吗
在delay.c文件中,如果没有定义`SystemCoreClock`,就需要在代码中添加相关定义,否则编译器会报错。`SystemCoreClock`是一个内核时钟频率的全局变量,它通常由启动文件(startup文件)提供。如果启动文件中没有定义该变量,那么可以在代码中手动定义,例如:
```
#include "delay.h"
#define SYSTEM_CLOCK_FREQ 168000000UL // 定义系统时钟频率为168MHz
static __IO uint32_t delay_ms_ticks;
void delay_init(void)
{
SysTick_Config(SYSTEM_CLOCK_FREQ/1000);
}
void delay_ms(uint16_t ms)
{
delay_ms_ticks = ms;
while(delay_ms_ticks);
}
void SysTick_Handler()
{
if (delay_ms_ticks > 0)
{
delay_ms_ticks--;
}
}
```
这样,在使用`SysTick_Config(SystemCoreClock/1000)`之前,先定义了`SYSTEM_CLOCK_FREQ`,并在`SysTick_Config`中使用该变量。这样就可以避免编译器报错。
阅读全文