#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit Ds=P1^5; //串行数据输入
sbit SHcp=P1^6; //移位时钟脉冲
sbit STcp=P1^7; //输出锁存器控制脉冲
sbit OE=P1^1; //数码管片选
sbit CS_1302=P1^4; //ds1302片选
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管编码(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)
uchar num;
void delay(uint );
void display();
/*******************************************************
* *
* 延时函数 *
* *
*******************************************************/
void delay(uint dt)
{
uint i;
uchar bt;
for(i=0;i
}
void WR_595(uchar a )
{
uchar b;
OE=0;
for(b=0;b<=7;b++)
{
Ds=a&0x80; //取最高位
a<<=1; /*左移位*/
SHcp=0; /*产生上生沿*/
SHcp=1;
delay(100);
//OE=1;
}
}
/*-------------------------------------------------------------------------------
打开锁存,更新74595输出子程序
---------------------------------------------------------------------------------*/
void Out_595(void)
{
STcp=0;
_nop_();
_nop_();
STcp=1; /*上升沿锁存数据*/
}
void display(void)
{ for(;num<16;num++)
{WR_595(table[num]);//显示数码管的数字
WR_595(0xfe);//显示数码管序号
Out_595();
}
}
void main()
{
while(1)
{ //WR_595(0xfe);
//Out_595();
display();
if(num>=16)
num=0;
}
}
这是点亮数码管的程序 你可以试试看