測量占空比使用到了外部搭建的過零比較器
單片機源程序如下:
- #include "main.h"
- #include "stm32f10x.h"
- #include "stdio.h"
- #include "my_adc.h"
- #include "my_time.h"
- #include "my_gpio.h"
- #include "stm32f10x_usart.h"
- #include "public.h"
- #include "Lcd_f.h"
- #include "my_oled.h"
- int main()
- {
- u16 i=0;
- u8 kong[]={" "};
-
- adc_init();
- exti_init();//頻率
- GPIOA_init();//作電壓調檔 初始為GPIO7set 4檔
- GPIOB_init();
- GPIOC_init();
- TIMER2_init(65534,71);//頻率計數
- TIMER4_init(65534,71);
- TIMER3_init(99,7199);//10ms
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2
- OLED_Init(); //初始化OLED
- OLED_Clear();
- time_buzzer=25;
- while(1)
- {
- if(signal_time==100)//如果1s沒有收到觸發外部中斷(沒有信號輸入)
- {
- OLED_Clear();//清屏
- }else if(signal_time>100)//如果1s后沒有檢測到外部中斷
- {
- OLED_no_signal();//顯示無信號
- bit_clear=0;//清屏標志位
- BX=0;
- }
-
- if(signal_time<100)//判斷是否有信號
- {
- //=====顯示=====//
- if(bit_oled)//每1s更新標志位 更新顯示信息
- {
- if(bit_clear==0)
- {
- OLED_Clear();
- bit_clear=1;
- }
- Data_average();//求函數平均值
- OLED_BX();//顯示波形
- OLED_frequency();//顯示頻率
- // if(BX==2)
- // {
- OLED_Duty_cycle();//顯示占空比
- // }
- // else
- // {
- // OLED_ShowString(70,0,kong,12);
- // }
- OLED_Vpp();//顯示峰峰值
- OLED_TEXT();
- bit_oled=0;
- }
-
- if((Txet_BX_bit==1)&&(Duty_cycle_bit==1))
- {
- FB_pd_main_V();
- Txet_BX_bit=0;
- Duty_cycle_bit=0;
- }
- //====判斷方波===//
- Text_ADC();//檢測電壓范圍
- //=====ADC檢測=====//
- // if(bit_Text_V==1)//如果標志位為1 檢測電壓范圍
- // {
- //
- // }else
- // {
- // if(Duty_cycle_bit)
- // {
- //// FB_pd_main_V();
- // Duty_cycle_bit=0;
- // }
- //
- // }
- }
- }
- }
復制代碼
Keil代碼下載::
C8T6_text_BX_7.7z
(597.37 KB, 下載次數: 21)
2021-11-26 20:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|