天天看點

51單片機學習筆記【三】——數位管實驗

數位管基礎:

  • 數位管由八個發光二極管組成成“8“字型,按極性分為共陰極數位管(陰極連結在一起)和共陽極數位管(陽極連接配接在一起)。本實驗采用的是共陽極,若要亮,則相應位置0,即為低電平。
    51單片機學習筆記【三】——數位管實驗
  • 可以通過給數位管引腳置值來控制亮和滅,顯示不同的圖案,如下圖所示
    51單片機學習筆記【三】——數位管實驗
    共陽極數位管再進行取反操作便可以顯示相同的圖案。

一.靜态數位管實驗

1.電路原理圖

51單片機學習筆記【三】——數位管實驗

2.說明:實驗中使用P0口控制,用排線接P0口和JP3.讓數位管依次顯示0-9。

3.源代碼如下:

/***********************************************
   > File Name: 靜态數位管
   > Author: pengshp
   > Mail: [email protected]
   > Date: 2015年 7 月 17 日
*************************************************/

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define GPIO_DIG P0
uchar code DIG_CODE[]={,,,,,
                         ,,,,};//顯示0-9的值
void Delay(uchar);
void main()
{
    uchar i;
    while()
    {
        for(i=;i<;i++)           //依次顯示0-9
        {
            GPIO_DIG=~DIG_CODE[i];
            Delay();             //延時處理
        }
    }
}
void Delay(uchar x)
{
    uint a,b;
    for(a=x;a>;a--)
    {
        for(b=;b>;b--)
        {
        }
    }
}
           

備注:程式中的code關鍵字表示将資料存儲在程式存儲空間(Flash)中,以節約RAM的空間,存儲的資料隻能讀不能寫入。

二.動态數位管(不帶譯碼器)

1.電路原理圖

51單片機學習筆記【三】——數位管實驗

2.說明

  • 本實驗通過控制八個數位管分别顯示0-7個數字,使用的數位管為共陰極,即要亮時把相應位置1,輸出高電平。接線為JP10(P0)接JP12,JP8接JP16右排(注意:有金屬觸電的一排朝右),再把JP165斷開。

3.源代碼如下

/**************************************
  >File Name: 動态數位管顯示
  > Author: pengshp
  > Mail: [email protected]
  > Date: 2015年 7 月 17 日
***************************************/

#include<reg51.h>
#define GPIO_DIG   P0   //段選
#define GPIO_PLACE P1   //位選
#define uchar unsigned char
#define uint unsigned char

uchar code DIG_PLACE[] = {,,,,
                           ,,,};//位選控制   查表的方法控制
uint code DIG_CODE[] = {,,,, //0、1、2、3
                          ,,,, //4、5、6、7
                          ,,,, //8、9、A、B
                          ,,,};//C、D、E、F
uchar DisplayDate[]=; //存放要顯示的8位數字
void DigDisplay();
void main()
{
    uchar i;
    for(i=;i<;i++)
    {
        DisplayDate[i]=DIG_CODE[i];
    }
    while()
    {
        DigDisplay();
    }
}

void DigDisplay()
{
    uchar i;
    uint j;
    for(i=;i<;i++)
    {
        GPIO_PLACE = DIG_PLACE[i];   //發送位選,控制要亮的數位管
        GPIO_DIG = DisplayDate[i];   //發送段碼,顯示相應的數字
        j = ;                      //掃描間隔時間設定
        while(j--); 
        GPIO_DIG = ;             //消隐
    }
}