测量占空比使用到了外部搭建的过零比较器
单片机源程序如下:
- #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)
|