单片机控制74hc595驱动4个单数码管计数显示
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机控制74hc595驱动4个单数码管计数显示相关的知识,希望对你有一定的参考价值。
单片机控制74hc595驱动4个单数码管静态显示
- 演示效果:
*材料AT89C52
、74HC595
共阳数码管 - 采用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个单数码管计数显示的主要内容,如果未能解决你的问题,请参考以下文章
基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间
Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真
Arduino UNO + 74HC595联级+数码管实现0000-9999循环计数显示+ Proteus仿真