找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

小白请教单片机测量两个脉冲产生前后间隔问题,请大神们指点

查看数: 2335 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-30 19:12

正文摘要:

大家好,我最近自学51单片机,新手小白一个。我想用89C52实现下面功能:利用单89C52两个外部中断测输入的两个先后产生的单脉冲发生产间隔,也就是图中CH1输入脉冲到CH2输入脉冲的间隔时间,利用数码管显示出来,两个 ...

回复

ID:18297 发表于 2020-5-31 12:03
1、采用的共阳极数码管,P1是段码,P2是位选。
2、检测INT0,INT1的下降沿间隔。输出数字,100us输出100,使用定时器0检测间隔时间。最大检测65535us
ID:18297 发表于 2020-5-31 12:00
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
                                                                                                //        0    1    2    3    4     5   6    7    8   9  
uchar code Duan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};         //??0-9
uchar code wei[]={1,2,4,8};  //
uchar Data_buffer[4];
uchar disp_num=0;
uint time=0;
uint time_count=0;
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
       for(y=110;y>0;y--);
}
void disp_change(uint data_change)  
{
        Data_buffer[0]=data_change/1000;
        Data_buffer[1]=data_change/100%10;
        Data_buffer[2]=data_change/10%10;
        Data_buffer[3]=data_change%10;
}
void display()  
{
        if(disp_num==0)disp_change(time);
        P1=0;
        P2=wei[disp_num];
        P1=Duan[Data_buffer[disp_num]];
        if(disp_num==3)disp_num=0;
        else disp_num++;       
}
void main()
{
        EX0=0;
        EX1=0;
        EA=1;
        IT0=1;            //
        IT1=1;
        TMOD=0x01;  //
        TH0=0x0;   //100us???
        TL0=0x0;
        TR0=0;
        time=1234;
        EX0=1;
        ET0=1;
        while(1)
        {
                display();
                delay(100);               
        }
}
void zhongduan1()interrupt 0
{
        TR0=1;
        time_count=0;
        EX0=0;
        EX1=1;
}
void zhongduan2()interrupt 2
{
        TR0=0;
        time=TH0*256+TL0-15;
        TH0=0;
        TL0=1;
        EX0=1;
        EX1=0;
}

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表