完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 snowolf-lee 于 2012-9-6 11:13 编辑
//功能:实现捕捉完成频率测量功能 //具体设置:ccp1con=00000101上升沿捕捉; #include #include #define uchar unsigned char; #define uint unsigned int; void init(); void interrupt int_ccp();//中断 unsigned int hz;//频率 unsigned char n1,n2,n3,n4,n5; void disp();//显示 void delay(int n); unsigned int p,q,tm,count,flag=0; const int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void main() { init(); while(1) { disp();//delay(1); } } void init()//初始化 { TRISC=0;PORTC=0; TRISC2=1;TRISB=0;TRISD=0; TMR1L=0X00; TMR1H=0X00; CCPR1L=0; CCPR1H=0; CCP1CON=0B00000111;//16个采样一次 PIR1=0;//标志位清零 PIE1=0X05;//使能 INTCON=0XC0;//总中断打开 T1CON=0X01; //PORTC=0X01; } void interrupt int_ccp() { GIE=0; if(TMR1IF==1) { TMR1IF=0; TMR1L=0; TMR1H=0; count++; } if(CCP1IF==1); { CCP1IF=0; flag=!flag; if(flag==1) { TMR1L=0; TMR1H=0; count=0; } else { PORTC=0X01; tm=CCPR1H<<8|CCPR1L; hz=(count*65534+tm)/4000000; hz=15/hz; } } TMR1ON=1; GIE=1; } void disp() { n1=hz/10000; n2=hz%10000/1000; n3=hz%1000/100; n4=hz%100/10; n5=hz%10; PORTB=0xff; PORTD=table[n1]; RB1=0; delay(5); PORTD=table[n2]; RB1=1; RB2=0; delay(5); PORTD=table[n3]; RB2=1; RB3=0; delay(5); PORTD=table[n4]; RB3=1; RB4=0; delay(5); PORTD=table[n5]; RB4=1; RB5=0; delay(5); } void delay(int n) { uint p,q; for(p=n;p>0;p--) for(q=110;q>0;q--); } |
|
相关推荐
2 个讨论
|
|
只有小组成员才能发言,加入小组>>
请问一个迭代法图形二值化的程序代码把宽改成240之后整个屏幕不显示是什么原因?
2597 浏览 0 评论
2565 浏览 1 评论
1809 浏览 1 评论
1956 浏览 2 评论
2517 浏览 2 评论
535浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-10 20:01 , Processed in 0.563363 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191