文档库 最新最全的文档下载
当前位置:文档库 › 74LS164实现单片机数码管动态显示

74LS164实现单片机数码管动态显示

#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
#define C_SYSCLK 12000000 //外接晶振频率
#define C_10MSCount ((C_SYSCLK*10/1000)/12)
//===========================================================================================
sbit Data164= P1^6;
sbit Clk164= P1^7;
uchar ShapeRam[6]; //显示的字形码缓冲区
uchar DispBuf[6]; //显示拆分后数据缓冲区
uchar Time500Ms; //0.5秒驱动一次显示
uint Count; //要显示的数据
uchar code ShapeCode[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //共阳极接法
//uchar code ShapeCode[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0x6f}; //共阴极接法
void Shift164(uchar InData)
{
uchar i;
for(i=0;i<8;i++) //循环移入寄存器74LS164
{
Clk164=0;
if((InData&0x01)==0x01) //最低位为1吗?
Data164=1;
else
Data164=0;
Clk164=1; //上升沿脉冲
InData>>=1;
}
}
//===========================================================================================
void ValueToDispBuf(uint Temp)
{
uchar j;
for(j=0;j<5;j++) //最大65535 为5位
{
DispBuf[5-j]=Temp%10;
Temp=Temp/10;
}
DispBuf[0]=0; //最高位为0
}
//===========================================================================================
void GetShapeToRam(void)
{
uchar i;
for(i=0;i<6;i++)
ShapeRam[i]=ShapeCode[DispBuf[i]]; //找对应字形码
}
//============================================================================================
void DataSendToDisp(unsigned int InValue)
{
uchar i;
ValueToDispBuf(InValue);
GetShapeToRam();
for(i=0;i<6;i++)
{
Shift164(ShapeRam[i]) ;
}
}
//=============================================================================================
void T0Isr(void)interrupt 1 //10ms定时中断,16位计数方式
{
TH0=(-C_10MSCount)/256;
TL0=(-C_10MSCount)%256;
Time500Ms++;
}
//==============================================================================================
void main(void)
{
TMOD=0X01;
IE=0X82;
TH0=(-C_10MSCount)/256;
TL0=(-C_10MSCount)%256;
TR0=1;
while(1)
{
if(Time500Ms>50)
{
Time500Ms=0;
DataSendToDisp(Count);
Count++;
}
}
}

相关文档
相关文档 最新文档