基于C8051F020,通过12864进行显示的等精度频率测量,测量范围为1HZ~1MHZ。C8051F020与MCU-51的也没多大的区别,个人感觉最大的区别主要还是管脚配置和晶振,像C8051F020增加的一些AD,DA,一般都不怎么用的。只是个人感觉,作为初学者,我也只能有这么个感受了,呵呵。程序经过调试,原理图也正确。/****************************************74ls02的第一脚接单片机的T1端*对C8051F020进行管脚配置,*配置INT0,T1即可*本程序将INT0配置到P0^0,P0^1接被测频率输入端***************************************/#includeC8051F020Init.h#includeLCD12864.huchartable0[]=测控技术与仪器;uchartable1[]=等精度测量频率;uchartable2[]=HZ;uchartable3[]=2012-08-2218:51;sbitOnOff=P0^2;sbitReset=P0^3;sbitflag=P0^0;ucharn;ucharpinlv[8];floatN1,N0;unsignedlongFx;voidcepin()//测频程序{n=0;//n用于记录T0的溢出次数TMOD=0x59;//设定定时器T0,T1的工作模式,和51单片机一样TH0=0;//置初值TL0=0;TH1=0;TL1=0;EA=1;//总中断允许ET0=1;//T0中断允许Reset=0;//将74LS74Q端置0,定时器T0不工作;同时Q非置1,74LS02关闭,T1不对被测信号计数OnOff=0;//将74LS74D端置0,以使D和Q保持一致,这样,即使74LS74的CLK有效,也不改变Q的状态_delay_ms(1);//延时约1ms,以完成上面两个指令Reset=1;//74LS74的R端置1,清0无效TR0=1;//T0计时开TR1=1;//T1计时开OnOff=1;//将74LS74D端置1,使D和Q相异,一旦74LS74的CLK有效,Q即为1(T0定时开始),Q非为0(T1计时开始)while(flag==0);//从将74LS74D端置1,到74LS74的CLK第一次有效之间,flag即P3^2为0,定时未开始while(flag==1);//74LS74的CLK第一次有效之后,flag即P3^2为1(定时开始),直至定时结束if(flag==0)//flag再次为0,表示本次测量已结束{TR0=0;//T0计时关(要注意,计数及定时的开与关直接由被测信号的上升沿决定,而不是这两个命令)TR1=0;//T1计时关N1=TH1*256+TL1;//取T1计数器中的值(注意N1,N0都为float型,这样计算结果准确度高)N0=n*65536+TH0*256+TL0;//取T0计数的总值}}voidtimer0()interrupt1using1//T0中断服务{n++;//T0记满65535之后,n加1,以确定一次测量中T0的总定时时间OnOff=0;//将74LS74D端置0,待74LS74的CLK下次有效,Q非为1(T1计时结束),Q即为0(T0定时结束)}voidPinlvtoStr(){Fx=N1*2000000/N0*10;//被测结果的实际值为N1*1000000/N0,但为了显示5位小数,故有*100000pinlv[0]=Fx/1000000;Fx=Fx%1000000;pinlv[1]=Fx/100000;Fx=Fx%100000;pinlv[2]=Fx/10000;Fx=Fx%10000;pinlv[3]=Fx/1000;Fx=Fx%1000;pinlv[4]=Fx/100;Fx=Fx%100;pinlv[5]=Fx/10;Fx=Fx%10;pinlv[6]=0x2e;pinlv[7]=Fx;}//以上为测频子程序voiddisplaypinlv()//显示频率{uchari;Write12864_com(0x88);for(i=0;i8;i++){if(i!=6)Write12864_data(pinlv[i]+0x30);elseWrite12864_data(pinlv[i]);}}voidmain(){InitDevice();XBR1=0x0C;XBR2=0x40;InitLCD12864();while(1){LCD12864TextOut(0,0,table0);LCD12864TextOut(0,1,table1);LCD12864TextOut(14,2,table2);LCD12864TextOut(0,3,table3);cepin();PinlvtoStr();displaypinlv();_delay_ms(2);}}等精度测频的D触发器:74LS02的1端接T1端口,D触发器74LS74的Q端接INT0端口,R端和D端分别接P0^3,和P0^2.