利用555定时器产生一个1KHz的方波,并利用51单片机的定时器/计数器0 1 进行测频,并利用数码管进行显示

#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit CP=P2^1;sbit R=P2^0;sbit T=P3^2;uint num,tt,vollce,flog;uchar wx[8]={0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0 };//共阴数码管位选uchar dx[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//共阴数码管段选uchar table[4]={0,0,0,0}; void delay()//延时函数 { uchar i,j; for(i=1;i>0;i--) for(j=110;j>0;j--); } void pro()//分离函数 { table[0]=vollce/1000; table[1]=(vollce%1000)/100; table[2]=(vollce%100)/10; table[3]=vollce%10; } void display()//显示函数 { uchar i; for(i=0;i<4;i++) { P1=0x00; P2=dx[table[i]]; P1=wx[i]; delay(); } } void pz()//中断配置函数 { R=0; _nop_(); CP=0; _nop_(); R=1; _nop_(); CP=1; _nop_(); T=1; TMOD=0x1e; TH1=(65536-49702)/256; TL1=(65536-49702)%256; IE=0x8a; IT0=1; TR0=1; TR1=1; } void main() { while(1) { pz(); while(flog!=1); TR0=0; TR1=0; pro(); display(); } } void timer1() interrupt 1 //定时器中断 { TH1=(65536-49702)/256; TL1=(65536-49702)%256; tt++; if(tt==20) { tt=0; flog=1; } }最近在看单片机,要求用555定时器产生一个频率为1KHz的方波,然后利用51单片机的定时器T0计数,T1定时,然后用共阴数码管显示出该方波的频率,我们的程序哪里有问题?为什么会无法显示?求大神告诉我原因,最好能帮我改一下,谢谢!

我看你这个程序有多个问题
1、 while(flog!=1); 就是说定时还没到时直接跳过 然后就TR0=0; TR1=0;关闭定时器?关了定时器你还怎么工作啊pz()一直打开定时器 就是说你一个循环就在打开关闭定时器并没有什么软用
2、看不懂你的vollce 在那里工作
3、flog没有清0
4、就算能工作到flog==1时无法运行while下面的程序了
还有很多问题我就不说了 你先一步步来先是1、程序框图 2、正常显示 3、在是计数器定时器

main()
{
同时打开计数器定时器
计数器开始计数
while()
{
display();
}
}
定时器1秒钟到
{
关闭定时器 和计数器
计算频率 计数直应该是TLx+THx*256;
同时打开计数器定时器
}追问

我在里面设置的flog是标志位,进入中断后标志位变1,如果flog不等于1,就等待直到flog=1后再向下进行

追答

少年你没弄明白吧 while(条件) 满足条件运行while循环 flog默认是0 当flog不等于1 满足条件往下执行

算了当我说这么多白说

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-27
你好,请问问题解决了吗