新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 74HC595控制8位數碼管 51單片機

        74HC595控制8位數碼管 51單片機

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

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

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

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

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

        #include


        sbit SCK = P3^2; // 數據輸入時鐘線,脈沖
        sbit SI = P3^3; // 數據線
        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;
        //每次發送一位數據,8次發送完畢,先發送高位(切記)
        for(i=0; i<8; i++)
        {
        SCK = 0;
        SI = dat & 0x80;
        SCK = 1;

        dat <<= 1;
        }
        }


        void Display(unsigned char * p)
        {
        unsigned char * pt = Wei;
        //注意,先發送位選,因為控制位選的595芯片在控制段選的595芯片下一級
        Write_Byte(*(pt+0));//位選,
        Write_Byte(SMG[*(p+0)]);//段選
        Output();//發送到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;
        }




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岳阳市| 鱼台县| 丰宁| 阜新市| 南城县| 和硕县| 诸城市| 城口县| 盱眙县| 金沙县| 昂仁县| 绥中县| 贺州市| 思茅市| 姚安县| 工布江达县| 南城县| 灌南县| 兴文县| 石首市| 定安县| 荆门市| 无为县| 伊春市| 翼城县| 白沙| 永顺县| 于都县| 佛坪县| 兴国县| 松桃| 庆云县| 米泉市| 遂溪县| 科技| 开原市| 公安县| 蓬安县| 罗城| 新疆| 渝中区|