|
內容很詳細,有電路原理圖,PCB圖,可用AD打開編輯,還有PDF版的原理圖,可供大家參考
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (42.54 KB, 下載次數: 94)
下載附件
2019-2-18 15:27 上傳
0.jpg (60.3 KB, 下載次數: 97)
下載附件
2019-2-18 15:24 上傳
0.png (3.46 KB, 下載次數: 93)
下載附件
2019-2-18 15:27 上傳
stm8單片機源程序如下:
- /* MAIN.C file
- 編譯環境:IAR
- 初版時間: 2013-01-18
- */
- #include "stm8s.h" //包含用到的外設的頭文件
- #include "stm8s_adc1.h"
- #include "stm8s_clk.h"
- #define FLG_IOUT 0
- #define FLG_VOUT 1
- #define LED1_OFF() GPIO_WriteHigh(GPIOC,GPIO_PIN_4)
- #define LED1_ON() GPIO_WriteLow(GPIOC,GPIO_PIN_4)
- #define LED2_OFF() GPIO_WriteHigh(GPIOC,GPIO_PIN_5)
- #define LED2_ON() GPIO_WriteLow(GPIOC,GPIO_PIN_5)
- #define LED3_OFF() GPIO_WriteHigh(GPIOC,GPIO_PIN_6)
- #define LED3_ON() GPIO_WriteLow(GPIOC,GPIO_PIN_6)
- #define LED4_OFF() GPIO_WriteHigh(GPIOC,GPIO_PIN_7)
- #define LED4_ON() GPIO_WriteLow(GPIOC,GPIO_PIN_7)
- //LED操作宏
- #define LED_ALL_OFF() do{ LED4_OFF();LED3_OFF();LED2_OFF();LED1_OFF(); }while(0)
- #define LED_VOL_100() do{ LED4_ON();LED3_ON();LED2_ON();LED1_ON(); }while(0)
- #define LED_VOL_75() do{ LED4_ON();LED3_ON();LED2_ON();LED1_OFF(); }while(0)
- #define LED_VOL_50() do{ LED4_ON();LED3_ON();LED2_OFF();LED1_OFF(); }while(0)
- #define LED_VOL_25() do{ LED4_ON();LED3_OFF();LED2_OFF();LED1_OFF(); }while(0)
- #define LED_VOL_0() LED_ALL_OFF()
- #define VAT_CAP_100 ((unsigned short)(4.16*1024/6.6))
- #define VAT_CAP_75 ((unsigned short)(3.93*1024/6.6))
- #define VAT_CAP_50 (((unsigned short)3.79*1024/6.6))
- #define VAT_CAP_25 (((unsigned short)3.72*1024/6.6))
- #define VAT_CAP_0 (((unsigned short)3.58*1024/6.6))
- #define IOUT_0_25 (((unsigned short)0.25*1024/3.3))
- #define IOUT_3_00 (((unsigned short)3*1024/3.3))
- #define GET_MIN(a,b) (((a) > (b))? (b):(a))
- /**************************實現函數********************************************
- *函數原型: void Delay(unsigned int time)
- *功 能: 實現一定時間的延時,延時設定時長由輸入time 決定
- *******************************************************************************/
- void Delay(unsigned int time)
- {
- volatile unsigned int i;
- while(time--){
- i=300;
- while(i--); //做一些沒有用的事,打發時間
- }
- }
- void Led_tig(unsigned short adc_val)
- {
- static unsigned char flag = 0; //反轉的標志
-
- if(adc_val >= VAT_CAP_100)
- {
- LED_VOL_100();
- }
- else if(adc_val >= VAT_CAP_75)
- {
- if(flag)LED_VOL_100();
- else LED_VOL_75();
- }
- else if(adc_val >= VAT_CAP_50)
- {
- if(flag)LED_VOL_75();
- else LED_VOL_50();
- }
- else if(adc_val >= VAT_CAP_25)
- {
- if(flag)LED_VOL_50();
- else LED_VOL_25();
- }
- else
- {
- if(flag)LED_VOL_25();
- else LED_VOL_0();
- }
- flag = !flag;
- }
- unsigned short ADC_val_get(unsigned char ch)
- {
- unsigned short buf[3] , temp;
- unsigned char i;
- if(FLG_IOUT)
- ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE , ADC1_CHANNEL_3, ADC1_ALIGN_RIGHT);
- else
- ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_4 , ADC1_ALIGN_RIGHT);
- for(i=0 ; i<3 ; i++)
- {
- ADC1_StartConversion();
- while(SET == ADC1_GetFlagStatus(ADC1_FLAG_EOC)){;}
- buf[i] = ADC1_GetConversionValue();
- ADC1_ClearFlag(ADC1_FLAG_EOC);
- }
-
- temp = GET_MIN( buf[0] , buf[1]);
- temp = GET_MIN( temp , buf[2]);
-
- return temp;
- }
- volatile short adc_val;
- volatile u32 u32_clk_freq;
- /**************************實現函數********************************************
- *函數原型: main() 主程序
- *功 能: 設置LED的端口為輸出,并使開發板上的LED2閃爍
- *******************************************************************************/
- main()
- {
- CLK_DeInit();
- CLK_LSICmd(ENABLE);
- CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV8);
-
- GPIO_DeInit(GPIOD);
- GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_SLOW); // PW_ON高電平
- u32_clk_freq = CLK_GetClockFreq();
- GPIO_DeInit(GPIOC);//把LED1-4設置為高電平輸出,關燈
- GPIO_Init(GPIOC, GPIO_PIN_HNIB , GPIO_MODE_OUT_PP_HIGH_SLOW); //LED1-4 滅
- //ADC 初始化
- ADC1_DeInit();
- ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_4 | ADC1_CHANNEL_3,
- ADC1_PRESSEL_FCPU_D2,ADC1_EXTTRIG_TIM, DISABLE,
- ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL4 | ADC1_SCHMITTTRIG_CHANNEL3, DISABLE);
-
- // ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_2,
- // ADC1_PRESSEL_FCPU_D2,ADC1_EXTTRIG_TIM, DISABLE,
- // ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL2, DISABLE);
- ADC1_Cmd(ENABLE);
- ADC1_ITConfig(ADC1_IT_AWDIE, DISABLE);
- while (1)
- { //主循環體
- Delay(100);//延時。
- adc_val = ADC_val_get(FLG_VOUT);
-
- adc_val = ADC_val_get(FLG_IOUT);
- if(adc_val >= IOUT_3_00 || adc_val < IOUT_0_25)
- {
- GPIO_WriteLow(GPIOD, GPIO_PIN_4);
- }
- else
- GPIO_WriteHigh(GPIOD, GPIO_PIN_4);
- // Led_tig(adc_val);
- }//如些反復,用戶會觀察到LED2一直在閃爍
- }
復制代碼
所有資料51hei提供下載:
|
評分
-
查看全部評分
|