完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
2.问题 遇到的问题: 1,最开始的时候我找认为2个pwm波用一个定时器1就可以实现,后面仔细阅读数据手册,我认为要两个定时器才能完成,并且其中一个必须是定时器1,因为定时器一可以产生多样化频率,而定时器0,2只能固定几种频率. 2,要让定时器输出pwm波,一定要初始化端口为输出. 3,注意使用定时器1进行频率调节时,对ICR1的初始化不能太靠后,因为ICR1不是双缓冲寄存器. 3.程序 /*
#include char number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; char bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; float percent[]={0,0.85,0.75,0.5,0.4,0.15,0.7,0.5,0.25}; int i; void begin() { PORTB=number[0]; DDRB=0xff; PORTD=0xff; DDRD=0xff; PORTC=0xff; DDRC=0x00; } void frequency(int temporary) { TCCR2=0x1e;//124HZTCNT2=0;OCR2=12;if(temporary==0)//1K{ TCCR1A=0xf2; TCCR1B=0x19; ICR1=11059; TCNT1=0;}else if (temporary==1)//4hz{ TCCR1A=0xf2; TCCR1B=0x1C; ICR1=10800; TCNT1=0; } } void show() { for (i=0;i<8;i++) { if (PINC&bit); else { _delay_ms(10); if (PINC&bit) { continue; } else { PORTB=number[i+1]; while(PINC&bit); if(i>4) { frequency(1); OCR1A=10800*percent[i+1]; } else { frequency(0); OCR1A=11059*percent[i+1]; } break; } }} } int main(void) { begin(); while(1) show(); } |
|
|
|
只有小组成员才能发言,加入小组>>
2549 浏览 0 评论
1147浏览 2评论
746浏览 1评论
499浏览 0评论
265浏览 0评论
428浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:55 , Processed in 1.463276 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号