版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章利用CCP模块设计频率计10.5程序设计10.5.4程序清单#include#include#include/本程序利用CCP1模块实现一个“简易数字频率计”的功能constchartable11=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0XD8,0 x80,0 x90,0 xFF;/不带小数点的显示段码表constchartable011=0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0 xFF;/带小数点的显示段码表bank3intcp1z11;unioncp1inty1;unsign
2、edcharcp1e2;cp1u;unsignedcharCOUNTW,COUNT;unsignedcharCOUNTER,data,k;unsignedcharFLAG0XEF;/定义一个数组,用于存放各次的捕捉值/定义一个共用体/测量脉冲个数寄存器#defineFLAGIT(adr,bit)(unsigned)(&adr)*8+(bit)/绝对寻址位操作指令staticbitFLAG1FLAGIT(FLAG,0);staticbitFLAG2FLAGIT(FLAG,1);staticbitFLAG3FLAGIT(FLAG,2);unsignedchars4;intT5,uo;doubleR
3、E5;doublepuad5;/spi方式显示初始化子程序voidSPIINIT()/定义一个显示缓冲数组PIR1=0;SSPCON=0 x30;SSPSTAT=0 xC0;设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送,与74HC595,当其/SCLk从低到高跳变时,串行输入寄存器的特点相对应TRISC=0 xD7;TRISA5=0;FLAG1=0;FLAG2=0;FLAG3=0;COUNTER=0X01;/CCP模块工作于捕捉方式初始化子程序voidccpint()CCP1CON=0X05;T1CON=0X00;PEIE=1;CCP1IE=1;TRISC2=1;/系统其它部分初始
4、化子程序voidinitial()COUNT=0X0B;TRISB1=0;TRISB2=0;TRISB4=1;TRISB5=1;RB1=0;RB2=0;/SPI传送数据子程序voidSPILED(data)SSPBUF=data;do;/SDO引脚为输出,SCK引脚为输出/RA5引脚设置为输出,以输出显示锁存信号/首先设置CCP1捕捉每个脉冲的上升沿/关闭TMR1震荡器/外围中断允许(此时总中断关闭)/允许CCP1中断/设置RC2为输入/为保证测试精度,测试5个脉冲的参数后/求平均值,每个脉冲都要捕捉其上升、下降沿,/故需要有11次中断/设置与键盘有关的各口的输入、输出方式/建立键盘扫描的初始
5、条件/启动发送while(SSPIF=0);SSPIF=0;/显示子程序,显示4位数voiddisplay()RA5=0;/准备锁存for(COUNTW=0;COUNTW4;COUNTW+)data=sCOUNTW;data=data&0 x0F;if(COUNTW=k)data=table0data;/第二位需要显示小数点elsedata=tabledata;SPILED(data);/发送显示段码for(COUNTW=0;COUNTW4)COUNTER=0 x01;/若COUNTER超过4,则又从1计起if(data=0 x02)COUNTER=COUNTER-1;if(COUNTER1)
6、if(data=0 x03)FLAG2=1;if(data=0 x04)FLAG2=0;/中断服务程序voidinterruptcp1int(void)CCP1IF=0;cp1u.cp1e0=CCPR1L;cp1u.cp1e1=CCPR1H;cp1zdata=cp1u.y1;CCP1CON=CCP1CONA0X01;data+;COUNT-;/周期处理子程序voidPERIOD()T5=cp1z10-cp1z0;RE5=(double)T5;RE5=RE5/5;/频率处理子程序voidFREQUENCY()PERIOD();RE5=1000000/RE5;COUNTER=0 x04若按下S11
7、键,则COUNTER减1/若COUNTER小于1,则又循环从4计起若按下S10键,则建立标志FLAG2若按下S12键,则清除标志FLAG2/清除中断标志/存储1次捕捉值/把CCP1模块改变成捕捉相反的脉冲沿/求得5个周期的值/强制转换成双精度数求得平均周期,单位为ws/先求周期/周期值求倒数,再乘以1000000,得频率,/单位为HZ/脉宽处理子程序voidPULSE()intpu;for(data=0,puad5=0;data=9;data+)/求得5 个脉宽的和值/求得平均脉宽/先求脉宽 /暂存脉宽值 /再求周期 /求得占空比/SPI 方式显示初始化/CCP 模块工作于捕捉方式初始化/系统
8、其它部分初始化/第一个存储COUNTER 的值/后面的LED 将显示 DARK/调用显示子程序/键盘扫描/存储数组指针赋初值/定时器 1 清 0/清除CCP1 的中断标志,以免中断一打开就进入/中断/中断允许/定时器1 开pu=cp1zdata+1-cp1zdata;puad5=(double)pu+puad5;data=data+2;RE5=puad5/5;/占空比处理子程序voidOCCUPATIONAL()PULSE();puad5=RE5;PERIOD();RE5=puad5/RE5;/主程序main()SPIINIT();while(1)ccpint();initial();if(F
9、LAG2=0)s0=COUNTER;s1=0X0A;s2=0X0A;s3=0X0A;display();keyscan();data=0 x00;TMR1H=0;TMR1L=0;CCP1IF=0;ei();TMR1ON=1;while(1)di();TMR1ON=0;keyscan();if(FLAG1=1)keyserve();if(FLAG2=0)continue;/等待中断次数结束/禁止中断/关闭定时器/键盘扫描/若确实有键按下,则调用键服务程序/如果没有按下确定键,则终止此次循环,/继续进行测量/如果按下了确定键,则进行下面的数值转换和显示工作if(COUNTER=0 x01)FREQ
10、UENCY();/COUNTER=1,则需要进行频率处理if(COUNTER=0 x02)PERIOD();/COUNTER=2,则需要进行周期处理if(COUNTER=0 x03)OCCUPATIONAL();/COUNTER=3,则需要进行占空比处理if(COUNTER=0 x04)PULSE();/COUNTER=4,则需要进行脉宽处理k=5;if(RE51)RE5=RE5*1000;k=0 x00;elseif(RE510)RE5=RE5*1000;k=0 x00;elseif(RE5100)RE5=RE5*100;k=0 x01;elseif(RE51000)RE5=RE5*10;k=0 x02;elseRE5=RE5;u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度生物质能epc工程总承包合同规范3篇
- 二零二五年度文化旅游并购与全域旅游重组合同3篇
- 二零二五年度智慧城市定向技术服务合同范本3篇
- 2025年度网络建设施工合同服务内容扩展3篇
- 二零二五年度智能交通信号系统安装服务协议
- 海南政法职业学院《商业美术插图》2023-2024学年第一学期期末试卷
- 邯郸科技职业学院《创意设计实践》2023-2024学年第一学期期末试卷
- 洪水调解课程设计
- 二零二五年度房屋拆除项目居民意见征询及协调协议3篇
- 运输课课程设计书模板
- 广东省深圳市宝安区2024-2025学年八年级英语上学期1月期末英语试卷(含答案)
- 《招标投标法》考试题库200题(含答案)
- 《交通运输行业安全生产监督检查工作指南 第2部分:道路运输》
- 初二生物期末质量分析及整改措施
- 公交车站台服务规范与安全意识
- 驾驶证学法减分(学法免分)试题和答案(50题完整版)1650
- 山东中医药大学中西医临床(专升本)学士学位考试复习题
- 铁路货场平面设计说明书
- 抽象函数的单调性
- 2019年血站绩效考核标准
- 义务教育语文课程常用字表3500字
评论
0/150
提交评论