- #include "stm32f10x.h" // Device header
- #include "Timer.h"
- #include "StaticData.h"
- #include "TM1637.h"
- #include "led.h"
- #include "can.h"
- uint16_t x,y;
- int count; //定时器计数
- int KeyStartcount;//长按事件计数
- uint8_t UpdateState; //设置运行状态标志位
- uint8_t RunState; //运行状态
- uint8_t AwaitSetRunState; //设置运行状态
- int smg_Mode; //数码管调节
- void TIM2_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
- {
- count++;
-
-
- //启动停止
- KeyTask(&KeyStartStop);
- if(KeyStartStop.Event==LONG_PRESS)//长按
- {
- if(KeyStartcount==0)
- {
- UpdateState=1; //运行状态更新标志位
- if(RunState==0) //运行状态
- {
- AwaitSetRunState=1;//启动
- RunState=1;
-
- }
- else
- {
- AwaitSetRunState=0;//停止
- RunState=0;
- }
- }
- KeyStartcount++; //长按一次只触发一次
- }
- else
- {
- KeyStartcount=0;//复位长按事件
- }
-
-
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- }
- }
- int16_t Encoder_Get(void)
- {
- int16_t Temp;
- if(AwaitSetRunState==1)
- {
- smg_Mode=1;
- if(smg_Mode==1)
- {
- TIM_SetCounter(TIM3,96);
- }
- else
- {
- TIM_SetCounter(TIM3,0);
- }
- }
- if(smg_Mode==1)
- {
- Temp = TIM_GetCounter(TIM3);
- if(Temp>=96)
- {
- Temp=96;
- TIM_SetCounter(TIM3,96);
- }
-
- if(Temp<4)
- {
- Temp=4;
- TIM_SetCounter(TIM3,4);
- }
- }
- else
- {
-
- TIM_SetCounter(TIM3,0);
-
- }
- return Temp;
- }
- int main()
- {
- KeyHandlerInit();
- Timer_Init();
- TM1637_Init();
- LED_Init();
- //
- CAN_Configuration();
- CAN_NVIC_Configuration(USB_LP_CAN1_RX0_IRQn,2,0); //CAN中断配置
- while (1)
- {
- x=Encoder_Get()/4;
-
- TM1637_SetNum(5,x/10);//个位
- TM1637_SetNum(4,x%10);//十位
- TM1637_Display_INC();
- TM1637_SetBrightness( 7 );
- if(count%5==0)
- {
- CAN_Datasend(0xdd,0x00,0x50,0,0,0);
-
- }
- if(AwaitSetRunState==1)
- { GPIO_SetBits(LEDPORTb,DOT);
- GPIO_SetBits(LEDPORTa,FIRE);
- CAN_Datasend(0xdd,0x00,0x50,0,0,0);
- }
- else
-
- { GPIO_ResetBits(LEDPORTb,DOT);
- GPIO_ResetBits(LEDPORTa,FIRE);
- CAN_Datasend(0xdd,0x42,0x50,0,0,0);
- }
- }
- }
复制代码
原理图: 无
仿真: 无
代码:
长按短按实例.7z
(188.59 KB, 下载次数: 0)
|