频率计的问题啊
答案:1 悬赏:50 手机版
解决时间 2021-07-26 05:50
- 提问者网友:一抹荒凉废墟
- 2021-07-26 00:48
在么 有完整的图么
最佳答案
- 五星知识达人网友:枭雄戏美人
- 2021-07-26 02:19
帮你调试一个,已测试能用,脉冲从T1输入。但这只是显示TL1的内容,TL1是8位寄存器,可以计256个脉冲,如果想计至TH1(可以计至65536个脉冲),请联系,为了便于手动输入脉冲,程序里计数闸门时间设置为10秒(200次),你自己根据需要修改吧。
// 89C52@12M
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint num,f;
uchar a,b;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z)//延时子函数,z数字代表延时是多少毫秒
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge)//显示子函数
{
dula=1;
P0=table[bai];//送百位段选数据
dula=0;
P0=0xff;//消隐
wela=1;
P0=0xfe;//送百位位选数据
wela=0;
delay(5);//延时5mS
dula=1;
P0=table[shi];//送十位段选数据?
dula=0;
P0=0xff;//消隐
wela=1;
P0=0x7d;//送十位位选数据?
wela=0;
delay(5);//延时5mS
dula=1;
P0=table[ge];//送个位段选数据
dula=0;
P0=0xff;//消隐
wela=1;
P0=0xfb;//送个位选数据
wela=0;
delay(5);//延时5mS
}
void main()
{
uchar A1,A2,A3;
num=0;
f=0;
TMOD=0xc0;//定时器T0,方式0
TH0=(65536-50000)/256; // 定时初值为50mS
TL0=(65536-50000)%256; // 定时初值为50mS
EA=1;
TR0=1;
ET0=1;
while(1)
{
b=TL1;
A1=b/100; // 分离百位
A2=b%100/10; // 分离十位
A3=b%10; // 分离个位
display(A1,A2,A3);
}
}
void T0_time() interrupt 1// 1是T0中断序号,T1中断序号为3 。
{
TH0=(65536-50000)/256; // 定时初值为50mS
TL0=(65536-50000)%256; // 定时初值为50mS
num++;
TR1=1; //起动计数器1
if(num==200) //200次,即10秒。
{
num=0;
TR1=0;
TH1=0;
TL1=0;
}
}
// 89C52@12M
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint num,f;
uchar a,b;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z)//延时子函数,z数字代表延时是多少毫秒
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge)//显示子函数
{
dula=1;
P0=table[bai];//送百位段选数据
dula=0;
P0=0xff;//消隐
wela=1;
P0=0xfe;//送百位位选数据
wela=0;
delay(5);//延时5mS
dula=1;
P0=table[shi];//送十位段选数据?
dula=0;
P0=0xff;//消隐
wela=1;
P0=0x7d;//送十位位选数据?
wela=0;
delay(5);//延时5mS
dula=1;
P0=table[ge];//送个位段选数据
dula=0;
P0=0xff;//消隐
wela=1;
P0=0xfb;//送个位选数据
wela=0;
delay(5);//延时5mS
}
void main()
{
uchar A1,A2,A3;
num=0;
f=0;
TMOD=0xc0;//定时器T0,方式0
TH0=(65536-50000)/256; // 定时初值为50mS
TL0=(65536-50000)%256; // 定时初值为50mS
EA=1;
TR0=1;
ET0=1;
while(1)
{
b=TL1;
A1=b/100; // 分离百位
A2=b%100/10; // 分离十位
A3=b%10; // 分离个位
display(A1,A2,A3);
}
}
void T0_time() interrupt 1// 1是T0中断序号,T1中断序号为3 。
{
TH0=(65536-50000)/256; // 定时初值为50mS
TL0=(65536-50000)%256; // 定时初值为50mS
num++;
TR1=1; //起动计数器1
if(num==200) //200次,即10秒。
{
num=0;
TR1=0;
TH1=0;
TL1=0;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