74HC595 数码管程序
扫描二维码
随时随地手机看文章
74HC595数码管程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDAT[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴数码管显示码
sbitHC595_SRCLR=P1^0;//清空移位寄存器
sbitHC595_sRCLK=P1^1;//寄存器输出时钟
sbitHC595_RCLK=P1^2;//移位时钟
sbitHC595_OE=P1^3;//并行输出使能
sbitHC595_sER=P1^4;//串行数据
uchartemp;
/********************************************************/
/*
/*延时子程序
/*
/*******************************************************/
voiddelay(intms)
{
intk;
while(ms--)
{
for(k=0;k<250;k++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************/
/**/
/*将显示数据送入74HC595内部移位寄存器*/
/**/
/********************************************************/
voidWR_595(void)
{
ucharj;
for(j=0;j<8;j++)
{
temp=temp<<1;
HC595_sER=CY;
HC595_sRCLK=1;//上升沿发生移位
_nop_();
_nop_();
HC595_sRCLK=0;
}
}
/********************************************************/
/**/
/*将移位寄存器内的数据锁存到输出寄存器并显示*/
/**/
/********************************************************/
voidOUT_595(void)
{
HC595_RCLK=0;
_nop_();
_nop_();
HC595_RCLK=1;//上升沿将数据送到输出锁存器
_nop_();
_nop_();
_nop_();
HC595_RCLK=0;
}
/********************************************************
**
*主程序*
**
*********************************************************/
main()
{//////////////////////////////////////////////////
//以下为输出位初始化
HC595_OE=1;//并行输出为高阻状态
_nop_();
_nop_();
HC595_sRCLR=0;//清空移位寄存器
_nop_();
HC595_sER=0;//清零
_nop_();
_nop_();
HC595_RCLK=0;//移位时钟初始为低
_nop_();
HC595_sRCLK=0;//寄存器时钟初始为低
_nop_();
HC595_OE=0;//允许并行输出
_nop_();
HC595_sRCLR=1;//结束复位状态
////////////////////////////////////////////////
//循环显示0--9
while(1)
{
uchari;
for(i=0;i<10;i++)
{
temp=DAT[i];//取显示数据
WR_595();
OUT_595();
delay(200);
}
}
}