專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

用74HC164實現(xiàn)數(shù)碼管的靜態(tài)顯示

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月13日   【字體:

要實現(xiàn)靜態(tài)顯示所用的IO較多,因此利用移位寄存器74HC164對IO的擴展來驅(qū)動數(shù)碼管,從而實現(xiàn)靜態(tài)顯示。

硬件電路百度上很多,這里就不說了,寫個程序吧

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                        0x87,0xff,0xef};
sbit dat=P2^0;
sbit clk=P2^1;
void disp(long a);
void write_bit(uchar num);
void main(void)
{
    disp(45678);
    while(1);   
}
void disp(long a)
{
    uchar ge,shi,bai,qian,wan;
    wan=a/10000;
    qian=a000/1000;
    bai=a00/100;
    shi=a0/10;
    ge=a;
    write_bit(table[wan]);
    write_bit(table[qian]);
    write_bit(table[bai]);
    write_bit(table[shi]);
    write_bit(table[ge]);
}
void write_bit(uchar num)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        clk=0;                //時鐘拉低,等待數(shù)據(jù)
        dat=(num&0x80)?1:0;   //最高位開始送,表達(dá)式為真時,結(jié)果為1,否則為0
        clk=1;                //時鐘拉高,上升沿到來,164數(shù)據(jù)移位
        num<<=1;             
    }
}

關(guān)閉窗口

相關(guān)文章