8*8LED點(diǎn)陣顯示-李穎超-0113

一、讀懂代碼

因?yàn)樽陨鞢語(yǔ)言基礎(chǔ)比較差,所以決定先把代碼看懂然后再在源代碼的基礎(chǔ)上修改寫(xiě)成自己的點(diǎn)陣顯示。
自己對(duì)代碼的簡(jiǎn)短理解都寫(xiě)成注釋附在下面的源代碼中了,有不對(duì)的地方請(qǐng)指正

              8*8LED點(diǎn)陣———顯示數(shù)字實(shí)驗(yàn)
實(shí)現(xiàn)現(xiàn)象:下載程序后點(diǎn)陣上顯示數(shù)字0
            
注意事項(xiàng):一定要將JOE短接片短接到GND端,如果不需要595后面的小燈點(diǎn)亮可以拔掉JP595短接片。                                                                               
***************************************************************************************/

#include "reg51.h"           //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include<intrins.h>

typedef unsigned int u16;     //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;

sbit SRCLK=P3^6;//用SRCLK來(lái)表示P3口的第六位
sbit RCLK=P3^5;//用RCLK來(lái)表示P3口的第五位
sbit SER=P3^4;//用SER來(lái)表示P3口的第四位
//SRCLK、RCLK、SER都是下面程序用到的的芯片74hc595中的引腳的名稱,想對(duì)芯片進(jìn)一步了解的同學(xué)可以看一下代碼后面附的鏈接

u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//二極管點(diǎn)亮的的條件是對(duì)應(yīng)行列分別為高低電平使得電流產(chǎn)生。
//對(duì)應(yīng)本實(shí)驗(yàn)實(shí)驗(yàn)板即為列線為高電平,行線為低電平時(shí)二極管被點(diǎn)亮
//第一行代碼控制哪列為高電平即為需要此列是否點(diǎn)亮,第二行控制哪一行為低電平,即某一行被點(diǎn)亮,行列共同點(diǎn)亮?xí)r交叉處LED亮燈
//實(shí)驗(yàn)板的原理圖因?yàn)樽约嚎床欢赃@里的行列可能混了【手動(dòng)狗頭】對(duì)這個(gè)比較清楚的同學(xué)可以幫給我指正一下,謝謝。
/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能         : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
死循環(huán)實(shí)現(xiàn)延時(shí)功能
*******************************************************************************/
void delay(u16 i)
{
    while(i--); 
}

/*******************************************************************************
* 函數(shù)名         : Hc595SendByte(u8 dat)
* 函數(shù)功能         : 向74HC595發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
* 輸入           : 無(wú)
* 輸出             : 無(wú)
將一個(gè)字節(jié)的信息串行輸入給74HC595以后由芯片并行輸出
*******************************************************************************/
void Hc595SendByte(u8 dat)
{
    u8 a;
    SRCLK=0;
    RCLK=0;
    for(a=0;a<8;a++)
    {
        SER=dat>>7;
        dat<<=1;

        SRCLK=1;
        _nop_();
        _nop_();
        SRCLK=0;    
    }

    RCLK=1;
    _nop_();
    _nop_();
    RCLK=0;
}

/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能       : 主函數(shù)
* 輸    入       : 無(wú)
* 輸    出         : 無(wú)
*******************************************************************************/
void main()
{           
    u8 i;
    while(1)//輪回點(diǎn)亮循環(huán)體
    {
        P0=0x7f;
        for(i=0;i<8;i++)
        {
            P0=ledwei[i];         //位選
            Hc595SendByte(ledduan[i]);  //發(fā)送段選數(shù)據(jù)
            delay(100);        //延時(shí)
            Hc595SendByte(0x00);  //消隱,如果的話點(diǎn)陣顯示時(shí)會(huì)出現(xiàn)重影現(xiàn)象
        }   
    }       
}

74HC595芯片資料:http://www.51hei.com/chip/3978.html

二、修改代碼

理解代碼以后我們對(duì)代碼進(jìn)行修改來(lái)實(shí)現(xiàn)自己的點(diǎn)陣顯示。
因?yàn)閷?duì)亮度和別的指標(biāo)沒(méi)有要求,所以只需要修改和字符顯示的這一段就可以啦

u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};

我要顯示的是佐字,對(duì)應(yīng)的代碼經(jīng)過(guò)推斷
替換代碼推斷.jpg

所以代碼修改為

u8 ledduan[]={0x20,0x7f,0xd0,0x71,0x51,0xdf,0x51,0x51};

三、燒錄

將代碼編譯形成新的hex文件后下載到實(shí)驗(yàn)板上就OK啦,當(dāng)然前提是你沒(méi)有像我一樣忘記JOE短接片短接到GND端


成果.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容