📄 main.c
字号:
#include "fun.h"
void ADC_interrupt() interrupt 5
{
ADC_CONTR &= 0Xef; //ADC_FLAG清零
//计算电压值
ad_result10 = ADC_RES;
ad_result10 = ( ad_result10 << 2 ) | ADC_RESL;
vin = ad_result10 * 5.0 / 1024 ; //ad_result10 = 1024 × ( Vin / 5v )
/*
第一段 1.7V~2.1V,
第二段2.8~3.2V
第三段3.8~4.2V
*/
if (vin>=1.7 && vin<=2.1) //低速挡
{
duty_level = 1; //占空比30%
CCAP0H = 255 - 255 * duty[duty_level] / 100;
CCAP0L = CCAP0H;
}
else if(vin>=2.8 && vin<=3.2) //中速挡
{
duty_level = 2; //占空比50%
CCAP0H = 255 - 255 * duty[duty_level] / 100;
CCAP0L = CCAP0H;
}
else if(vin>=3.8 && vin<=4.2) //高速挡
{
duty_level = 3; //占空比80%
CCAP0H = 255 - 255 * duty[duty_level] / 100;
CCAP0L = CCAP0H;
}
else//其它异常情况
{
duty_level = 0; //占空比0%
CCAP0H = 255 - 255 * duty[duty_level] / 100;
CCAP0L = CCAP0H;
}
}
void Timer0_interrupt() interrupt 1
{
//重装初值
TH0 = T0_50ms >> 8;
TL0 = T0_50ms;
cntint0++;
if(cntint0 >=10)//500ms
{
ADC_CONTR |= 0X08; //ADC_START=1,启动ad转换
cntint0=0;
}
}
main()
{
ms_delay(100);
init_port();
init_timer0();
init_pca();
init_adc();
cntint0=0;
IE |= 0x20; //EADC=1,打开adc中断
EA = 1;//开总中断
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -