资源简介
利用51单片机的两个计数器测频率 可对1~40KHZ的信号进行精确测量,误差小于1/65536.

代码片段和文件信息
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uchar iuchar j) //延时子程序延时时间为 i*(j*8+6)+10 us
{
while(i--)
while(j--);
}
//以下为测频子程序
sbit OnOff=P1^3; //74LS74 的D端
sbit Reset=P1^4; //74LS74 的R端异步置0
sbit flag=P3^2; //用flag作为一次测量数据完成与否的标志
uchar n;
uchar pinlv[11];
float N1N0;
unsigned long Fx;
void cepin()//测频程序
{
n=0; //n用于记录T0的溢出次数
TMOD=0x59; //设定89C51两个计数器的工作方式T1工作于定时模式T0工作于计数模式均为方式1T0的门控位置1
TH0=0; //两个计数器都置初值为0
TL0=0;
TH1=0;
TL1=0;
EA=1; //总中断允许
ET0=1; //T0中断允许
Reset=0; //将 74LS74 Q端置0定时器T0不工作;同时 Q非 置1 74LS02 关闭T1不对被测信号计数
OnOff=0; //将 74LS74 D端置0以使D和Q保持一致这样即使 74LS74 的CLK有效也不改变Q的状态
delay(128); //延时约1 ms以完成上面两个指令
Reset=1; //74LS74 的R端置1清0无效
TR0=1; //T0计时开
TR1=1; //T1计时开
OnOff=1; //将 74LS74 D端置1使D和Q相异一旦 74LS74 的CLK有效Q即为1(T0定时开始)Q非 为0(T1计时开始)
while(flag==0); //从将 74LS74 D端置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计数器中的值(注意N1N0都为float型这样计算结果准确度高)
N0=n*65536+TH0*256+TL0; //取T0计数的总值
}
}
void timer0() interrupt 1 using 1 //T0中断服务
{
n++; //T0记满65535之后n加1以确定一次测量中T0的总定时时间
OnOff=0; //将 74LS74 D端置0待 74LS74 的CLK下次有效Q非 为1(T1计时结束)Q即为0(T0定时结束)
}
void PinlvtoStr()
{
Fx=N1*1000000/N0*100000; //被测结果的实际值为N1*1000000/N0,但为了显示5位小数,故有 *100000
pinlv[0]=Fx/1000000000;
Fx=Fx%1000000000;
pinlv[1]=Fx/100000000;
Fx=Fx%100000000;
pinlv[2]=Fx/10000000;
Fx=Fx%10000000;
pinlv[3]=Fx/1000000;
Fx=Fx%1000000;
pinlv[4]=Fx/100000;
Fx=Fx%100000;
pinlv[5]=0x2e;
pinlv[6]=Fx/10000;
Fx=Fx%10000;
pinlv[7]=Fx/1000;
Fx=Fx%1000;
pinlv[8]=Fx/100;
Fx=Fx%100;
pinlv[9]=Fx/10;
pinlv[10]=Fx%10;
}
//以上为测频子程序
//以下为1602显示子程序
sbit DS1602_RS=P1^0;
sbit DS1602_RW=P1^1;
sbit DS1602_EN=P1^2;
void Write1602_com(uchar com)
{
P0=com;
DS1602_RS=0; //RS为0输入指令
DS1602_RW=0; //向LCD写入(指令或数据)
DS1602_EN=1; //以下3行产生一个EN下降沿以供1602执行指令
delay(15); //该延时不可省略具体延时长短可由调试确定
DS1602_EN=0;
}
void Write1602_data(uchar dat)
{
P0=dat;
DS1602_RS=1; //RS为1输入数据
DS1602_RW=0; //向LCD写入(指令或数据)
DS1602_EN=1; //以下3行产生一个EN下降沿以供1602执行输入
delay(15); //该延时不可省略具体延时长短可由调试确定
DS1602_EN=0;
}
void init1602() //初始化1602
{
Write1602_com(0x38); //数据总线为8位显示两行5*7点阵
Write1602_com(0x0c); //显示功能开无光标不闪烁
Write1602_com(0x06); //写入新数据后光标右移
Write1602_com(0x01); //清除液晶显示器
}
void displaypinlv() //显示频率
{
uchar i;
Write1602_com(0x80);
for(i=0;i<11;i++)
{
if(i!=5)
Write1602_data(pinlv[i]+0x30);
else
Write1602_data(pinlv[i]);
}
}
void main()
{
init1602();
while(1)
{
cepin();
PinlvtoStr();
displaypinlv();
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8781 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd
文件 3638 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd.c
文件 113911 2009-11-29 18:37 等精度测频-LCD\djdcp-lcd.DSN
文件 4833 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd.hex
文件 66 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd.lnp
文件 31380 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd.LST
文件 12565 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd.M51
文件 8866 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd.OBJ
文件 1055 2009-09-02 13:53 等精度测频-LCD\djdcp-lcd.Opt
文件 357 2009-09-02 13:53 等精度测频-LCD\djdcp-lcd.plg
文件 742 2009-11-29 18:37 等精度测频-LCD\djdcp-lcd.PWI
文件 2211 2009-08-15 21:11 等精度测频-LCD\djdcp-lcd.Uv2
文件 44 2009-09-02 13:52 等精度测频-LCD\djdcp-lcd.__i
文件 1056 2009-09-01 23:46 等精度测频-LCD\djdcp-lcd_Opt.Bak
文件 0 2009-08-15 21:06 等精度测频-LCD\djdcp-lcd_Uv2.Bak
文件 113945 2009-09-07 15:17 等精度测频-LCD\Last Loaded djdcp-lcd.DBK
文件 6376 2005-03-22 15:22 等精度测频-LCD\STARTUP.A51
文件 14049 2009-08-15 21:08 等精度测频-LCD\STARTUP.LST
文件 749 2009-08-15 21:08 等精度测频-LCD\STARTUP.OBJ
目录 0 2009-11-29 18:37 等精度测频-LCD
----------- --------- ---------- ----- ----
324624 20
相关资源
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- fpga实现频率测量
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
评论
共有 条评论