单片机控制74LS164驱动数码管

  • 格式:doc
  • 大小:152.00 KB
  • 文档页数:3

单片机控制74LS164驱动数码管

利用74LS164驱动数码管,

我们首先来弄清74LS164的工作方式,然后学习如何在自己板子上连接线路。

我们来讲一讲数码管的基础知识:

使用数码管时,要注意区分这两种不同的接法:共阴极和共阳极。共阴极时,为1则亮;共阳极时,为0则亮。 为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。

比如共阴极的方式接数码管,显示“1”,则编码为0x3f,即00111111(dp g f e d c b a )。==================================================================================================

静态显示程序如下:

/*-----------------------------------

功能:数码管 静态显示0-F

单片机:AT89S52

------------------------------------*/

#include "reg52.h"

#define uint unsigned int

#define uchar unsigned char

sbit DAT=P0^3;

sbit CLK=P0^2;

void sendbyte(uchar byte);

void delay(uint z);

uchar code tab[]={

0xed,0x09,0xbc,0x9d,0x59,0xd5,

0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,

0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭

/*========================

主函数

=========================*/

void main()

{

unsigned char h;

while(1)

{

for(h=0;h<17;h++)

{

delay(500); //延时大约是0.5s

sendbyte(h);

delay(500);

}

h=0; }

}

/*====================================

用74LS164来输出一个8位的数据,

点亮数码管相应的管脚,以显示数字

=====================================*/

void sendbyte(uchar byte)

{

uchar num,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x01; //每一位的输出

CLK=1; //每一次上升沿,输出一位数据

num>>=1; //右移位赋值 ,以供下一位的输出

}

}

/*==============================

延时子程序

===============================*/

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}