新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ATMEGA16控制74LS164驅動數碼管顯示

        ATMEGA16控制74LS164驅動數碼管顯示

        作者: 時間:2016-11-23 來源:網絡 收藏

        #include
        #include

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

        #define uchar unsigned char
        #define uint unsigned int

        //共陽極數碼管端碼編碼

        uchar Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7b,0x71};

        #define LS164Clk_CLI PORTB&=~BIT(PB0)
        #define LS164Clk_SEI PORTB|=BIT(PB0)
        #define LS164DATA_CLI PORTB&=~BIT(PB1)
        #define LS164FATA_SEI PORTB|=BIT(PB1)

        #define SMGA0_ON PORTA&=~(BIT(PA4))
        #define SMGA0_0FF PORTA|=(BIT(PA4))
        #define SMGA1_ON PORTA&=~(BIT(PA5))
        #define SMGA1_0FF PORTA|=(BIT(PA5))
        #define SMGA2_ON PORTA&=~(BIT(PA6))
        #define SMGA2_0FF PORTA|=(BIT(PA6))
        #define SMGA3_ON PORTA&=~(BIT(PA7))
        #define SMGA3_0FF PORTA|=(BIT(PA7))

        void System_Init(void)
        {
        DDRA|=0XF0;
        PORTA|=0XF0;
        DDRB|=0X03;
        PORTB|=0X03;
        }

        void LS164_SendData(uint data)
        {
        uchar i;
        LS164Clk_SEI;
        for(i=0;i<8;i++)
        {
        if((data&0x80)==0x80)
        LS164FATA_SEI;
        else
        LS164DATA_CLI;
        LS164Clk_CLI;
        NOP();
        LS164Clk_SEI;
        NOP();
        data=data<<1;
        }
        }

        void Display(uint data)
        {
        SMGA0_ON; //開顯示,在左邊第一個數碼管顯示千位
        LS164_SendData(Table[data/1000]); //取千位
        delay_ms(10); //延時很重要,要是不加,就會看上去全部都是滅的
        SMGA0_0FF; //關顯示

        SMGA1_ON; //開顯示,在左邊第二個數碼管顯示百位
        LS164_SendData(Table[data00/100]);//取百位
        delay_ms(10); //延時很重要,要是不加,就會看上去全部都是滅的
        SMGA1_0FF; //關顯示

        SMGA2_ON; //開顯示,在左邊第三個數碼管顯示十位
        LS164_SendData(Table[data0/10]);//取十位
        delay_ms(10); //延時很重要,要是不加,就會看上去全部都是滅的
        SMGA2_0FF; //關顯示

        SMGA3_ON; //開顯示,在左邊第四個個數碼管顯示個位
        LS164_SendData(Table[data]);//取個位
        delay_ms(10); //延時很重要,要是不加,就會看上去全部都是滅的
        SMGA3_0FF; //關顯示
        }

        void main(void)
        {
        uint data=9956;
        System_Init();
        PORTA=0X30;
        LS164_SendData(Table[0]);
        while(1)
        {
        delay_ms(10);
        data++;
        if(data>9999)
        {
        data=9999;
        while(data--)
        Display(data);//9999-0
        }
        Display(data); //0-9999
        }
        }

        PROTUES仿真圖




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 多伦县| 道孚县| 盐山县| 崇阳县| 息烽县| 高安市| 阳信县| 常熟市| 桃江县| 苏尼特左旗| 昌图县| 桓台县| 山东省| 元谋县| 澄江县| 达孜县| 建始县| 祁东县| 隆回县| 深州市| 修水县| 承德市| 英吉沙县| 江华| 宾阳县| 卓资县| 辰溪县| 车致| 凤山县| 平罗县| 鄱阳县| 天柱县| 南投县| 珠海市| 射洪县| 麦盖提县| 秀山| 沙田区| 库尔勒市| 明星| 巴里|