欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 我封裝的超聲波傳感器HS-SR04的模塊,但是想用數碼管檢驗的時候一直用不了 [打印本頁]

作者: 940675854    時間: 2020-2-25 22:41
標題: 我封裝的超聲波傳感器HS-SR04的模塊,但是想用數碼管檢驗的時候一直用不了
本帖最后由 940675854 于 2020-2-25 22:44 編輯

各位大神幫我看看,代碼作用是封裝后放在一個定時器,跟一些傳感器一起,作狀態掃描。
檢驗的時候放在主程序延時800ms不斷循環,用一個定時器刷新數碼管狀態,傳感器輸出數據放在數組里。但是數碼管一直不顯示輸出.


/************************封裝的ultrasonic.c************************/
#include<reg52.h>
#include <intrins.h>
#include"ultrasonic.h"

unsigned int t=0;
unsigned char k=0;
unsigned int sum=0;
unsigned int s=0;


void nops(unsigned int nop)
{
while(nop--)
{
  _nop_();
}
}
unsigned  int getDistance()
{
TH1=TL1=0;//清除計時器,為下一次測距做準備
EX1=1;//打開外部中斷INT0
Trig=1;
nops(10);//觸發信號延時
Trig=0;
TR1=1;//打開定時器開始計時
return t;//340/2*(t/1000/10)cm
}
unsigned int  getdis()
{
unsigned char N=5;//樣本數量
unsigned char k=N;
unsigned int sum=0;
while(k--)
{
  sum+=getDistance();
}
return sum/N;
}
/*************************************************/
void Timer1Init()
{
TMOD &= 0x0F;  //設置定時器模式
TMOD |= 0x10;  //設置定時器模式
TL1 = 0x00;   //設置定時初值
TH1 = 0x00;   //設置定時初值
TF1 = 0;    //清除TF1標志
ET1 = 1;   
TR1 = 0;    //定時器1開始計時
  EA = 1;                     
}
char over=0;
void Interrupt_time1() interrupt 3     //T0中斷用來計數器溢出,超過測距范圍
{
    over=1;        //中斷溢出標志
}
/*******************************************************/
void extern1Init(void)
{
IE1  = 0;             //將INT1中斷請求標志位清"0"
EX1 = 1;             //使能INT1中斷允許位
IT1 = 1;                   //選擇INT1為下降沿觸發方式
EA = 1;                     //允許總中斷
}


void Interrupt_exter1() interrupt 2
{
TR0=0;//進入外部中斷INT0后停止計時
t=(TH1*256+TL1);//計算定時器時間
t=(t*1.87)/100;
if(t>420||over==1)
{
  t=420;
  over=0;
}
TH1=TL1=0;//清除計時器,為下一次測距做準備
}
/*************************************************/

/***************************************主程序*******************/
#include<reg52.h>
#include"main.h"
#include"ultrasonic.h"
#include"smg.h"
void main(void)
{
unsigned char S;
Timer2Init();
Timer1Init();
extern1Init();
while(1)
{
  S = getdis();
  if(S>=4000) //超出測量范圍顯示“ERR0”
  {  
   disbuff[0]=0x3f;    //“-”
   disbuff[1]=0x50;    //“-”
   disbuff[2]=0x50;    //“-”
   disbuff[3]=0x79;    //“-”
  }
  else
  {
   disbuff[3]=DIG_CODE[S%10000/1000];
   disbuff[2]=DIG_CODE[S%1000/100];
   disbuff[1]=DIG_CODE[S%100/10];
   disbuff[0]=DIG_CODE[S%10/1];
  }
}
}

/*****************************************************/
void Timer2Init(void)
{
T2CON = 0X00;//實現16位自動重裝載定時、
RCAP2H = 0XF8;
RCAP2L = 0X30;
//PT2 = 1; //設置中斷優先級為高
TH2=0xF8;//定時50ms
TL2=0X30; //定時器2的,寫入數值寄存器的低8位
ET2 = 1;//開定時器2中斷
EA=1; //總中斷打開
TR2 = 1;
}  
void Interrupt_time2() interrupt 5     //T0中斷用來計數器溢出,超過測距范圍
{
   DigDisplay();
}
/*******************************************************/



作者: man1234567    時間: 2020-2-28 07:35
先調整數碼管可正常顯示,然后再調超聲波的程序。
作者: aide51    時間: 2020-2-29 15:59
是不是數碼管沒弄好
作者: lele5211314    時間: 2020-2-29 17:13
你封裝的電路圖展示出來啊 一起分析




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1