赞
踩
概述
实现效果:
该程序实现的功能:用STM32f4输出可调频率(100~500HZ)和占空比(0—100)互补方波,通过矩阵键盘输入数据,用液晶显示屏显示参数。
修改占空比的方式:在TIM2的通用定时器的中断(21kHZ)中,用TIM_SetCompare函数设置比较值。
修改频率的方式:只需要修改预分频的系数就好了,我尝试了两个方式,第一种是用TIM_PrescalerConfig()函数修改预分频器的值,但是输出不准确。因此我采用初始化的函数TIM_PWM_Init()装值。
该程序难点在于矩阵键盘,屏幕和单片机三者的结合,包括如何正确读出矩阵键盘输入的字符串和数字,如何设置屏幕显示,如何设置代码的顺序,使整个程序各个部分能独立工作不相互干扰。从开始到完成的5个小时中,我4个多钟都在解决上面的难点。我这里设置了三个mode区分修改频率,修改占空比和正常输出状态。
话不多说,直接上代码(显示屏的底层代码略过):
主函数代码
#include "sys.h" #include "delay.h" #include "usart1.h" #include "usart2.h" #include "led.h" #include "pwm.h" #include "timer.h" #include "adc.h" #include "pid.h" #include "key.h" #include "keyboard.h" #include "data.h" #include "string.h" #include "math.h" #include "Lcd_Driver.h" #include "GUI.h" #include "QDTFT_demo.h" #include "encoder.h" char clear[20]; char freq_buffer[3];//频率转化为字符串 char duty_buffer[3];//占空比转化为字符串 int frequency=300;//初始频率 u8 duty=50;//初始占空比 u8 mode=2;//初始mode,其中0:set freq 1:set duty 2:ordinary u32 psc=1400;//分频系数,初始300 void CLEAR(int i) //显示屏清除某行的多少的函数 { int n; for(n=0;n<i;n++) { clear[n]=' '; } clear[n]='\0'; } void show_fd()//显示频率和占空比 {
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。