问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

基于单片机AT89C52频率计,求程序,求助

发布网友 发布时间:2023-10-31 21:25

我来回答

1个回答

热心网友 时间:2024-11-30 06:23

//用定时计数器0作为脉冲计数器,定时器1作为定时器用,定时50ms产生中断
//中断10次后(即0.5s)读计数器0的数据乘2即为所得频率值,适于频率变化较慢的场所
//先进行50ms预判断,若TH0计数值大于12,说明1S内计数值将超过65535(虽0.5S内远不超65535)
//变量ee是无符号整数不能超过65535,为防止出错,则报警
//最大可测频率约65535hz,实际上STC12C系列是1T单片机,11.0592下其最高可计数频率远大于此
#include <reg52.h>
#include <math.h>
#define uint 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;
uint 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);//显示模式16字*2行,5*7点阵,数据口8位
Delay1ms(10*12);
write_com(0x0f);//开显示,显示光标,光标闪烁
Delay1ms(10*12);
write_com(0x06);//写完数据后数据指针和光标位置自动加1
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;//分离出十万,万,千,百,十,个
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=1;//报警
}
display4(ee);//显示
fm=0;//报警停止
}
}

void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=0x4c;//11.0592Mhz
TL1=0x5c;//实际电路振荡频率11.03705Mhz,对TL1修正
if(aa==10)//中断10次,共0.5S
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动计数器
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
青海摇什么时候火的 宋庄镇都有哪些村 唐山多地解除封控管理、静态管理,市民仍需做好哪些防护? 拼多多上面的旗舰店是正品吗 ...尺是20:1的图纸上,应画多少厘米,在比例尺是1:200的图纸上测_百度知... 4x2=8,4x20=8,4x200=800,我发现了:一个因数不变,另外一个因数乘以几,积... 小学三年级数学上册4X2=8,4X20=80,4X200=800我发现:一个因数不变,另... 描写雪的段落优选好句60句 程序员最低学历是多少 电脑不识别独显了怎么办? 西安有什么一本的好大学呢?适合文科的?12 苹果手机更新系统以后特别卡怎么办6 为什么树叶,会变黄?419 在线申请交通银行信用卡 网球世界排名的积分规则是怎样的?3 为什么死人后都要下雨呢8 卡罗拉左前轮颠簸路段有异响怎么办颠簸路段左侧明显6 陕西省排名文科24567名,能上什么样的大学? 推荐一下陕西好的文科大学吧7 陕西有什么好的文科大学4 在一段感情之中,怎么去判断他是不是真心的? ATP,WTA积分规则,那种排名的规则?3 丰田卡罗拉轿车行驶在颠簸路面上左前方发出当当的金属敲击声可能...1 华为手机资料怎么转移到vivo手机?195 丰田卡罗拉行使中有异响 ,怎么办? 卡罗拉左前轮行驶在不平的道路时咕噜咕噜响是怎么回事?减震器没... 交通信用卡办理流程 WTA世界排名积分规则2 地下城与勇士怎么双开?73 怎么把旧手机vivo上的联系人导出到华为手机上?3 数字电视机顶盒要多少钱12 关于网球排名的积分规则10 陕西省有哪些重点大学的文科比较好28 捷达车行驶中前底牌发出响声是什么原因?路好时没有,路不好时有...1 ...做一个基于AT89C51系列的单片机的数字频率计设计,希望大家帮帮忙_百 ... 用单片机设计频率计。急!!! 陶虹徐峥是恩爱夫妻还是貌合神离? 一个家庭里边,要是一死人就爱下雨怎么回事12 请问数字电视机顶盒多少钱一个54 为什么雨砸不死人223 单买数字电视机顶盒价格是多少?78 为何人死了,大多都会下雨呢?18 怎么分辨感情中的男人是认真的还是只是想玩玩? 一段感情中,哪样的肢体语言能清楚对方是不是真心? 快递能寄头发定型水吗? 总有人间一两风出自哪首诗? 在一段恋爱中,怎样就可以判断这个人究竟是不是真的爱你?2 和雅少年和三好学生哪个好?1 gta5,启动游戏乱码 在一段感情中,如何判断一个人是不是在乎自己的呢?2