合泰单片机做电压表_合泰单片机真难用,谁用仿真器帮忙仿下附件里的HT46R02C的一个工程,包括软PWM输出和AD...

=a[i+1];

a[i+1]=t;

}

}

}

for(i=3;i<12;i++)                                //求出中间10个的值求平均 第0 1 2 不要,3-11保留,12 13 14不要 *

sum+=a;

return(sum/9);                                        //返回剩余9个的平均值平均值

}

//------------------------------------------------定时器0中断   8mS定时

#pragma vector ISR_tmr0 @ 0x08

void  ISR_tmr0(void)

{

//--------------------------------8mS定时中断

PA6_Flash;

t_8ms_cnt  ++ ;

t_8ms_LED_cnt ++;

if(t_8ms_cnt>=125)

{

t_8ms_cnt =0;

t_1s_flag=1;

}

//-----------------LED闪烁处理

switch(LED_Mode)

{

case FAST:

if(t_8ms_LED_cnt >= FAST_VALUE)                        //快闪

{

t_8ms_LED_cnt=0;

LED_Flash;

}

break;

case SLOW:

if(t_8ms_LED_cnt >= SLOW_VALUE)                        //慢闪

{

t_8ms_LED_cnt=0;

LED_Flash;

}

break;

default:

t_8ms_LED_cnt =0 ;                                                //其他模式直接清零,防溢出

break;

}

}

//------------------------------------------------定时器1中断   软PWM

#pragma vector ISR_tmr1 @ 0x0C

void  ISR_tmr1(void)

{

pwm_counter ++;

if( pwm_counter >= PWM_CYCLE )

pwm_counter = 0;                                                        //处理周期问题

if( pwm_counter < pwm_duty )

pwm_pin_hi_F;

else

pwm_pin_low_F;                                                                //处理占宽问题

}

//--------------------------------------------------时基功能处理(指定一个中断函数,否则可能复位)

#pragma vector ISR_TBS @ 0x14

void ISR_TBS(void)

{

;

}

//-------------------------------------------------LED快闪三次

void LED_FlashFast3(void )

{

uchar i;

for(i=0;i<3;i++)                                                        //执行三次

{

LED_On;

_delay(150000);                                                        //亮150mS

LED_Off;

_delay(150000);                                                        //灭150mS

}

}

//----------------------------------------------主函数

void main(void )

{

uchar        i=0;                                                                //循环体变量

uchar        State=1;                                                        //全局状态标志,默认为1状态

uchar        SampCnt2=0;                                                        //SEG2采样计数

uint        SampCnt3=0;                                                        //SEG3采样计数

ulong        SampCnt4=0;                                                        //SEG4采样计数

uchar        CaptureFlag=0;                                                //进入检测电压跌降模式标志

uint         AD1=0;                                                                //AD转换结果

uint        MaxAD1=0;                                                        //老的AD转换结果

PWM_CYCLE = 800;

pwm_counter = 0;

pwm_duty = 0;

LED_Off;

t_1s_flag=0;

t_8ms_cnt=0;

t_8ms_LED_cnt=0;

SysInit();                                                                        //系统初始化

LED_FlashFast3();                                                        //LED快闪三次

LED_Off;

while(1)

{

LED_Mode = FAST;

pwm_duty = 100;                                                //应该占空比到10%

for(i=0;i<20;i++)

_delay(200000);                                        //延时四秒,以便观察快闪的情况

LED_Mode = SLOW;                                        //慢闪

pwm_duty = 400;                                                //应该占空比到50%;

for(i=0;i<20;i++)

_delay(200000);                                        //延时四秒,以便观察快闪的情况

LED_Off;                                                        //LED PWM都关闭

pwm_duty = 0;

for(i=0;i<20;i++)

_delay(200000);                                        //延时四秒,以便观察快闪的情况

pwm_duty = 400;

LED_Off;

for(i=0;i<20;i++)

{

AD1=GetADC();                                        //判断20次AD是否能通过,如果AD能顺利通过不死机,应该能看到20次灯的状态变化(闪10次)

LED_Flash;

for(i=0;i<20;i++)

_delay(200);                                //延时四秒,以便观察快闪的情况

}

LED_Mode=SLOW;                                                //LED慢闪

pwm_duty = 400;                                                //固定duty值,如果PWM_CYCLE值变化,占空比和周期同时变化,以验证AD转换准确度

while(1)

{

PWM_CYCLE=GetADC();                                //进行AD转换,并把AD转换结果当成PWM周期,应该是电压越大,周期越长

for(i=0;i<10;i++)

_delay(200000);                                        //延时2秒,以便观察快闪的情况

if(GetADC() >2000)

LED_Mode = FAST;

else

LED_Mode = SLOW;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值