以下為我的代碼:
這里是定時器的
- #include "sys.h"
- #include "timer.h"
- #include "touch.h"
- #include "delay.h"
- #include "timer.h"
- #include "led.h"
- #include "usart.h"
- #include "tcs3200.h"
- #include "lcd.h"
-
- extern float RGB_Scale[3];
- int cnt[3];
- extern int flag;
- extern int count;
- float color1;
-
- void TIM3_Int_Init(u16 arr,u16 psc)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
-
- TIM_TimeBaseStructure.TIM_Period = arr;
- TIM_TimeBaseStructure.TIM_Prescaler =psc;
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
-
- TIM_ITConfig(
- TIM3, //TIM2
- TIM_IT_Update | TIM_IT_Trigger,
- ENABLE
- );
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- TIM_Cmd(TIM3, ENABLE); //ê1?üTIMxíaéè
-
- }
-
-
- void TIM2_Cap_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOA,GPIO_Pin_0);
-
-
- TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //設置自動預裝載;N-1
- TIM_TimeBaseStructure.TIM_Prescaler =0; //這里有問題,為5000時不顯示色彩
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
- TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF);
- TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
- TIM_SetCounter(TIM2, 0);
-
- TIM_Cmd(TIM2,ENABLE );
- }
-
- void TIM3_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
- {
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update );
- count=TIM_GetCounter(TIM2);
- switch(flag){
- case 0:
- TSC_WB(0, 0);
- break;
- case 1:
- cnt[0] = count;
- TSC_WB(1, 1);
- break;
- case 2:
- cnt[1] = count;
- TSC_WB(0, 1);
- break;
- case 3:
- cnt[2] = count;
- TSC_WB(1, 0);
- break;
- default:
- count = 0;
- break;
- }
- TIM_SetCounter(TIM2,0);
- }
- }
- void Change_init()
- {
- float Max=0,Min=0;
- float Rhsv=0,Ghsv=0,Bhsv=0;
- float H=0,S=0,V=0;
- u8 R=0x00,G=0x00,B=0x00;
- u16 RGB=0x0000;
-
- RGB_Scale[0] = 255.0/ cnt[0];
- RGB_Scale[1] = 255.0/ cnt[1] ;
- RGB_Scale[2] = 255.0/ cnt[2] ;
- R=RGB_Scale[0];
- G=RGB_Scale[1];
- B=RGB_Scale[2];
- //================================================================================
- Rhsv = (float) R/25/10;
- Ghsv = (float) G/25/10; //RGB轉換成0,1.
- Bhsv = (float) B/25/10;
- //=================================================================================
- //RGB轉HSV算法
- Max = (Rhsv>Ghsv)?Rhsv:Ghsv; //RGB轉HSV算法
- Max = (Max>Bhsv)?Max:Bhsv; //取RGB最大值 //RGB轉HSV算法
- Min = (Rhsv<Ghsv)?Rhsv:Ghsv; //RGB轉HSV算法
- Min = (Min<Bhsv)?Min:Bhsv; //去RGB最小值 //RGB轉HSV算法
- //RGB轉HSV算法
- if(Rhsv==Max) H = (Ghsv-Bhsv)/(Max-Min); //RGB轉HSV算法
- if(Ghsv==Max) H = 2+(Bhsv-Rhsv)/(Max-Min); //RGB轉HSV算法
- if(Bhsv==Max) H = 4+(Rhsv-Ghsv)/(Max-Min); //RGB轉HSV算法
- H =(int) (H*60); //RGB轉HSV算法
- if(H<0) H = H+360; //RGB轉HSV算法
- //RGB轉HSV算法
- V = (Rhsv>Ghsv)?Rhsv:Ghsv; //RGB轉HSV算法
- V = (V>Bhsv)?V:Bhsv; //取V的數值 //RGB轉HSV算法
- //RGB轉HSV算法
- S = (Max-Min)/Max; //取S的數值 //RGB轉HSV算法
- //RGB轉HSV算法
- V = (int) (V*100); //RGB轉HSV算法
- S = (int) (S*100); //RGB轉HSV算法
- //======================================================================================================
- LCD_ShowNum(220,50,cnt[0]*R,5,12); //顯示一個數字
- LCD_ShowNum(220,70,cnt[1]*G,5,12); //顯示一個數字
- LCD_ShowNum(220,90,cnt[2]*B,5,12); //顯示一個數字
- LCD_ShowNum(220,110,H,5,12); //顯示一個數字
- LCD_ShowNum(220,130,V,5,12); //顯示一個數字
- LCD_ShowNum(220,150,S,5,12); //顯示一個數字
- // R = 0xff;
- // G = 0xff;
- // B = 0xff;
- //=====================================================
- //=====================================================
- RGB = 0x0000;
- RGB |=(unsigned long) R*1000/8225<<11;
- RGB |=(unsigned long) G*1000/4047<<5; //轉換成屏幕的4W色顯示
- RGB |=(unsigned long) B*1000/8225;
- //=====================================================
- LCD_Fill(10,170,80,260,RGB); //原來的顯示色彩
- //LCD_Fill(10,170,120,50,RGB); //顯示色彩
- color1=RGB;
- gui_fill_circle(200,400,50,RGB);
- delay_ms(50); //刷新次數
- }
復制代碼 |