7815

帖子

56

TA的资源

裸片初长成(中级)

21
 

回复 20楼 huo_hu 的帖子

谁说我不是计数方式......
此帖出自51单片机论坛
个人签名

强者为尊,弱者,死无葬身之地

 

回复

4008

帖子

0

TA的资源

版主

22
 

回复 21楼 辛昕 的帖子

看错,是没用中断的

51的16位定时模式貌似读不出THTL,是这个原因所以没用中断的吗?

用pca应该可以;

-----晕倒,我的信号源有问题

[ 本帖最后由 huo_hu 于 2011-10-11 16:13 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

23
 

_Justin

(*^__^*) 嘻嘻……,看着有意思,回头做做啊,不过 我这没有实物,仿真应该可以吧。。。。。。
此帖出自51单片机论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

24
 

回复 23楼 _Justin 的帖子

谁说我没用中断,,,,,,
我用的外部中断和定时器联动的方式。
此帖出自51单片机论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

4008

帖子

0

TA的资源

版主

25
 

回复 楼主 辛昕 的帖子

我的51测频1602显示程序放新贴里了,用了stc的1T定时,你看能用不
此帖出自51单片机论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

26
 

_Justin

贴着玩。。。。
1.测量仪硬件
主要包括lc三点式振荡器,单片机,数码管
2.编程
1)数码管以及定时器初始化
2)延时打开终端测量l1和c1振荡器的频率f1并显示
3)闭合几点起,并联c2并延时,然后测量f2
3)计算l1和c1的值,断开标准电容c2
4)延时等待被测信号器件接好后,再次测量f2
5)检测c_l测试切换,为1测量电容,为0测电感(c=(f1*f1/f2*f2-1)*c1      l=(f1*f1/f2*f2-1)*l1   )
此帖出自51单片机论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

27
 

_Justin


贴程序。。。。总感觉误差有点大,而且更让人蛋疼的是我还不知道。。哈哈
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define c2 1000
sbit bep=P3^7;     //蜂鸣器
sbit rel=P3^2;           //继电器
sbit chk=P3^3;           //测试按钮
sbit c_l=P3^4;           //c_l测试切换
sbit frq=P3^5;           //T1计数输入
ulong f1=0;
ulong f2=0;
ulong cnt_t0=0;
ulong cnt_t1=0;
uint ge,shi,bai,qian,wan,shiwan;
ulong c1;
ulong l1;
code uchar table[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x3f};
//延时函数
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
//led初始化函数
void init_led()
{
        P2=0;
        P0=0;
        delay(5);
}
//定时器计数器初始化函数
void init_inter()
{
        TMOD=0X51;     //定时器0工作方式1;计时器1工作方式1
        TH0=-(50000/256);
        TL0=-(50000%256);
        TH1=0;
        TL1=0;
        TR0=1;
        TR1=1;
        ET0=1;
        ET1=1;
        delay(5);
}
//数码管计算
void calc_smg(uint f)
{
        shiwan=f/100000;
        wan=f%100000/10000;
        qian=f%100000/1000;
        bai=f%1000/100;
        shi=f%100/10;
        ge=f%10;
}
//显示函数
void disp(uint ge,uint shi,uint bai,uint qian,uint wan,uint shiwan)
{
        P0=0X01;
        P2=table[shiwan];
        delay(5);

        P0=0X02;
        P2=table[wan];
        delay(5);

        P0=0X04;
        P2=table[qian];
        delay(5);

        P0=0X08;
        P2=table[bai];
        delay(5);

        P0=0X10;
        P2=table[shi];
        delay(5);

        P0=0X20;
        P2=table[ge];
        delay(5);
}
//测量电路频率(采用一秒定时法)
ulong freq()
{
        ulong f;
        EA=1;
        while(cnt_t0<40);
        cnt_t0=0;
        EA=0;
        f=(cnt_t1*65536+TH1*256+TL1);
        TH0=-(50000/256);
        TL0=-(50000%256);
        TH1=0;
        TL1=0;
        return f;
}
//计算c1
void calc_c1()
{
        double temp1;
        temp1=(double)(f2*f2*c2)/(double)(f1*f1-f2*f2);
        c1=(ulong)temp1;
}
void calc_l1()
{
        double temp2;
        temp2=((double)f1*f1*c1)*0.25*3.14*3.14;
        l1=(ulong)temp2;
}
//计算cx并用数码管显示
void calc_cx()
{
        ulong cx;
        double temp3;
        temp3=((double)f1*f1/(double)f2*f2-1)*c1;
        cx=(ulong)temp3;
        calc_smg(cx);
        disp(ge,shi,bai,qian,wan,shiwan);       
}
//计算lx并用数码管显示
void calc_lx()
{
        ulong lx;
        double temp4;
        temp4=((double)(f1*f1)/(double)(f2*f2)-1)*l1;
        lx=(ulong)temp4;
        calc_smg(lx);
        disp(ge,shi,bai,qian,wan,shiwan);
}
//蜂鸣器响
void bbb()
{
        bep=0;
        delay(1000);
        bep=1;
}

//主函数
void main()
{
        init_led;
        init_inter;
        delay(2000);     //延时2s
       
        f1=freq();           //测量l1和c1振荡器的频率f1并显示
        calc_smg(f1);
        disp(ge,shi,bai,qian,wan,shiwan);
        delay(5);
        bee();     
       
        rel=0;     //闭合继电器并联c2,延时2s后测量f2
        delay(2000);
        f2=freq();
        rel=1;
        delay(5);
        bee();

        calc_c1();
        while(1)
        {
                while(!chk);
                bbb();

                f2=freq();

                if(c_l)
                {
                        calc_cx;
                }
                else
                {
                        calc_lx;
                }
        }               
}
//定时器0
void timer0() interrupt 1
{
//        TR0=0;
        TH0=-(50000/256);
        TL0=-(50000%256);
        cnt_t0++;
//        TR0=1;   
}
void cnt1() interrupt 3
{
        cnt_t1++;
}
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【回帖赢京东卡】说说无线技术那些事儿
即日起—2月28日,参与回帖讨论都有机会赢取【30元京东卡】

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表