单片机控制74hc595驱动4个单数码管计数显示

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机控制74hc595驱动4个单数码管计数显示相关的知识,希望对你有一定的参考价值。

单片机控制74hc595驱动4个单数码管静态显示

  • 演示效果:

    *材料 AT89C5274HC595共阳数码管
  • 采用Proteus仿真

实例程序

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar count,second,min;
sbit lclk=P1^0;//ST
sbit sclk=P1^1;//SH
sbit Data=P1^2;//DS
uchar dis[4];
uchar code displayhex[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
                 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳数码管段码
/*
void delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
      for(y=100;y>0;y--);
}*/
void send595(uchar *pdat)
{
        uchar i,j;
        j=0x80;
        for(i=0;i<8;i++)
        {
                if((*pdat)&j) Data=1;
                else Data=0;
//                sclk=0;
                sclk=1;//SH
                sclk=0;
                j>>=1;
        }
}
void display595( uchar *pdat)
{
        uchar i;
        for(i=0;i<4;i++)
        {
//                lclk=0;
                send595(&displayhex[*(pdat+i)]);
        }
        lclk=0;
        lclk=1;
}
void init()
{
        TMOD=0X01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void main()
{
        init();
        while(1)
        {
                if(count==20)
                {
                        count=0;
                        second++;
                        if(second==60)
                        {
                                second=0;
                                min++;
                                if(min==24)
                                {
                                        min=0;
                                }
                        }
                        dis[0]=second%10;
                        dis[1]=second/10;
                        dis[2]=min%10;
                        dis[3]=min/10;
//                        display595(dis);
//                        delay(50);
                }
                display595(dis);
        }
}

void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        count++;
}

以上是关于单片机控制74hc595驱动4个单数码管计数显示的主要内容,如果未能解决你的问题,请参考以下文章

单片机芯片之(74HC595/74LS595)

基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间

Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真

Arduino UNO + 74HC595联级+数码管实现0000-9999循环计数显示+ Proteus仿真

基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟

51单片机8x8矩阵键盘+数码管+74HC595+Proteus仿真