在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 74HC595控制8位數(shù)碼管 51單片機

            74HC595控制8位數(shù)碼管 51單片機

            作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
            74HC595是8位串行移位寄存器,亦能串行輸出控制下一級級聯(lián)芯片。關于級聯(lián)、595芯片具體我就不多介紹,大家自己查吧!下面直接貼代碼

            此程序已成功移植到STM32平臺,敬請關注!

            本文引用地址:http://www.biyoush.com/article/201611/321353.htm

            // 注意 此代碼沒有什么技術含量,也沒有按規(guī)范些,旨在說明595怎么控制,大家不要模仿。

            // 此代碼刷新速度有點慢,注意想辦法優(yōu)化,time變量用定時器中斷處理,主函數(shù)不斷地刷新顯示函數(shù),這樣就不會有閃屏,當然在STM32平臺毫無壓力

            #include


            sbit SCK = P3^2; // 數(shù)據(jù)輸入時鐘線,脈沖
            sbit SI = P3^3; // 數(shù)據(jù)線
            sbit RCK = P3^4; // 鎖存

            unsigned char code SMG[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
            unsigned char Wei[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};//位選
            unsigned char Val[8] = {0};


            void Output(void)
            {
            RCK = 0;
            RCK = 1;
            }


            void Write_Byte(unsigned char dat)
            {
            unsigned char i = 0;
            //每次發(fā)送一位數(shù)據(jù),8次發(fā)送完畢,先發(fā)送高位(切記)
            for(i=0; i<8; i++)
            {
            SCK = 0;
            SI = dat & 0x80;
            SCK = 1;

            dat <<= 1;
            }
            }


            void Display(unsigned char * p)
            {
            unsigned char * pt = Wei;
            //注意,先發(fā)送位選,因為控制位選的595芯片在控制段選的595芯片下一級
            Write_Byte(*(pt+0));//位選,
            Write_Byte(SMG[*(p+0)]);//段選
            Output();//發(fā)送到595 輸出

            Write_Byte(*(pt+1));
            Write_Byte(SMG[*(p+1)]);
            Output();

            Write_Byte(*(pt+2));
            Write_Byte(SMG[*(p+2)]);
            Output();

            Write_Byte(*(pt+3));
            Write_Byte(SMG[*(p+3)]);
            Output();

            Write_Byte(*(pt+4));
            Write_Byte(SMG[*(p+4)]);
            Output();

            Write_Byte(*(pt+5));
            Write_Byte(SMG[*(p+5)]);
            Output();

            Write_Byte(*(pt+6));
            Write_Byte(SMG[*(p+6)]);
            Output();

            Write_Byte(*(pt+7));
            Write_Byte(SMG[*(p+7)]);
            Output();

            }

            int main(void)
            {
            unsigned long int time = 0;
            unsigned int t = 0;

            while(1)
            {
            t++;

            if(100==t)
            {
            t= 0;
            time++;

            Val[0] = time / 10000000 % 10;
            Val[1] = time / 1000000 % 10;
            Val[2] = time / 100000 % 10;
            Val[3] = time / 10000 % 10;
            Val[4] = time / 1000 % 10;
            Val[5] = time / 100 % 10;
            Val[6] = time / 10 % 10;
            Val[7] = time % 10;
            }

            Display(Val);
            }

            return 0;
            }




            評論


            技術專區(qū)

            關閉