单片机控制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--);
}