這是我編寫的用按鍵設置PWM占空比和頻率的代碼,大家可以參考參考
main.c
#include "stm32f10x.h" // 相當于51單片機中的 #include <reg51.h>
#include "systick.h"
#include "bsp_key.h"
#include "bsp_usart.h"
#include "lcd_function.h"
#include "lcd.h"
#include "exti.h"
#include "bsp_led.h"
#include "ADvanceTIM.h"
extern float PWM_Flag1;
int kaishi=0;
int main(void)
{
LED_GPIO_Config();
KEY_EXTI_Config();
USART_Config();
ADVANCETIM_TIM_Init(); //初始化高級定時器輸出PWM波
LCD12864Configuration(); //初始化LCD12864
write_com(0x01);
Systick_Delay_ms(50);
while(1)//中斷服務函數在別處,這里為空
{
key_mode();
zhankongbi();
pinglv();
PWM_change();
//ADC_LCDdisplay();
}
}
bsp_key.c
#include "bsp_key.h"
#include "ADvanceTIM.h"
float zhankongbigewei=0;
float zhankongbishiwei=0;
extern int flag1;
extern int flag2;
float PWM_Flag1;
float pinglvshiwei=0;
float pinglvgewei=0;
float pinglvzhi;
void KEY_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStruct);
RCC_APB2PeriphClockCmd(KEY2_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = KEY2_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStruct);
}
uint8_t Key_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
{
if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_OFF )
{
// 松手檢測
while( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_OFF );
return KEY_ON;
}
else return KEY_OFF;
}
void key_mode(void)
{
switch(flag2)
{
case 1:zhankongbishiwei=flag1;break;//模式鍵按一次調整十位
case 2:zhankongbigewei=flag1;break; //模式鍵按一次調整個位
case 3:pinglvgewei=flag1;break; //模式鍵按一次調整個位
case 4:pinglvshiwei=flag1;break;//模式鍵按一次調整十位
default:;break;
}
}
void zhankongbi(void)
{
// extern int PWM_Flag1;
PWM_Flag1=(zhankongbigewei)+(zhankongbishiwei*10);
}
float pinglvfangda;
void pinglv(void)
{
// extern int PWM_Flag1;
pinglvzhi=(pinglvgewei)+(pinglvshiwei*10);
pinglvfangda=pinglvzhi*10;
}
全部資料51hei下載地址:
按鍵設置占空比(個十位).7z
(197.39 KB, 下載次數: 45)
2020-11-26 23:32 上傳
點擊文件名下載附件
|