导航:首页 > 操作系统 > 51单片机频率显示

51单片机频率显示

发布时间:2022-12-11 13:36:26

⑴ 利用51单片机设置简易频率计显示很慢的原因

带不动。传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行较慢,而且测量频率的范围较小。利用51单片机设置简易频率计显示很慢的原因是51单片机系统资源不足带不动,不可控的外部中断频繁触发使得程序无法按正常的逻辑执行。

⑵ 51单片机用定时器计数器测量频率

定时器1对外部脉冲计数时TMOD高4位设置应该是5
因此TMOD=0x51;
以下我的频率计程序:
#include <reg52.h>//因没用到STC12C5410专有特殊功能寄存器,此处用52或51的头文件均可
#define unit unsigned int
#define uchar unsigned char
//定义以I/O口的功能
sbit beiguang=P3^2;//液晶屏背光
sbit rs=P1^3;//液晶屏写选择,0命令 1数据
sbit rw=P1^4;//液晶屏读写选择
sbit lcden=P1^5;//液晶屏使能
sbit fm=P1^7;//蜂鸣器

#define db P2 //定义P2为数据输出口,写数据时用db代替P2,增加液晶屏程序的通用性

//更改硬件接线时,只更改此处,而不必去更改液晶屏读写子程序
uchar aa,bb,cc;//变量声明
unit dd,ee;
void Delay1ms(unsigned int i) //1ms延时程序

{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化设置

{
TMOD=0x15;//定时器0作为计数器,定时器1作为定时器用
TH0=0;//计数器清0
TL0=0;
EA=1;//开总中断
ET1=1;//允许定时器1中断
TH1=0x4c;
TL1=0x5c;
TR0=1;//启动计数器
TR1=1;//启动定时器
aa=0;
}
void write_com(uchar com)//向液晶屏写命令

{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏写数据

{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
beiguang=0;
rw=0;
write_com(0x38);
Delay1ms(10*12);
write_com(0x0f);
Delay1ms(10*12);
write_com(0x06);
Delay1ms(10*12);
write_com(0x01);
Delay1ms(10*12);
}
void display4(unsigned int number) //单行多位显示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分离出万,千,百,十,个,对于int型数据,最大不超过65535
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;
write_com(0x80);//第1个数据的位置设定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//写数据
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);

write_com(0x87);//第6个数据'H'的位置,中间空85和86 二格
write_date('H');
Delay1ms(10);
write_date('z');
Delay1ms(10);
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;//0.5S的计数值
ee=2*dd;//换算为1秒钟的计数值
if(aa==1)
{
if(TH0>12)//预判断,50ms内TH0>12,1s内计数值将超过可计数的最大值65535
fm=0;//报警
}
display4(ee);//显示
fm=1;//报警停止
}
}
void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=0x4c;//11.0592Mhz
TL1=0x5c;
if(aa==10)//中断10次,共0.5S
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动
}
}

⑶ 51单片机电子频率计

建议你去"幸福校园"看看 里面有些样子 你可以参考
前言
传统的数字频率计都是采用纯硬件方式组成(纯数字电路)。它的集成电路(IC)用量较大,因而产品的体积、功耗都较大,生产成本较高。产品定型后不能升级(加入新功能)。而采用单片机和相关可编程智能集成器件制成的现代数字频率计方式情况就不同了,单片机的内核CPU可完成多项工作如计数、读入、译码、驱动和时基的产生等。和纯硬件方式比,它减少了很大一部分的集成电路的用量,还可加入许多的智能操作,这更是纯硬件方式所望尘莫及的。
目前市场上的频率计产品很多,但基本上都是采用专用计数芯片(如ICM7240 , ICM7216) 和数字逻辑电路组成,由于这些芯片本身的工作频率不高(如ICM7240 仅有15MHz 左右) ,从而限制了产品的工作频率的提高, 远不能达到在一些特殊的场合需要测量很高的频率的要求,而且测量精度也受到芯片本身极大的限制。
自从80年代单片机引入我国之后,单片机已广泛地应用于各行各业的电子设计中,使频率计智能化水平在广度和深度上产生了质的飞跃,数字化也成为了电子设计的必由之路. 运用单片机和高速计数器的组合设计频率计,并采用适当的算法取代传统电路,次方法不仅能解决传统频率计结构复杂、稳定性差、精度不高的弊端,而且性能也将大有提高,可实现精度较高、等精度和宽范围频率计的要求;随着单片机技术的不断发展,可以用单片机通过软件设计直接用十进制数字显示被测信号频率。本设计正是基于此技术进行的传统频率计技术改进。

