51单片机用74hc377控制两个数码管计时程序

51单片机用74hc377控制两个数码管计时程序,第1张

MOV P1,NUM0

CLR P31

SETB P30

CLR P30

CALL DELAY2MS

SETB P31

;-------

MOV P1,NUM1

CLR P32

SETB P30

CLR P30

CALL DELAY2MS

SETB P32

RET

573的输入口全部接在同一个I/O口,每个573都有条片选线,这两根片选线接单片机的两个管脚,数码管的接法就是,573的输出口接数码管的A-G 另一个573就接数码管的公共端。最为位选

#include <mega16h>

#include <delayh>

//数据信号 发送的数据 高电平high 1 低电平low pc0接74HC595的数据输入圈

#define HC595_DATA_HIGH PORTC |=(1<<0)

#define HC595_DATA_LOW PORTC &=~(1<<0)

//输出锁存信号线

#define HC595_LCLK_HIGH PORTC |=(1<<1)

#define HC595_LCLK_LOW PORTC &=~(1<<1)

//输入时钟线 把数据写入74HC595 pc0只决定电平大小 给上升沿才能输入

#define HC595_SCLK(串行时钟)_HIGH PORTC |=(1<<2)

#define HC595_SCLK_LOW PORTC &=~(1<<2)

//共阴数码表

unsigned char segnum[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x7c};

void Send74HC595(unsigned char data)

{

unsigned char i=0;

for(i=0;i<8;i++)

{

if(data & 0x80)//先发高位

HC595_DATA_HIGH;

else

HC595_DATA_LOW;

HC595_SCLK_HIGH;//给一个上升沿

delay_us(2);

HC595_SCLK_LOW;//给一个下降沿

data<<=1; //数据位移

}

}

void HC595Display(unsigned char num,unsigned char data)

{

HC595_LCLK_LOW;

HC595_SCLK_LOW;

Send74HC595(~(0x01<<num)); //发送位选

Send74HC595(segnum[data]);//发送段选

HC595_LCLK_HIGH;//上升输出锁存

delay_us(2);

}

void main (void)

{

MCUCSR=0x80;

MCUCSR=0x80;

DDRC|=(1<<0)|(1<<1)|(1<<2); // DDRC 不能=某值 它使pc0 pc1 pc2打开

while (1)

{

HC595Display(0,1);

HC595Display(1,2);

HC595Display(2,10);

HC595Display(3,0);

HC595Display(4,3);

HC595Display(5,10);

HC595Display(6,1);

HC595Display(7,0);

}

}

既然要用到74hc595,那么就要写一个595的驱动程序,以便后面的 *** 作简单化。

sbit hc595_si  =P2^5;   //数据引脚

sbit hc595_sck =P2^4;   //移位寄存器

sbit hc595_rck =P2^7;   //输出寄存器

/595驱动/

void HC595(unsigned char ch)

{

    unsigned char i;

    for (i = 0; i < 8; i++)

    {

        hc595_si = (ch & 0x80);    //取写入数据的最高位送入595的数据引脚

        ch <<= 1;      //相当于ch = ch << 1; 数据左移1位,低位往高位移  

        hc595_sck=0;   //送到移位寄存器

        hc595_sck=1;

    }

    hc595_rck=0; 

    hc595_rck=1;//输出数据

}

做完这些,接下来只需要往595里写数据就可以了,例如:HC595(0xfe); 则595芯片的Q0(最低位)输出端为“0”。可用仿真软件尝试一遍便知效果。

以上就是关于51单片机用74hc377控制两个数码管计时程序全部的内容,包括:51单片机用74hc377控制两个数码管计时程序、用74HC573驱动数码管是不是比三极管驱动要节省几个口、怎样用74HC595写数码管程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10169477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存