當前位置:編程學習大全網 - 編程語言 - 如何通過單片機顯示幹簧管脈沖信號到數碼管?

如何通過單片機顯示幹簧管脈沖信號到數碼管?

簧片開關脈沖信號通過單片機顯示在數碼管上;

/********************************************************************

*?文件名:?TLC549.c

*?說明:本程序實現了對TLC549的控制。電壓由TLC549轉換成數字信號,由數碼管顯示。在實際工作中,當對AD進行采樣時,通常在使用前對AD信號進行處理。這裏采集30次,去掉最大最小的5次,取中間20次的平均值,最大程度的保證了待采集廣告的準確性。

***********************************************************************/

#包括

#包括

#定義?烏恰爾?未簽名?茶

#定義?uintunsigned?int?

sbit?AD_Out?=?p3^2;//TLC549輸出端

sbit?CS?=?p1^0;?//TLC549芯片選擇信號

sbit?AD_In?=?p1^1;//TLC549輸入端子

烏恰爾?代碼?表[10]?=?{0x03,?0x9f,?0x25,?0x0d,?0x99,?0x49,?0x41,?0x1f,?0x01,?0x 09 };

烏恰爾?代碼?table_d[10]?=?{0x02,?0x9e,?0x24,?0x0c,?0x98,?0x48,?0x40,?0x1e,?0x00,?0x 08 };?//用點數碼管顯示

/********************************************************************

*?名字?:?AD_Change(無效)

*?功能?:?TLC549驅動,在“視頻和教程”中有解釋。

*?輸入?:?沒有

*?輸出?:?臨時工?(電壓值)

***********************************************************************/

烏恰爾?AD_Change(無效)

{

烏恰爾?我,臨時工?=?0;

CS?=?0;

_ nop _();

_ nop _();

_ nop _();

_ nop _();

for(I = 0;?我& lt8;?i++)

{

AD_In?=?1;

_ nop _();

_ nop _();

臨時工?=?臨時工?& lt& lt?1;

如果(AD_Out?==?1)?臨時工?+=?1;

AD_In?=?0;

_ nop _();

_ nop _();

}

CS?=?1;

回歸?溫度;?

}

/********************************************************************

*?名字?:?延遲()

*?功能?:?拖延,拖延的時間是?1ms?*?倒三角形

*?輸入?:?倒三角形

*?輸出?:?沒有

***********************************************************************/

作廢?延遲(uint?del)

{

烏恰爾?我,?j;

for(I = 0;?我

for(j = 0;?j & lt=148;?j++)

;?

}

/***********************************************************************

*?名字?說:?平均值()

*?工作?可以:中值平均濾波法,取壹個* * * 30的數據,不要最大最小的五個數據。

平均中間的二十個數據。

*?輸?輸入:?要處理的30個值

*?輸?出局:得到壹個中值平均值。

***********************************************************************/

uint?平均(uint?緩沖區[30])

{

烏恰爾?I,j;

uint?溫度;

for(I = 1;?我& lt30;?i++)///首先將整個數組的三十個值從小到大排列。

for(j = 29;?j & gt= I;?- j)

{

if(buffer[j-1]?& gt?緩沖區[j])

{

臨時工?=?緩沖劑[j-1];

緩沖區[j-1]?=?buffer[j];

buffer[j]?=?溫度;

}

}

////處理數組,去掉壹個最大值和壹個最小值,取中間二十個值的平均值。

臨時工?=?0;

for(I = 5;?我& lt25;?i++)

{

臨時工?+=?緩沖區[I];

}?

臨時工?=?(浮點)溫度?/?20?+?0.5);

返回(臨時);

}

/***********************************************************************

*?名字?說:?AD_Filter()

*?工作?燦:廣告收集30次,過濾。

*?輸?輸入:?三十個AD采集值

*?輸?輸出:處理後的廣告價值。

***********************************************************************/

uint?AD_Filter()

{

uint?日期緩沖區[30]?=?{0},?溫度;?

烏恰爾?我;

for(I = 0;?我& lt30;?i++)

{

日期緩沖區[i]?=?AD _ Change();

延時(1);?//延時1ms采集壹次。您可以根據工作需要調整這裏的時間。

}

臨時工?=?average(Date _ Buffer);

返回(臨時);

}

/********************************************************************

*?名字?:?主()

*?功能?:?主要功能

*?輸入?:?沒有

*?輸出?:?沒有

***********************************************************************/

作廢?主()

{

uint?我?=?0,temp?

uint?j;

P2?=?0x00

P1?=?0xff

while(1)

{

臨時工?=?AD _ Filter();

j?=?臨時工?*?2;

for(I = 0;?我& lt40;?i++)?

{

P0?=?table_d[j?/?100];

P2?=?0x04

延時(10);

P0?=?表[j/?10?%?10];

P2?=?0x02

延時(10);

P0?=?表[j?%?10];

P2?=?0x 01;

延時(10);

}

}

}

  • 上一篇:隆化縣編程學校電話
  • 下一篇:聊天發兩個問號是麽意思
  • copyright 2024編程學習大全網