74HC595 數(shù)碼管程序
74HC595數(shù)碼管程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDAT[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共陰數(shù)碼管顯示碼
sbitHC595_SRCLR=P1^0;//清空移位寄存器
sbitHC595_sRCLK=P1^1;//寄存器輸出時(shí)鐘
sbitHC595_RCLK=P1^2;//移位時(shí)鐘
sbitHC595_OE=P1^3;//并行輸出使能
sbitHC595_sER=P1^4;//串行數(shù)據(jù)
uchartemp;
/********************************************************/
/*
/*延時(shí)子程序
/*
/*******************************************************/
voiddelay(intms)
{
intk;
while(ms--)
{
for(k=0;k<250;k++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************/
/**/
/*將顯示數(shù)據(jù)送入74HC595內(nèi)部移位寄存器*/
/**/
/********************************************************/
voidWR_595(void)
{
ucharj;
for(j=0;j<8;j++)
{
temp=temp<<1;
HC595_sER=CY;
HC595_sRCLK=1;//上升沿發(fā)生移位
_nop_();
_nop_();
HC595_sRCLK=0;
}
}
/********************************************************/
/**/
/*將移位寄存器內(nèi)的數(shù)據(jù)鎖存到輸出寄存器并顯示*/
/**/
/********************************************************/
voidOUT_595(void)
{
HC595_RCLK=0;
_nop_();
_nop_();
HC595_RCLK=1;//上升沿將數(shù)據(jù)送到輸出鎖存器
_nop_();
_nop_();
_nop_();
HC595_RCLK=0;
}
/********************************************************
**
*主程序*
**
*********************************************************/
main()
{//////////////////////////////////////////////////
//以下為輸出位初始化
HC595_OE=1;//并行輸出為高阻狀態(tài)
_nop_();
_nop_();
HC595_sRCLR=0;//清空移位寄存器
_nop_();
HC595_sER=0;//清零
_nop_();
_nop_();
HC595_RCLK=0;//移位時(shí)鐘初始為低
_nop_();
HC595_sRCLK=0;//寄存器時(shí)鐘初始為低
_nop_();
HC595_OE=0;//允許并行輸出
_nop_();
HC595_sRCLR=1;//結(jié)束復(fù)位狀態(tài)
////////////////////////////////////////////////
//循環(huán)顯示0--9
while(1)
{
uchari;
for(i=0;i<10;i++)
{
temp=DAT[i];//取顯示數(shù)據(jù)
WR_595();
OUT_595();
delay(200);
}
}
}