⑷ 51单片机的数字频率计

本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。

1.1数字频率计概述
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用一个1602A LCD显示器动态显示6位数。测量范围从1Hz—10kHz的正弦波、方波、三角波,时基宽度为1us,10us,100us,1ms。用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
点击重新加载
1.2频率测量仪的设计思路与频率的计算

图1 频率测量原理图

频率测量仪的设计思路主要是:对信号分频,测量一个或几个被测量信号周期中已知标准频率信号的周期个数,进而测量出该信号频率的大小,其原理如右图1所示。

若被测量信号的周期为,分频数m1,分频后信号的周期为T,则:T=m1Tx 。由图可知: T=NTo
(注:To为标准信号的周期,所以T为分频后信号的周期,则可以算出被测量信号的频率f。)
由于单片机系统的标准频率比较稳定,而是系统标准信号频率的误差,通常情况下很小;而系统的量化误差小于1,所以由式T=NTo可知,频率测量的误差主要取决于N值的大小,N值越大,误差越小,测量的精度越高。

1.3 基本设计原理

基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
所谓“频率”,就是周期性信号在单位时间(1s)内

⑸ 如何用51单片机测心跳频率

嗯,先不要求程序,你先搭建电路,方案有好几种,有一种比较简单的给你参考一下。
压电陶瓷片可以对低频敏感(焊接要注意,镀层很容易掉,最好用导电胶粘接),可以用于检测心跳,贴在胸口就行,线路引出来,但是这个电压低得很,毫伏级别,你需要找个运算放大器把信号放大,用OP07比较合适,对微弱信号敏感噪声低,经过一级放大后电压可能还低,再找一片OP07做第二级发当,然后后面接一个LM393电压比较,当然你还需要一个电压基准源,超过这个电压则输出1,等于心脏跳了一下,然后你只需要根据两次之间的时间就能算出来一分钟的心跳,不需要检测一分钟,时间测定用51的T0定时器就行了。
祝你成功!

⑹ 设计一个51单片机的数字频率计,要求显示从1—1000HZ,并用7段显码显示

曾做过这个题目,将资料整理了一下,放到了我的公共邮箱.
邮件名是"51单片机频率计"
包括电路图和源程序.在发帖之前验证过,没有问题!
可以测量的频率范围是0~65KHz

邮箱地址:[email protected]
密码是protel
已将你要的文件发到该邮箱~ 请不要删除,谢谢!

⑺ 51单片机频率

MCS-51单片机的工作频率为2-12MHz,当振荡频率为12MHz时,一个机器周期为1us,这个速度应该说是比较快的。

⑻ 51单片机制作简易数字频率计程序

这里有一个四位数码管的频率计,供参考

#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位码
//ucharwei[4]={0XEf,0XDf,0XBf,0X7f};//位的控制端 (开发板)
ucharwei[4]={0X80,0X40,0X20,0X10};//位的控制端 (仿真)
uintz,x,c,v,date; //定义数据类型
uintdispcount=0;
uintlck=0;
uintdisp=0;
/******************************************************************

延时函数

******************************************************************/
voiddelay(uchart)
{
uchari,j;
for(i=0;i<t;i++)
{
for(j=13;j>0;j--);
{;
}
}
}

/**********************************************************************
数码管动态扫描
*********************************************************************/
voidxianshi()
{
/*****************数据转换*****************************/
z=date/1000; //求千位
x=date%1000/100; //求百位
c=date%100/10; //求十位
v=date%10; //求个位

P2=wei[0];
P0=an[z];
delay(50);
P2=wei[1];
P0=an[x];
delay(50);
P2=wei[2];
P0=an[c];
delay(50);
P2=wei[3];
P0=an[v];
delay(50);


}

/*************************************************************************
定时器初值1ms
**************************************************************************/
voidinitTimer(void)
{
TMOD=0x0;
TH0=0xe3;
TL0=0xc;
}

/*************************************************************************
定时器函数
**************************************************************************/
voidtimer0(void)interrupt1
{
TH0=0xe3;
TL0=0xc;
lck++;
if(lck==1000)
{
disp=dispcount;
lck=0;
dispcount=0;
}

}

