两个74HC595驱动8位数码管

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/******************************************************************
/* *
/* 单片机开发系统演示程序 *
/* *
/* *
/******************************************************************/

#include //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint unsigned int


sbit SDATA_595=P1^5; //串行数据输入 ----接板卡上的SPI
sbit SCLK_595 =P1^6; //移位时钟脉冲 ---接板卡上的SPO
sbit RCK_595 =P1^7; //输出锁存器控制脉冲 ----接板卡上SPK
sbit CS_LED8 =P1^1; //数码管片选 --------接板卡上的CS
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 dis[8]; //显示缓冲区

void delay(uint );
void display();

/*******************************************************
* *
* 延时函数 *
* *
*******************************************************/
void delay(uint dt)
{
uint i;
uchar bt;
for(i=0;ifor(bt=0;bt<200;bt++);
}

/*******************************************************
* *
* 定时中断函数 *
* *
*******************************************************/

void timer0(void) interrupt 1
{
TH0=0XFC;
TL0=0X66;
display();
}

/*******************************************************
* *
* 显示函数 *
* *
*******************************************************/

void display()
{
uchar num,c,i;
for(i=0;i<8;i++)
{
num=dis[i];
CS_LED8=0;
for(c=0;c<8;c++) //写入显示数据
{
SCLK_595=0;
num=num<<1;
SDATA_595=CY;
SCLK_595=1;
SCLK_595=0;
}
num=~(1<for(c=0;c<8;c++) //写入数码管序号
{
SCLK_595=0;
num=num<<1;
SDATA_595=CY;
SCLK_595=1;
SCLK_595=0;
}
RCK_595=0;
_nop_(); //短延时
_nop_();
RCK_595=1;
_nop_();
_nop_();
RCK_595=0; //显示数据输出
delay(1);
CS_LED8=1;
}
}

/*******************************************************
*

*
* 主函数 *
* *
*******************************************************/
main(void)
{
uchar k;
TMOD|=0x01;
TH0=0XFC;
TL0=0X66; //定时器初始化
TR0=1;
EA=1;
ET0=1;
// IP=0X10;

CS_1302=0; //屏蔽1302的信号
for(k=0;k<8;k++)
{
dis[k]=table[k]; //将显示内容送入显示缓冲区
}

while(1);
} //end of main()

相关文档
最新文档