標(biāo)題: 單片機(jī)數(shù)碼管顯示程序 [打印本頁]

作者: ZXQQL    時間: 2020-1-3 08:52
標(biāo)題: 單片機(jī)數(shù)碼管顯示程序
#include <reg52.h>

#define uchar unsigned char        //宏定義
#define uint  unsigned int         //宏定義
#define DELAY_TIME 2                 //將常量定義為宏,方便修改代碼
sbit we = P2^7;                                //數(shù)碼管位選鎖存器接口
sbit du = P2^6;                                //數(shù)碼管段選鎖存器接口
//數(shù)碼管段選表
uchar code leddata[]={
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄滅
                0x00  //自定義
                          };
//毫秒級延時函數(shù)
void delay(uint z)
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);
}

void main()
{
                while(1)
                {

                        P0 = 0xfe;//1111 1110 第一位數(shù)碼管顯示,注意數(shù)碼管的排序,P0.0對應(yīng)連接的是左邊第一位數(shù)碼管
                        we = 1;                //打開位選
                        we = 0;                //關(guān)閉位選

                        P0 = leddata[1];
                        du = 1;                //打開段選
                        du = 0;                //關(guān)閉段選
                        delay(DELAY_TIME);//延時

                        P0 = 0xfd;        //1111 1101 只選通第二位數(shù)碼管
                        we = 1;                //打開位選
                        we = 0;                //關(guān)閉位選

                        P0 = leddata[2]; //顯示2
                        du = 1;                        //打開段選
                        du = 0;                        //關(guān)閉段選
                        delay(DELAY_TIME);//延時

                        P0 = 0xfb;        // 1111 1011只選通第三位數(shù)碼管
                        we = 1;                //打開位選
                        we = 0;                //關(guān)閉位選

                        P0 = leddata[3];        //顯示3
                        du = 1;                                //打開段選
                        du = 0;                                //關(guān)閉段選
                        delay(DELAY_TIME);        //延時

                        P0 = 0xf7;        //1111 0111 只選通第四位數(shù)碼管
                        we = 1;                //打開位選
                        we = 0;                //關(guān)閉位選

                        P0 = leddata[4]; //顯示4
                        du = 1;                        //打開段選
                        du = 0;                        //關(guān)閉段選
                        delay(DELAY_TIME);//延時

                        P0 = 0xef;        //1110 1111 只選通第五位數(shù)碼管
                        we = 1;                //打開位選
                        we = 0;                //關(guān)閉位選

                        P0 = leddata[5]; //顯示5
                        du = 1;                        //打開段選
                        du = 0;                        //關(guān)閉段選
                        delay(DELAY_TIME);//延時

                        P0 = 0xdf;                //1101 1111 只選通第六位數(shù)碼管
                        we = 1;                        //打開位選
                        we = 0;                        //關(guān)閉位選

                        P0 = leddata[6];        //顯示6
                        du = 1;                                //打開段選
                        du = 0;                                //關(guān)閉段選
                        delay(DELAY_TIME);        //延時

                        we = 1;                        //打開位選
                        P0 = 0xbf;                //1011 1111 只選通第七位數(shù)碼管
                        we = 0;                        //關(guān)閉位選

                        P0 = leddata[7];        //顯示7
                        du = 1;                                //打開段選
                        du = 0;                                //關(guān)閉段選
                        delay(DELAY_TIME);        //延時

                        P0 = 0x7f;                        //0111 1111 只選通第八位數(shù)碼管
                        we = 1;                                //打開位選
                        we = 0;                                //關(guān)閉位選

                        P0 = leddata[8];        //顯示8
                        du = 1;                                //打開段選
                        du = 0;                                //關(guān)閉段選
                        delay(DELAY_TIME);        //延時        
                }
}


P@JH%QEX`~O%_YKNS}LVV6P.png (142.25 KB, 下載次數(shù): 48)

數(shù)碼管原理圖

數(shù)碼管原理圖





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1