班主任打电话来了,一年半前预料的事情发生了,就下来小心点走自己的路就是了,不能泄气

还好前段日子把最重要的事情都做掉了,后面的一切艰难险阻我可以全身心去承受,呵呵。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一份示例代码,供参考: ``` #include "stdio.h" #include "gd32e10x.h" #define PRESSURE_SENSOR_PIN GPIO_PIN_0 #define PRESSURE_SENSOR_PORT GPIOA #define PRESSURE_MAX 1000 // 最大安全负压 #define PRESSURE_MIN 500 // 最小安全负压 void adc_init(void); void timer_init(void); void gpio_init(void); void nvic_init(void); void adc_interrupt_handler(void); uint16_t pressure_actual = 0; // 实际负压值 int main(void) { adc_init(); timer_init(); gpio_init(); nvic_init(); // 开始治疗 timer_enable(TIMER0); while (1) { // 治疗过程中通过ADC采集负压传感器的数值 adc_regular_data_config(ADC0, ADC_REGULAR_CHANNEL_0, PRESSURE_SENSOR_PIN); adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL_0); while(!adc_flag_get(ADC0, ADC_FLAG_EOC)); pressure_actual = adc_regular_data_read(ADC0); // 与设定的安全范围进行比较 if (pressure_actual > PRESSURE_MAX || pressure_actual < PRESSURE_MIN) { // 超出最大安全负压,则触发中断处理程序 timer_disable(TIMER0); // 关闭PWM输出 } } } void adc_init(void) { rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_ADC0); gpio_init(PRESSURE_SENSOR_PORT, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, PRESSURE_SENSOR_PIN); adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT); adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_239POINT5); adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE); adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE); adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); adc_mode_config(ADC_MODE_FREE); adc_enable(ADC0); } void timer_init(void) { rcu_periph_clock_enable(RCU_TIMER0); timer_deinit(TIMER0); timer_oc_parameter_struct timer_ocinitpara; timer_ocinitpara.output_state = TIMER_CCX_ENABLE; timer_ocinitpara.output_n_state = TIMER_CCXN_DISABLE; timer_ocinitpara.oc_polarity = TIMER_OC_POLARITY_HIGH; timer_ocinitpara.oc_n_polarity = TIMER_OCNP_POLARITY_HIGH; timer_ocinitpara.oc_idle_state = TIMER_OC_IDLE_STATE_LOW; timer_ocinitpara.oc_n_idle_state = TIMER_OCN_IDLE_STATE_HIGH; timer_oc_output_config(TIMER0, TIMER_CH_0, &timer_ocinitpara); timer_auto_reload_value_config(TIMER0, 100); timer_enable(TIMER0); } void gpio_init(void) { rcu_periph_clock_enable(RCU_GPIOA); gpio_init(PRESSURE_SENSOR_PORT, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, PRESSURE_SENSOR_PIN); } void nvic_init(void) { nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); nvic_irq_enable(TIMER0_IRQn, 2, 0); } void TIMER0_IRQHandler(void) { if (timer_interrupt_flag_get(TIMER0, TIMER_INT_CH0) != RESET) { // 触发中断处理程序,关闭气泵,打开电磁阀,启动泄气 timer_interrupt_flag_clear(TIMER0, TIMER_INT_CH0); gpio_bit_reset(GPIOB, GPIO_PIN_0); gpio_bit_set(GPIOB, GPIO_PIN_1); gpio_bit_set(GPIOB, GPIO_PIN_2); } } ``` 上述代码中,ADC采集的负压传感器数据保存在pressure_actual变量中,然后与设定的安全范围进行比较。如果超出了最大安全负压,则会触发中断处理程序,中断处理程序中关闭气泵,打开电磁阀,启动泄气。中断处理程序的具体实现是通过TIMER0_IRQHandler函数来实现的,该函数的作用是清除TIMER0计数器的中断标志位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值