本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
软件设计为:首先对被测信号进行100分频档测量,设置测量时间为500ms,通过p14和p15口为00来控制的,当计数值大于500时,则被测信号频率大于100KHz,则单片机直接把100分频的信号经过计算求出实际的频率值送显示;当计数值小于500时,通过p14和p15口为01,选择10分频档测量,计时为1s,通过单片机计算实际的频率值送显示,当计数值小于100时,通过p14和p15口为01选择直通信号读入单片机,计时为10s,再通过单片机计算吧实际频率值送显示,直通进行软件10倍频测量。为什么一直没有结果?哪位高人帮忙看看呀? 这个问题困惑我好久啦
- #include <reg51.h>
- #define uchar unsigned uchar
- #define uint unsigned uint
- sbit p14=P1^4;
- sbit p15=P1^5;
- uchar count=0; //定义计数变量
- long int t=0;
- long int fre_temp=0;
- long int fre_val=0;
- long int fre=0;
- uint num;
- code unsigned char table[]
- ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- sbit LHJ_A = P0^0; //管脚定义,74HC138(3-8)译码器输入
- sbit LHJ_B = P0^1;
- sbit LHJ_C = P0^2;
- char wei8,wei7,wei6,wei5,wei4,wei3,wei2,wei1;
- /*********宏定义******************************************************/
- #define SMG_1 LHJ_C=0;LHJ_B=0;LHJ_A=0
- //译码器的输入脚,全0为第一位数码管.
- #define SMG_2 LHJ_C=0;LHJ_B=0;LHJ_A=1
- //译码器的输入脚,001为第二位数码管.
- #define SMG_3 LHJ_C=0;LHJ_B=1;LHJ_A=0
- //译码器的输入脚,010为第二位数码管.
- #define SMG_4 LHJ_C=0;LHJ_B=1;LHJ_A=1
- //同上类推
- #define SMG_5 LHJ_C=1;LHJ_B=0;LHJ_A=0
- #define SMG_6 LHJ_C=1;LHJ_B=0;LHJ_A=1
- #define SMG_7 LHJ_C=1;LHJ_B=1;LHJ_A=0
- #define SMG_8 LHJ_C=1;LHJ_B=1;LHJ_A=1
- void init_t(void)
- {
- TMOD=0x01; //T0 工作在方式1 16位计数器
- TH0=(65536-50000)/256; //预先 设定定时器
- TL0=(65536-50000)%256;
- EA=1; //开启 总中断
- ET0=1; //开启定时器 0 中断
- EX0=1; //开外部中断 0
- IT0=0; //设置成 低电平触发方式
- }
- void Delay(unsigned int s)
- {
- unsigned int i;
- for(i=1; i<s; i++);
- for(i=0; i<s; i++);
- }long int read_fre()
- {
- p14=0;
- p15=0;
- while(t<10);//数数 到500ms的时候停止数数
- EX0=0; //关外部中断 0
- TR0=0;
- fre_temp=count/500*1000;
- if(fre_temp>500)
- {
- fre_val=fre_temp*100;
- EX0=1;
- count=0;
- t=0;
- return fre_val;
- }
- if(fre_temp>100&&fre_temp<500)
- {
- p14=0;
- p15=1;
- while(t<20);//一秒数数
- EX0=0; //关外部中断 0
- TR0=0;
- fre_temp=count;
- fre_val=fre_temp*10;
- EX0=1;
- count=0;
- t=0;
- return fre_val;
- }
- if(fre_temp<100)
- {
- p14=1;
- p15=1;
- while(t<200)//数数 时间到10秒
- EX0=0; //关外部中断 0
- TR0=0;
- fre_temp=count/10;
- fre_val=fre_temp;
- EX0=1;
- count=0;
- t=0;
- return fre_val;
- }
- }
- void display(long num1)
- { SMG_1;
- P0=table[num1/10000000];
- Delay(8);
- P0=0;
- SMG_2;
- P0=table[num1/1000000%10];
- Delay(8);
- P0=0;
- SMG_3;
- P0=table[num1/100000%10];
- Delay(8);
- P0=0;
- SMG_4;
- P0=table[num1/10000%10];
- Delay(8);
- P0=0;
- SMG_5;
- P0=table[num1/1000%10];
- Delay(8);
- P0=0;
- SMG_6;
- P0=table[num1/100%10];
- Delay(8);
- P0=0;
- SMG_7;
- P0=table[num1/10%10];
- Delay(8);
- P0=0;
- SMG_8;
- P0=table[num1%10];
- Delay(8);
- P0=0;
- }
- void main(void)
- {
- init_t();
- while(1)
- {
- TR0=1;
- fre=read_fre();
- display(fre);
- EX0=1;
- }
- }
- void main(void)
- {
- init_t();
- while(1)
- {
- fre=read_fre();
- display(fre);
- }
- }
- /*********定时器0入口函数**************************************************/
- void timers() interrupt 0
- {
- count++;
- TR0=1;
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- t++;
- }
- 复制代码
复制代码 |