51單片機:靜態數碼管詳細教程
目錄
- 51單片機:靜態數碼管詳細教程
- 一.數碼管通電
- 1.原理圖
- 2.數碼管真值表
- 二.實作程式
- 1.程式撰寫
- 2.接線問題
- 三.結果與總結
- 1.成果展示
- 2.總結
一.數碼管通電
1.原理圖
單個數碼管有8個小LED燈,通過點亮其中若干個可以顯示0-9和部分字母,下面是原理圖:1

通過原理圖,可以看出數碼管分為共陽(b右)和共陰(b左)兩種,想要使LED通電,需要形成電勢差,例如在共陰下,想使a管亮,需要在a管輸入高電平,其他情況以此類推,
2.數碼管真值表
點亮數碼管指定段,需要設定一個排列包含dp,g,f,e,d,c,b,a,輸入高電平為1,低電平為0,例如想使數碼管亮“0”,,那a,b,c,d,e,f都得亮起,則在共陰時,輸入高電平亮,則排列為0011 1111,再分別將前4個二進制數和后4個二進制數轉換為16進制就是3和f,則整體為0x3f,
其他的點亮形式也可以由此方法得出,
以下時數碼管真值表:


二.實作程式
1.程式撰寫
在keil中撰寫程式后下載即可,
#include "reg52.h"
#define LONG 50000
#define SHORT 10000 //預置時間間隔
void delay(int i)
{
while(i--){
}
}
/*間隔時間函式*/
void main ()
{
int i = 0;
unsigned int smg[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
/*依次表示數碼管的0-f*/
while(1) //回圈執行程式
{
for (i = 0; i < 10;i++) //從0-依次顯示
{
P0 = smg[i]; //取反后賦值
delay(LONG); //延時5s
}
}
}
2.接線問題
P0為控制埠,將P0-P7共8個埠按順序接入A-Dp8個埠即可,
三.結果與總結
1.成果展示
很成功地顯示了數字0-9.

2.總結
程式反復試了幾次才成功實作了要求,對為什么編譯P0有一些疑惑,這個不用位定義嗎?之后將繼續推進學習進度,
參考檔案:普中科技靜態數碼管 ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/261451.html
標籤:其他
