单片机/MCU论坛
登录
直播中
jf_94851377
5年用户
54经验值
擅长:EDA/IC设计
私信
关注
[问答]
用单片机设计一个频率计
开启该帖子的消息推送
单片机
频率计
`用
单片机
设计频率计k1按下测高频(采用测频法),k2测低频(测周法),测频法可以但是有时误差很大,测周法不可以,
电路
图代码如下求指点
#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
uchar tab1[]={"The frequency:"}; //???????????????
uchar tab2[]={" 0.000khz"};
uchar tab3[]={" 0hz"};
/*********************lcd????????????**************************************/
***it RS=P2^7;
***it E=P2^6;
***it RW=P2^5;
/**************************??????????????????????**********************************************/
***it k1=P1^0; //????????ò???
***it k2=P1^3; //???????ò???
bit m_flag,t_flag,s_flag;
unsigned char m; //???***????
unsigned long tcount; //??????????????????????
unsigned long Mcount; //?????T0????????
uint
ti
me_count,TMcount,freqt,freqm; //???????????????????
void delay(uchar ms); //???????
void init_timer1(); //?***?????
void init_timer2();
void lcdbegin();
void lcd_init_1(); //lcd?????
void lcd_init_2();
void lcd_wcom(uchar com); //lcdд????
void lcd_wdat(uchar dat); //lcdд????
void lcd_disp1(uchar address,ulong dat);
void lcd_disp2(uchar address,ulong dat);
void main()
{
lcdbegin();
while(1)
{
if(k1==0) //?????
{
lcd_init_1();
init_timer1();
m_flag=1;
}
if(k2==0) //?????
{
lcd_init_2();
t_flag=1;
init_timer2();
}
}
}
void delay(uchar ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=0;j<110;j++);
}
void init_timer1()
{
TMOD=0x15; //?????1??????????0????
TH1=(65536-50000)/256; //???50ms
TL1=(65536-50000)%256;
TH0=0;
TL0=0;
TR0=1; //????????????
TR1=1;
ET0=1;
ET1=1;
EA=1; //?????***?
}
void init_timer2()
{
TMOD=0x01;
TH0=(65536-65535)/256; //???1us
TL0=(65536-65535)%256;
ET0=1; //?????????***?????
EX0=1; //???***?????
IT0=1; //???***???????
EA=1;
}
void int0() interrupt 0
{
TR0=1;
m++;
if(m==2)
{
TR0=0;
EX0=0;
TMcount=(unsigned int)(1000000/(tcount));
freqt=TMcount;
lcd_disp1(0x40,freqt);
tcount=0;
m=0;
}
}
void time0() interrupt 1
{
if(m_flag==1)
{
Mcount++;
}
if(t_flag==1)
{
TH0=(65536-65535)/256;
TL0=(65536-65535)%256;
tcount++;
}
}
void time1() interrupt 3
{
if(m_flag==1)
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time_count++;
if(time_count==20)
{
TR0=0;
TR1=0;
time_count=0;
freqm=Mcount*65536+TH0*256+TL0;
lcd_disp2(0x40,freqm);
Mcount=0;
}
}
}
void lcdbegin()
{
uchar i;
lcd_wcom(0x01);
lcd_wcom(0x38);
lcd_wcom(0x0C);
lcd_wcom(0x06);
lcd_wcom(0x80);
for(i=0;i<16;i++)
lcd_wdat(tab1
);
}
void lcd_init_1()
{
uchar i;
lcdbegin();
lcd_wcom(0xC0);
for(i=0;i<16;i++)
lcd_wdat(tab2
);
}
void lcd_init_2()
{
uchar i;
lcdbegin();
lcd_wcom(0xC0);
for(i=0;i<16;i++)
lcd_wdat(tab3
);
}
void lcd_wcom(uchar com)
{
delay(5);
E=0;RS=0;RW=0;
E=1;
P0=com;
E=0;
}
void lcd_wdat(uchar dat)
{
delay(5);
E=0;RS=1;RW=0;
E=1;
P0=dat;
E=0;
}
void lcd_disp1(uchar address,ulong dat)
{
uint gw,bw,sw,qw;
if(t_flag==1)
{
qw=dat/1000;
bw=dat%1000/100;
sw=dat%1000%100/10;
gw=dat%1000%100%10;
lcd_wcom(0x80+address+0x0A);
if(qw!=0)
{
lcd_wdat(0x30+qw);
}
else
{
lcd_wdat(' ');
}
if(bw!=0)
{
lcd_wdat(0x30+bw);
}
else
{
lcd_wdat(' ');
}
if(sw!=0)
{
lcd_wdat(0x30+sw);
}
else
{
lcd_wdat(' ');
}
lcd_wdat(0x30+gw);
}
}
void lcd_disp2(uchar address,ulong dat)
{
uint gw,sw,bw,qw,ww,sww;
sww=dat/100000;
ww=dat%100000/10000;
qw=dat%100000%10000/1000;
bw=dat%100000%10000%1000/100;
sw=dat%100000%10000%1000%100/10;
gw=dat%100000%10000%1000%100%10;
lcd_wcom(0x80+address+0x06);
if(sww!=0)
{
lcd_wdat(0x30+sww);
}
else
{
lcd_wdat(' ');
}
if(ww!=0)
{
lcd_wdat(0x30+ww);
}
else
{
lcd_wdat(' ');
}
lcd_wdat(0x30+qw);
lcd_wdat('.');
lcd_wdat(0x30+bw);
lcd_wdat(0x30+sw);
lcd_wdat(0x30+gw);
}
`
频率计.zip
(29.01 KB)
(下载次数: 97, 2020-3-17 17:22 上传)
回帖
(3)
小猫猫要吃鱼
2020-3-17 18:27:37
你好!
1、你要测的最高频率是多少?
2、你现有程序,测量误差是多少?
3、测量的误差要求控制在多少范围内?
4、建议以后写程序的时候加上点注释
你好!
1、你要测的最高频率是多少?
2、你现有程序,测量误差是多少?
3、测量的误差要求控制在多少范围内?
4、建议以后写程序的时候加上点注释
举报
王栋春
2020-3-17 21:49:34
楼主最好将程序当中的注释标记一下
楼主最好将程序当中的注释标记一下
举报
小猫猫要吃鱼
2020-3-18 14:06:30
以前完成的频率计,仿真和实物
以前完成的频率计,仿真和实物
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
频率计
谁有能用51
单片机设
计
一
个
高频
频率计
,
用
1602显示?
2015-07-28
4199
怎么实现基于
单片机
的
频率计
的设计?
2021-11-02
1839
求教
单片机
数字
频率计
,范围1~20MHZ
2013-04-23
4490
频率计
的测量范围如何调整
2014-05-01
3299
如何对基于STM32
单片机
的
频率计
进行Proteus仿真呢
2021-11-15
3100
频率计
为什么要分频
2019-08-23
4091
基于AT89C2051的
频率计
2016-07-18
3363
萌新求助,求
一
个
单片机
实现数字
频率计
的方案
2021-11-08
1205
哪位大哥有基于51
单片机
的数字
频率计
的资料啊,不胜感
2012-03-20
3620
怎么弄那个
频率计
2014-06-16
2783
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分