/*************************************************************************
中断函数
**************************************************************************/
voidint0(void)interrupt0
{

dispcount++;//每一次中断,计数加一

}

/*************************************************************************
主函数
**************************************************************************/
voidmain(void)
{

IT0=1;//INT0下降沿中断
EX0=1;//允许INT1中断
initTimer();//装入初值
TR0=1;
ET0=1;
EA=1;
while(1)

{
date=disp;
xianshi();
}
}

⑼ 51单片机数码管显示CD4060的频率并通过按键更改其频率怎么编程啊(最好汇编)

s1 bit p0.0 ;数码管位定义
s2 bit p0.1
s3 bit p0.2
s4 bit p0.3
s5 bit p0.4
s6 bit p0.5
s7 bit p0.6
s8 bit p0.7

led_data equ p2 ;数码管数据定义

org 00h ;程序开始
jmp main ;主程序开始处

org 030h ;主程序从30H开始
main: MOV sp,#30h ;设置堆栈
lcall rest ;调用初始化程序
lcall pro_8led ;调用数码管显示程序
jmp main ;返回

;********* 初始化程序 **************

rest:MOV a,#00h ;清寄存器
MOV b,#00h ;清寄存器
MOV p0,#0 ;禁止数码管显示
MOV p2,#255 ;
MOV p1,0ffh ;禁止LED显示
clr beep ;禁止蜂鸣器
ret ;返回

;******** 数码管显示程序 ***************
pro_8led:
MOV b,#32 ;一共显示32个数字
clr psw.3 ;重新设置寄存器组
setb psw.4 ;

MOV r0,#00h ;数据显示从0开始
MOV r1,#01h ;数码管从第1个开始
loop:MOV p0,r1 ;点亮当前数码管
MOV a,r0 ;准备第一个数据
MOV dptr,#tab_nu ;获得表头
MOVc a,@a+dptr ;得到第一个数据
MOV led_data,a ;输出到显示数据口

lcall delay ; 500 ms 延时
lcall delay ; 1 s 延时
inc r0 ;准备下一个数据
MOV a,r1 ;准备下一位数码管
rlc a ;设置下一个数码管
jc c1 ;8位全部显示,转移
MOV r1,a ;否则,设置下一位
djnz b,loop ;32个数没有显示完,返回显示
ret ;否则返回主程序

c1: MOV r1,#1 ;8位显示完,重新开始循环
clr c ;设置显示位
djnz b,loop ;32位显示完则返回重新显示
ret ;否则返回到主程序
;************* 数码管显示 *******************************

;************* 软件延时 500ms *****************************
delay: push psw ; 保存原来的寄存器内容
clr psw.3 ;
clr psw.4 ; 设置新的寄存器组
MOV r0,#2 ; 延时参数1
MOV r1,#250 ; 延时参数2
MOV r2,#2 ; 延时参数3
dl1:djnz r0,dl1 ; 延时循环1
MOV r0,#250 ;
dl2:djnz r1,dl1 ; 延时循环2
MOV r0,#240 ;
MOV r1,#248 ;
dl3:djnz r2,dl1 ; 延时循环3
nop ; 定时精度调整
pop psw ; 恢复原来的寄存器
ret ; 返回
;**********************************************************

;**********************************************************
;这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推

tab_nu:
db 0c0h, 0f9h, 0a4h, 0b0h, 99h , 92h , 82h, 0f8h ; 数字0-7 不带小数点代码
db 80h , 90h, 88h , 83h , 0c6h, 0a1h, 86h, 8eh ; 数字8-f 不带小数点代码
db 40h , 79h, 24h , 30h , 19h , 12h , 02h, 78h ; 数字0-7 带小数点代码
db 00h , 10h, 08h , 03h , 46h , 21h , 06h, 0eh ; 数字8-f 带小数点代码

end

⑽ 51单片机测方波频率

用两个定时器,一个作为计数器,一个作为定时器,定时器定时50ms或累计定时100ms,读计数器的值,将所得值乘以20或10即是频率。

阅读全文

与51单片机频率显示相关的资料

热点内容
dvd光盘存储汉子算法 浏览:755
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:142
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:732
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:301
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:141
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:890
app转账是什么 浏览:163