1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
紅外線測距報警程序以及如何將其添加到測距程序中
[打印本頁]
作者:
jhy1396
時間:
2020-6-5 18:27
標題:
紅外線測距報警程序以及如何將其添加到測距程序中
#define INT8U unsigned char
#define INT16U unsigned int
#define INT32U unsigned long
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include <math.h>
#include <ADC0832.C>
sbit DS =P3^5;
sbit SH_CP =P3^6;
sbit ST_CP =P3^7;
#define M_C 1388
#define B_C -5
#define K_C 2
#define M_F 3085.7
#define M_P -1.1962
code INT8U SEG_CODE[] =
{ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
INT8U Disp_Buff[] ={0,0,0};
extern INT8U GeT_CHx_AD_Value(INT8U ch);
void delay_ms(INT16U x){INT8U t;while(x--) for(t = 0; t<120; t++);}
void Serial_Input_595(INT8U dat)
{
INT8U i;
for(i = 0; i < 8; i++)
{ if (dat & 0x80) DS = 1; else DS = 0;
dat <<= 1;
SH_CP = 0; _nop_();_nop_();
SH_CP = 1; _nop_();_nop_();
}
SH_CP = 0;
}
void Parallel_output_595()
{
ST_CP= 0; _nop_();
ST_CP= 1; _nop_();
ST_CP= 0; _nop_();
}
float Get_Distance()
{
INT8U i; float AD_Sum = 0.0;
for (i = 0; i < 10; i++) AD_Sum+= Get_CHx_AD_Value(0);
return M_C / (AD_Sum / 10.0 + B_C) - K_C;
}
void DEC_TO_3DIGIT(INT16U d)
{
Disp_Buff[0] = 0; Disp_Buff[1] = 0; Disp_Buff[2] = 0;
while (d >= 100){ d -= 100;++Disp_Buff[2]; }
while (d >= 10) { d -= 10; ++Disp_Buff[1]; }
Disp_Buff[0] = d;
}
void main()
{
float d;
delay_ms(700);
while (1)
{ d = Get_Distance();
DEC_TO_3DIGIT((INT16U)(d*10));
Serial_Input_595(SEG_CODE[Disp_Buff[0]]);
Serial_Input_595(SEG_CODE[Disp_Buff[1]] & 0x7F);
Serial_Input_595(SEG_CODE[Disp_Buff[2]]);
Parallel_Output_595();
}
}
20200605182621.png
(69.95 KB, 下載次數: 73)
下載附件
2020-6-5 18:28 上傳
作者:
hsl32
時間:
2020-6-6 10:34
這個不就是程序嗎。直接在KEIL開發環境編譯后下載到芯片中運行。float Get_Distance()這個就是測距的函數,測傳感器輸出電壓(10次求平均)然后換算成距離輸出。
作者:
CZ1
時間:
2020-6-6 16:02
直接加到測距函數里面就好了,限制一下距離就好。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1