第10课 利用ccp模块设计频率计

第10课 利用ccp模块设计频率计

ID:1339862

大小:250.50 KB

页数:7页

时间:2017-11-10

第10课 利用ccp模块设计频率计_第1页
第10课 利用ccp模块设计频率计_第2页
第10课 利用ccp模块设计频率计_第3页
第10课 利用ccp模块设计频率计_第4页
第10课 利用ccp模块设计频率计_第5页
资源描述:

《第10课 利用ccp模块设计频率计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第10章利用CCP模块设计频率计10.5程序设计10.5.4程序清单#include#include#include//本程序利用CCP1模块实现一个“简易数字频率计”的功能constchartable[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0xFF};//不带小数点的显示段码表constchartable0[11]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xFF};//带小数点的显示段码表bank3i

2、ntcp1z[11];//定义一个数组,用于存放各次的捕捉值unioncp1{inty1;unsignedcharcp1e[2];}cp1u;//定义一个共用体unsignedcharCOUNTW,COUNT;//测量脉冲个数寄存器unsignedcharCOUNTER,data,k;unsignedcharFLAG@0XEF;#defineFLAGIT(adr,bit)((unsigned)(&adr)*8+(bit))//绝对寻址位操作指令staticbitFLAG1@FLAGIT(FLAG,0);staticbitFLAG2@FLAGIT(FLAG,1);staticbitFL

3、AG3@FLAGIT(FLAG,2);unsignedchars[4];//定义一个显示缓冲数组intT5,uo;doubleRE5;doublepuad5;//spi方式显示初始化子程序voidSPIINIT(){PIR1=0;SSPCON=0x30;SSPSTAT=0xC0;//设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送,与"74HC595,当其//SCLk从低到高跳变时,串行输入寄存器"的特点相对应TRISC=0xD7;//SDO引脚为输出,SCK引脚为输出TRISA5=0;//RA5引脚设置为输出,以输出显示锁存信号FLAG1=0;FLAG2=0;FLAG3=0

4、;COUNTER=0X01;}//CCP模块工作于捕捉方式初始化子程序voidccpint(){CCP1CON=0X05;//首先设置CCP1捕捉每个脉冲的上升沿T1CON=0X00;//关闭TMR1震荡器PEIE=1;//外围中断允许(此时总中断关闭)CCP1IE=1;//允许CCP1中断TRISC2=1;//设置RC2为输入}//系统其它部分初始化子程序voidinitial(){COUNT=0X0B;//为保证测试精度,测试5个脉冲的参数后//求平均值,每个脉冲都要捕捉其上升、下降沿,//故需要有11次中断TRISB1=0;TRISB2=0;TRISB4=1;TRISB5=1;

5、//设置与键盘有关的各口的输入、输出方式RB1=0;RB2=0;//建立键盘扫描的初始条件}//SPI传送数据子程序voidSPILED(data){SSPBUF=data;//启动发送do{;}while(SSPIF==0);SSPIF=0;}//显示子程序,显示4位数voiddisplay(){RA5=0;//准备锁存for(COUNTW=0;COUNTW<4;COUNTW++){data=s[COUNTW];data=data&0x0F;if(COUNTW==k)data=table0[data];//第二位需要显示小数点elsedata=table[data];SPILED(

6、data);//发送显示段码}for(COUNTW=0;COUNTW<4;COUNTW++){data=0xFF;SPILED(data);//连续发送4个DARK,使显示好看一些}RA5=1;//最后给一个锁存信号,代表显示任务完成}//键盘扫描子程序voidkeyscan(){if((RB4==0)

7、

8、(RB5==0))FLAG1=1;//若有键按下,则建立标志FLAG1elseFLAG1=0;//若无键按下,则清除标志FLAG1}//键服务子程序voidkeyserve(){PORTB=0XFD;if(RB5==0)data=0X01;if(RB4==0)data=0X03;P

9、ORTB=0XFB;if(RB5==0)data=0X02;if(RB4==0)data=0X04;//以上确定是哪个键按下PORTB=0X00;//恢复PORTB的值if(data==0x01){COUNTER=COUNTER+1;//若按下S9键,则COUNTER加1if(COUNTER>4)COUNTER=0x01;//若COUNTER超过4,则又从1计起}if(data==0x02){COUNTER=COUNTER-1;//若按下S11键,则COU

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。