27,374
社区成员
发帖
与我相关
我的任务
分享
#include<reg51.h>
#define uchar unsigned char
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^2;
int k = 0;
int f;
uchar count;
uchar tab_freq[]={0,0,0,0,0,0,0}; //频率数组
void delay(int x){ //延时
int i;
for(i=x;i>0;i--);
}
void write_com(char com){ //写指令
P0=com;
RS=0;RW=0;EN=1;
delay(200);
EN=0;
}
void write_dat(char dat){ //写数据
P0=dat;
RS=1;RW=0;EN=1;
delay(200);
EN=0;
}
void lcd_init(){ //初始化
write_com(0x01);
write_com(0x38);
write_com(0x0f);
write_com(0x06);
}
void int_count0() interrupt 1{ //T0计数
k++;
}
void int_time1() interrupt 3{ //T1定时中断函数开始{
TH1=0x3c;
TL1=0xb0; //50MS
count++;
if(count>=20)
{
count=0;
TR0=0; //到1秒T0停止计数
TR1=0;
f=k;
k=0; //T1停止定时
TH1=0x3c;
TL1=0xb0;
}
}
void trans_count() //计算出一秒钟收到的脉冲数量
{
unsigned long int z;
int i;
z = f*65536 + TH0 * 256 + TL0;
if(z>9999999) //最大量程为999999
{z=9999999;}
for(i = 6;i > 0;i--)
{
tab_freq[i]=z%10+'0';
z /= 10;
}
}
void main(){
uchar i;
TMOD = 0x15; //T0为计数模式:方式1 T1为定时模式:方式1
TH0 = 0; //T0计数初始值
TL0 = 0;
TR0=1;
TR1=1;
TH1 = 0x3c; //T1定时初始值
TL1 = 0xb0; //50MS
EA = 1;
ET1 = 1; //允许T1定时中断
ET0 = 1; //允许T0计数中断
lcd_init();
trans_count();
for(i=0;i<7;i++)
{
write_dat(tab_freq[i]); //显示频率值
}
write_dat('H');
write_dat('z'); //显示Hz
delay(20000);
write_com(0x02);
}
#include<reg51.h>
#define uchar unsigned char
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^2;
int k = 0;
int f;
uchar count;
uchar tab_freq[]={0,0,0,0,0,0,0}; //频率数组
unsigned long int z;
void delay(int x){ //延时
int i;
for(i=x;i>0;i--);
}
void write_com(char com){ //写指令
P0=com;
RS=0;RW=0;EN=1;
delay(200);
EN=0;
}
void write_dat(char dat){ //写数据
P0=dat;
RS=1;RW=0;EN=1;
delay(200);
EN=0;
}
void lcd_init(){ //初始化
write_com(0x01);
write_com(0x38);
write_com(0x0f);
write_com(0x06);
}
void int_count0() interrupt 1{ //T0计数
k++;
}
void int_time1() interrupt 3{ //T1定时中断函数开始{
TH1=0x3c;
TL1=0xb0; //50MS
count++;
if(count>=20)
{
count=0;
TR0=0; //到1秒T0停止计数
TR1=0;
f=k;
k=0; //T1停止定时
z = f*65536 + TH0 * 256 + TL0;
if(z>9999999) //最大量程为999999
{z=9999999;}
TH1=0x3c;
TL1=0xb0;
TR0=1;
TR1=1;
}
}
void trans_count() //计算出一秒钟收到的脉冲数量
{
int i;
for(i = 6;i > 0;i--)
{
tab_freq[i]=z%10+'0';
z /= 10;
}
}
void main(){
uchar i;
TMOD = 0x15; //T0为计数模式:方式1 T1为定时模式:方式1
TH0 = 0; //T0计数初始值
TL0 = 0;
TR0=1;
TR1=1;
TH1 = 0x3c; //T1定时初始值
TL1 = 0xb0; //50MS
EA = 1;
ET1 = 1; //允许T1定时中断
ET0 = 1; //允许T0计数中断
lcd_init();
while(1)
{
trans_count();
for(i=0;i<7;i++)
{
write_dat(tab_freq[i]); //显示频率值
}
write_dat('H');
write_dat('z'); //显示Hz
write_com(0x02);
delay(20000);
}
}
void main(){
uchar i;
TMOD = 0x15; //T0为计数模式:方式1 T1为定时模式:方式1
TH0 = 0; //T0计数初始值
TL0 = 0;
TR0=1;
TR1=1;
TH1 = 0x3c; //T1定时初始值
TL1 = 0xb0; //50MS
EA = 1;
ET1 = 1; //允许T1定时中断
ET0 = 1; //允许T0计数中断
lcd_init();
while(1)
{
trans_count();
for(i=0;i<7;i++)
{
write_dat(tab_freq[i]); //显示频率值
}
write_dat('H');
write_dat('z'); //显示Hz
delay(20000);
write_com(0x02);
}
}
void main(){
uchar i;
TMOD = 0x15; //T0为计数模式:方式1 T1为定时模式:方式1
TH0 = 0; //T0计数初始值
TL0 = 0;
TR0=1;
TR1=1;
TH1 = 0x3c; //T1定时初始值
TL1 = 0xb0; //50MS
EA = 1;
ET1 = 1; //允许T1定时中断
ET0 = 1; //允许T0计数中断
lcd_init();
while(1)
{
trans_count();
for(i=0;i<7;i++)
{
write_dat(tab_freq[i]); //显示频率值
}
write_dat('H');
write_dat('z'); //显示Hz
delay(20000);
write_com(0x02);
}
}