久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1549|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機超聲波測距的數(shù)碼管距離顯示問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:995771 發(fā)表于 2021-12-23 17:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問這個程序初始時,是不是一到T1的定時時間就跑到T1的中斷服務(wù)子程序里了?迷惑的是"數(shù)碼管顯示程序LED4_Display ()"也在T1的中斷服務(wù)子程序里,但這個時候不是才剛剛開始嗎(才發(fā)射超聲波),要想顯示距離,還得往后運行把測得數(shù)值的個十百千位拿出來執(zhí)行LED4_Display ()讓其顯示,但往后運行的時候還怎么再進T1的中斷服務(wù)子程序里執(zhí)行LED4_Display ()?
求教!

這是程序,注釋有點不全,見諒。。
#include <AT89X51.H>
#include <intrins.h>



//-----------------------------------------------------------------------------
// ??????
#define uchar unsigned char

void main (void);                                        // 主函數(shù)
void LED4_Display (void);                        // LED顯示
void LED_OUT(uchar X);                                // LED單字節(jié)串行移位函數(shù)
void Conut(void);

unsigned char code LED_0F[] =
{// 0          1            2          3            4           5          6           7          8           9          A           B          C    D          E    F    -
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};                         // LED字模表
sbit DIO = P1^0;                                //串行數(shù)據(jù)輸入
sbit RCLK  = P1^1;                                //時鐘脈沖信號————上升沿有效
sbit SCLK = P1^2;                                //打入信號————上升沿有效


sbit RX=P2^1;  //ECHO
sbit TX=P2^0;   //TRIG
unsigned int  time=0;
unsigned int  timer=0;
unsigned char posit=0;
unsigned long S=0;
bit      flag =0;
//-----------------------------------------------------------------------------
// 全局變量
uchar LED[4];        //用于LED顯示緩沖


//*****************************************************************************
// 主程序
//
void main (void)
{
    TMOD=0x11;
          TH0=0;
                TL0=0;
                TH1=(65536-200)/256;
                TL1=(65536-200)%256;
                EA=1;
          ET0=1;
                ET1=1;        
                TR1=1;
        
        while(1)
        {
         while(!RX);                //?RX?????
         TR0=1;                            //????
         while(RX);                        //?RX?1?????
         TR0=0;                                //????
     Conut();                        //??
        }

}

void LED4_Display (void)
{
        unsigned char code *led_table;          // 查表指針
        uchar i;
        //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;

        LED_OUT(i);                        
        LED_OUT(0x01);               

        RCLK = 0;
        RCLK = 1;
        

        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;

        LED_OUT(i);               
        LED_OUT(0x02);               

        RCLK = 0;
        RCLK = 1;

        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;

        LED_OUT(i);                        
        LED_OUT(0x04);        

        RCLK = 0;
        RCLK = 1;

        //顯示第4位
        led_table = LED_0F + LED[3];
        i = *led_table;

        LED_OUT(i);                        
        LED_OUT(0x08);               

        RCLK = 0;
        RCLK = 1;
        
        
}

void LED_OUT(uchar X)
{
        uchar i;
        for(i=8;i>=1;i--)
        {
                if (X&0x80) DIO=1; else DIO=0;
                X<<=1;
                SCLK = 0;
                SCLK = 1;
        }
}

void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
        
         S= (long)(time*0.17);     //計算公式
         if((S>=4000)||flag==1) //大于4m或太遠
         {         
          flag=0;
          LED[0]=0;           //??
          LED[1]=0;           //??
          LED[2]=0;           //??
          LED[3]=0;           //??
         }
         else                                                                                 //正常顯示
         {
          LED[3]=S%10000/1000;
          LED[2]=S%1000/100;
          LED[1]=S%100/10;
          LED[0]=S%10/1;
         }
        }
/********************************************************/
  void zd0() interrupt 1                  //T0?????????,??????
  {
    flag=1;                                                         //??????
  }




void int1_dis() interrupt 3
{
                TH1=(65536-200)/256;
                TL1=(65536-200)%256;
                LED4_Display ();
         timer++;
         if(timer>=200)
         {
          timer=0;
          TX=1;                                        //800MS  ??????
          _nop_();  _nop_();  _nop_();
          _nop_();  _nop_();  _nop_();
          _nop_();  _nop_();  _nop_();
          _nop_();  _nop_();  _nop_();
          _nop_();  _nop_();         _nop_();
                _nop_();  _nop_();  _nop_();
                _nop_();  _nop_();  _nop_();
          TX=0;
         }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:584814 發(fā)表于 2021-12-24 08:36 | 只看該作者
一般來說,程序跑的速度比初學(xué)者想象的要快得多得多
回復(fù)

使用道具 舉報

板凳
ID:8222 發(fā)表于 2021-12-24 10:00 | 只看該作者
T1要200個時鐘周期后才能進入中斷,但主程序走一圈不用200時鐘周期。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品综合在线 | 亚洲一区自拍 | 中文字幕在线免费视频 | 九九亚洲精品 | 欧美一区2区三区4区公司二百 | 色综合色综合色综合 | 国产黄视频在线播放 | 91国产精品 | h视频亚洲 | 国产资源在线观看 | 日韩中文字幕在线播放 | 国产精品久久av | 国产精品一区二区无线 | 四虎影院一区二区 | 激情福利视频 | 99精品网站 | 不卡的av电影 | 亚洲国产网站 | 四虎影院在线观看免费视频 | 国产日韩欧美一区二区在线播放 | 久久久久成人精品 | 国产韩国精品一区二区三区 | 国产一区久久久 | 完全免费在线视频 | 丝袜一区二区三区 | 亚洲欧美中文日韩在线v日本 | 久久国产精品一区 | 欧美视频二区 | 在线色网 | 亚洲精品免费视频 | 成人精品福利 | 国产999精品久久久久久 | 亚洲伊人久久综合 | 一级免费视频 | 免费观看的av毛片的网站 | 欧产日产国产精品99 | 天天激情综合 | 亚洲精品www久久久久久广东 | 99久久精品免费看国产四区 | 日韩在线大片 | 久久婷婷av |