欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC12C5a32s2單片機超聲波模塊HY-SRF05程序,數碼管 注釋詳細顯示
[打印本頁]
作者:
mhzqmhz
時間:
2020-3-11 13:56
標題:
STC12C5a32s2單片機超聲波模塊HY-SRF05程序,數碼管 注釋詳細顯示
/**************************************************************
功能:超聲波模塊HY-SRF05,數碼管顯示
說明:
硬件:stc12c5a32s2,晶振12MHz
4組共陽數碼管
HY-SRF05超聲波模塊
**************************************************************/
#include<stc12c5a60s2.h>
#define uchar unsigned char
#define uint unsigned int
#define Num P2 //P2口接數碼管其余腳
#define Seg_Place P3 //P3口高位來控制哪個管顯示數字
sbit Trig = P0^0; //超聲波模塊觸發
sbit Echo = P0^1; //超聲波模塊回響
//點亮第幾位數碼管
uint code Seg[]={0x10,0x20,0x40,0x80};
//數碼管0~9數字
uint code Table[]={
0x03,0x9f,0x25,0x0d,0x99,
0x49,0x41,0x1f,0x01,0x09};
void Timer0Init(void)
{
TMOD = 0x01; //設置定時器模式
TH0 = 0;
TL0 = 0;
}
/***********************************************
函數作用: 延時
說明: 時間不精確,i=1為1毫秒
*************************************************/
void Delay_Ms(uint i)
{
uint j;
for(i;i>0;i--)
{
for(j=0;j<1002;j++);
}
}
/***********************************************
函數作用: 數碼管顯示的數字
說明:
*************************************************/
void Display_Seg_Num(uchar i)
{
Num = Table[i];
}
/***********************************************
函數作用: 顯示第幾位數碼管
說明:
*************************************************/
void Display_Seg(uchar i)
{
Seg_Place = Seg[i];
}
/***********************************************
函數作用: 超聲波觸發
說明: 拉高電平至少10us
*************************************************/
void Trig_Init()
{
Trig = 0;
Trig = 1;
Delay_Ms(1);
Trig = 0;
}
/***********************************************
函數作用: 接收超聲波并計算距離
說明: 一個機器周期為1us,12個時鐘周期為1個機器周期
注意: 如果這樣寫:time = time * 12 /12 ; time * 12可能會溢出,導致結果出錯
*************************************************/
uint Distance()
{
uint time,distance;
Trig_Init(); //初始化超聲波觸發
while(Echo == 0); //當回響為高電平,打開定時器0
TR0 = 1;
while(Echo == 1); //當回響為低電平,計算時間
TR0 = 0;
time = TH0*256 + TL0;
time = time /12 * 12; //time是us級別(實際時間 = 時間 / 晶振頻率 ×12個時鐘周期)
TH0 = 0;
TL0 = 0;
distance = 0.017 * time; //距離=速度×時間;(厘米 = 0.017厘米/微秒 × 微秒)
return distance; //返回值 距離
}
/***********************************************
函數作用: 數碼管顯示的數字
說明:
*************************************************/
void main()
{
uint distance;
uchar i;
P3M0 = 0Xf0;
P3M1 = 0X00; //P3口推挽輸出,增加電流大小
Timer0Init(); //初始化定時器0
while(1)
{
distance = Distance(); //將讀出的距離賦值給distance
for(i=0;i<50;i++) //顯示距離一段時間
{
Display_Seg(0); //點亮第一個數碼管
Display_Seg_Num(distance/100); //顯示厘米的百位
Delay_Ms(5); //短延時
Display_Seg(1); //點亮第二個數碼管
Display_Seg_Num(distance/10%10); //顯示厘米的十位
Delay_Ms(3); //短延時
Display_Seg(2); //點亮第三個數碼管
Display_Seg_Num(distance%10); //顯示厘米的個位
Delay_Ms(3); //短延時
}
}
}
復制代碼
作者:
QEQWE123
時間:
2020-10-27 15:42
沒評論嗎
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1