新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ATMEGA16控制74LS164驅(qū)動數(shù)碼管顯示

ATMEGA16控制74LS164驅(qū)動數(shù)碼管顯示

作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏

#include
#include

本文引用地址:http://m.butianyuan.cn/article/201611/320226.htm

#define uchar unsigned char
#define uint unsigned int

//共陽極數(shù)碼管端碼編碼

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; //開顯示,在左邊第一個數(shù)碼管顯示千位
LS164_SendData(Table[data/1000]); //取千位
delay_ms(10); //延時很重要,要是不加,就會看上去全部都是滅的
SMGA0_0FF; //關(guān)顯示

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

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

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

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仿真圖




評論


技術(shù)專區(qū)

關(guān)閉