频率计成功程序.doc_第1页
频率计成功程序.doc_第2页
频率计成功程序.doc_第3页
频率计成功程序.doc_第4页
频率计成功程序.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机C程序/buffer7为最左边的数码管,buffer0为最右边的数码管/P2.7为CPLD中count的清零信号,P2.6-P2.0对应段码g-a/P0.7-P0.0对应从左到右#include void delay() /延时子函数 int i; for(i=0;i1;i+); void longdelay() long int i; for(i=0;i500;i+);/长延时 void display_duan(int m)/子函数,确定段码 switch(m)/待显示数字 case 0:P2=0x3f; break; /显示0,高电平有效,P2.7用于控制CPLD,低电平有效 case 1:P2=0x06; break; case 2:P2=0x5b; break; case 3:P2=0x4f; break; case 4:P2=0x66; break; case 5:P2=0x6d; break; case 6:P2=0x7d; break; case 7:P2=0x07; break; case 8:P2=0x7f; break; case 9:P2=0x67; /显示9 void display_wei(int x,int y) /子函数,确定位码 及 调用段码函数 P0=0xff; /全灭,防止显示邻位段码 display_duan(x);/嵌套调用,传送段码 P0=(1y); /位选信号为低电平有效,从右到左选通 void main() int j; bit A1,A2;/用于检测A点clk状态 int buffer8; /用于记录从CPLD中读取的数据 A2=0; /初始化 while(1) /无穷扫描 A1=A2; /新值往后传送成为旧值 delay(); /延时,防止在clock边沿连续读取 A2=P1&0x80; /读取P1.7(A点)状态/A点上升沿或维持电平时单片机显示上次数据 if(A1=0&A2=0)|(A1=1&A2=1)|(A1=0&A2=1) for(j=0;j8;j+)/动态显示 display_wei(bufferj,j); P1=0xff; else /A点下降沿时单片机要实现数据传输等功能 P2=P2&0x7f; delay(); /延时,让CPLD中count值传送到选择器/初始化P1.6-P1.4,发送到选择器中取值 P1=0x0f; /送出地址0且写一 delay();/等待选择器输出数据 buffer0=P1&0x0f; P1=0x1f;/送出地址1且写一 delay();/等待选择器输出数据 buffer1=P1&0x0f; P1=0x2f;/送出地址2且写一 delay();/等待选择器输出数据 buffer2=P1&0x0f; P1=0x3f; /送出地址3且写一 delay();/等待选择器输出数据 buffer3=P1&0x0f; P1=0X4f;/送出地址4且写一 delay();/等待选择器输出数据 buffer4=P1&0x0f; P1=0X5f;/送出地址5且写一 delay();/等待选择器输出数据 buffer5=P1&0x0f; P1=0X6f;/送出地址6且写一 delay();/等待选择器输出数据 buffer6=P1&0x0f; P1=0X7f;/送出地址7且写一 delay();/等待选择器输出数据 buffer7=P1&0x0f; /至此完成数据传送,下段进行数据转换编码 for(j=0;j0.8Hz,80%占空比always (posedge clock) begin if(clk=1) /高电平期间 begin if(clock_to_clk!=8000000)/未满1S clock_to_clk=clock_to_clk+1;/加一 else begin clock_to_clk=0;/重置 clk=0;/变为低电平 end endelse if(clk=0)/低电平期间 begin if(clock_to_clk!=2000000)/未满0.25Sclock_to_clk=clock_to_clk+1;/加一else begin clock_to_clk=0;/重置 clk=1;/变为高电平end end end/计周期数always (negedge sig) / sig频率大于clr_count时用sig作为敏感信号即可 begin if(clr_count=1)/单片机清零信号 count=0;/CPLD中计数值清零 else if(clk=1)/若闸门开启,以十进制记录周期数 begin count4:1=count4:1+1; if(count4:1=10) begin count4:1=0; count8:5=count8:5+1;/ end if(count8:5=10) begin count8:5=0; count12:9=count12:9+1;/ end if(count12:9=10) begincount12:9=0;count16:13=count16:13+1;/ end if(count16:13=10) begincount16:13=0;count20:17=count20:17+1;/ end if(count20:17=10) begincount20:17=0;count24:21=count24:21+1;/ end if(count24:21=10) begincount24:21=0;count28:25=count28:25+1;/ end if(count28:25=10) begincount28:25=0;count32:29=count32:29+1; end end end end end end end endendalways (address3:1)/单片机发来取数据请求 begin if(clk=0)/仅在停止计数时单片机才会取数据 begin case (address3:1) 0:data4:1=count4:1; 1:data4:1=count8:5; 2:data4:1=count12:9; 3:data4:1=count16:13; 4:da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论