标题: 简易频率计问题 [打印本页]
作者: anran0131 时间: 2015-4-14 09:42
标题: 简易频率计问题
最近在做数字频率计,用的AT89C51单片机,选用的系统时钟为24M,T0定时,T1计数。不知道为什么出不来,麻烦大家帮看看。以下是程序和图:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0; //引脚定义
sbit RW=P2^1;
sbit E=P2^2;
sfr LCDDATA=0x80; //LCD数据总线定义为P0口
sbit RDY=LCDDATA^7; //就绪BF线,低电平有效
extern void lcd_cmd(uchar cmd) //写指令到LCD
{
LCDDATA=cmd;
RS=0;
RW=0;
E=1;
_nop_();
E=0;
while(1)
{LCDDATA=0xff;
RS=0;
RW=1;
E=0;
_nop_();
E=1;
if(RDY==0) break;
}
}
extern void lcd_data(uchar dat) //写数据到LCD
{LCDDATA=dat;
RS=1;
RW=0;
E=1 ;
_nop_();
E=0;
while(1)
{LCDDATA=0xff;
RS=0;
RW=1;
E=0;
_nop_();
E=1;
if(RDY==0) break;
}
}
extern void init_lcd(void) //初始化LCD
{lcd_cmd(0x01);
lcd_cmd(0x3c);
lcd_cmd(0x0C);
}
extern void disp_str(uchar x, uchar y,uchar *p) //字符串显示
{if(x==0)
lcd_cmd(0x80+ y);
else
lcd_cmd(0xc0+ y);
while(*p)
lcd_data(*p++);
}
#include <reg51.h>
unsigned char time1_H,time1_L; //T1定时初值
unsigned char cont_25; //25ms计数器
unsigned char time0_H,time0_L; //T0当前计数值
unsigned char T0_num = 0; //T0溢出计数器
unsigned long fdata; //频率
unsigned char flag_1s=0x00; //1s到标志
void delay_s (unsigned char n) //延时函数
{ unsigned char i;
for( i=0;i<n;i++);
}
void Time1_int(void) interrupt 3
{
TH1=time1_H; //T1定时25ms到,重装初值
TL1=time1_L;
cont_25++; //25ms计数器+1
if(cont_25>39)
{ cont_25=0; //25ms计数器清0
TR0=0;
time0_H=TH0; //1s到读出当前计数值
time0_L=TL0;
TH0=0;TL0=0; //T0重新清0
TR0=1;
fdata=(time0_H*256+time0_L)+T0_num*65536; //计算频率
T0_num=0; //T0溢出次数清0
flag_1s=1;
}
}
void Time0_int(void)interrupt 1
{T0_num++; //溢出计数器增1
}
void t0_t1_init(void) //定时器T0、T1初始化函数
{floatx;
unsigned int y,z;
TMOD=0x15; //T1定时,T0计数
x=12/24.00;
y=25000/x;
z=65536-y;
time1_H=z/256;
time1_L=z%256;
TH1=time1_H;
TL1=time1_L;
TR1=1;
TH0=0;
TL0=0;
TR0=1;
}
void main(void)
{unsignedchar i;
unsignedchar str[6]={0,0,0,0,0,0,};
init_lcd();
t0_t1_init();
ET1=1;
ET0=1;
EA=1;
cont_25=0;
T0_num=0;
flag_1s=0;
disp_str(0,5,"Frequencyis:");
while(1)
{if(flag_1s== 1)
{for(i=6;i>0;i--)
{str[i-1]=fdata%10+0x30;
fdata=fdata%10;
}
disp_str(1,5,str);
flag_1s=0;
}
delay_s(200);
}
}
-
0414.PNG
(24.02 KB, 下载次数: 101)
-
-
0413xin.rar
16.41 KB, 下载次数: 20
proteus电路图
作者: superjiangzhen 时间: 2015-4-14 11:06
LCD1602频率计+PROTEUS仿真+51单片机源程序
http://www.51hei.com/bbs/forum.p ... 0&fromuid=72643
(出处: 单片机论坛)
楼主可以参考一下这资料
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |