新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2019-10-5
- 在线时间
- 12 小时
|
1金钱
一直不能实现 也不知道什么问题
求大佬指导
- /* 添加库函数头文件 */
- #include "stm8s.h"
- unsigned char CCR1_Val ;
- unsigned char abc;
- //数码管0 ~ F的代码数组
- //u8 const Data[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- //#define KEY1_ON() GPIO_WriteLow(GPIOB , GPIO_PIN_4)
- //#define KEY2_ON() GPIO_WriteLow(GPIOB , GPIO_PIN_5)
- //#define KEY3_ON() GPIO_WriteLow(GPIOB , GPIO_PIN_6)
- //#define KEY1_OFF() GPIO_WriteHigh(GPIOB , GPIO_PIN_4)
- //#define KEY2_OFF() GPIO_WriteHigh(GPIOB , GPIO_PIN_5)
- //#define KEY3_OFF() GPIO_WriteHigh(GPIOB , GPIO_PIN_6)
- void delay(unsigned int ms)
- {
- unsigned int x , y;
- for(x = ms; x > 0; x--) /* 通过一定周期循环进行延时*/
- for(y = 3000 ; y > 0 ; y--);
- }
- //void ALL_LED_Init()
- //{
- //设置PD2为快速推挽输出 ,LED2
- //GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_OUT_PP_LOW_FAST);
-
- //设置PB4为快速推挽输出 ,LED3
- // GPIO_Init(GPIOB , GPIO_PIN_5 , GPIO_MODE_OUT_PP_LOW_FAST);
-
- //设置PD3为快速推挽输出 ,LED4
- //GPIO_Init(GPIOB , GPIO_PIN_6 , GPIO_MODE_OUT_PP_LOW_FAST);
- //}
- //void ALLKeyInit()
- //{
- //KEY1 INIT PA3
- //GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_IN_PU_NO_IT); //配置KEY1 PA3 为带上拉电阻输入
-
- //KEY2 INIT PB6
- //GPIO_Init(GPIOB , GPIO_PIN_5 , GPIO_MODE_IN_PU_NO_IT); //配置KEY2 PB6 为带上拉电阻输入
-
- //KEY3 INIT PD7
- //GPIO_Init(GPIOB , GPIO_PIN_6 , GPIO_MODE_IN_PU_NO_IT); //配置KEY3 PD7 为带上拉电阻输入
- //}
- void ALLKeyInit()
- {
- //KEY1 INIT PA3
- GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_IN_PU_IT); //配置KEY1 PB4 为浮空输入
-
- //KEY2 INIT PB6
- GPIO_Init(GPIOB , GPIO_PIN_5 , GPIO_MODE_IN_PU_IT); //配置KEY2 PB5 为浮空输入
-
- //KEY3 INIT PD7
- GPIO_Init(GPIOB , GPIO_PIN_6 , GPIO_MODE_IN_PU_IT); //配置KEY3 PB6 为浮空输入
- }
- void assert_failed(u8* file, u32 line)//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
- {
- while (1)
- {
- }
- }
- void Init_pwm()
- {
- //GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); //输出推拉,低电平,10MHz
- TIM1_DeInit();
- TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 999, 0x00);//250
- TIM1_OC2Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE,CCR1_Val,
- TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,
- TIM1_OCNIDLESTATE_RESET);//50%占空比
- //TIM1_OC4Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, 400,
- // TIM1_OCPOLARITY_LOW, TIM1_OCIDLESTATE_SET
- // );//50%占空比
- TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE); //使能
- TIM1_OC2PreloadConfig(ENABLE);
- TIM1_CtrlPWMOutputs(ENABLE); //TIM1输出使能
- TIM1_Cmd(ENABLE);//TIM1使能
- //TIM1->CCER1 |= 0x10; //开启OC2信号输出脚
- // TIM1->CCMR2 = 0x60; //PWM1模式
- // TIM1->CCR2H = 0x00; //占空比高位
- //TIM1->CCR2L = 0x37; //占空比低位
- // TIM1->CCMR2 |= 0x08; //输出比较2预装载使能
- }
- void main()
- {
- CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8); //内部时钟16M
- //ALL_LED_Init(); //调用LED初始化函数
- ALLKeyInit(); //调用按钮初始化函数
- CLK_DeInit(); //初始化clk相关寄存器为初始值
- Init_pwm();
- enableInterrupts();
- while(1)
- {
-
-
- if(GPIO_ReadInputPin(GPIOB , GPIO_PIN_4) == SET)//判断按钮1是否被按下
- {
-
- delay(10); //先延时进行消抖
- while(GPIO_ReadInputPin(GPIOB , GPIO_PIN_4) == RESET); //等待按钮1被松开
- delay(10); //再次延时消抖
- CCR1_Val = abc+100;
- //GPIO_WriteReverse(GPIOC , GPIO_PIN_1); //异或取反LED1使其亮灭
- }
-
- if(GPIO_ReadInputPin(GPIOB , GPIO_PIN_5) == SET) //判断按钮2是否被按下
- {
- delay(10); //先延时进行消抖
- while(GPIO_ReadInputPin(GPIOB , GPIO_PIN_5) == RESET); //等待按钮2被松开
- delay(10); //再次延时消抖
- CCR1_Val = abc-100;
- //GPIO_WriteReverse(GPIOD , GPIO_PIN_2); //异或取反LED2使其亮灭
- }
-
- if(GPIO_ReadInputPin(GPIOB , GPIO_PIN_6) == SET) //判断按钮3是否被按下
- {
- delay(10); //先延时进行消抖
- while(GPIO_ReadInputPin(GPIOB , GPIO_PIN_6) == RESET); //等待按钮3被松开
- delay(10); //再次延时消抖
- CCR1_Val = abc;
- //GPIO_WriteReverse(GPIOB , GPIO_PIN_4); //异或取反LED3使其亮灭
- }
- // while(1)
- // {
-
- // }
- }
- }
复制代码
|
|