资源描述:
《at89c51串并转换驱动数码管实验指导》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、AT89C51串并转换驱动数码管实验指导(1)2011-05-1718:49:42来源:互联网关键字:AT89C51串并转换驱动数码管 器件:74hc595. 引脚说明: SDA:数据输入口。 SH_CP:数据输入控制端,在每个 SH_CP的上升沿,SDA口上的数据移入寄存器,在SH_CP的第9个上升沿,数据开始从QS 移出。 ST_CP:数据置入锁存器控制端。Q0~Q7:数据并行输出端。 数据从SDA口送入74HC595,在每个SH_CP的上升沿,SDA口上的数据移入寄存器,在SH_CP的第 9个上升沿,数据开始从QS移出。如果把
2、第一个74HC595的QS和第二个74HC595的SDA相接,数据即移入第二个74HC595中, 照此一个一个接下去,可接任意多个。数据全部送完后,给ST_CP一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据即从并口Q0~Q7 输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了。 实验原理及内部结构: 如图所示: 74HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存器。寄存器和锁存器分别有各自的时钟输入(SH_CP和ST_CP),都是上升沿有效。当S
3、H_CP从低到高电平跳变时,串行输入数据(SDA)移入寄存器;当ST_CP从低到高电平跳变时,寄存器的数据置入锁存器。清除端(CLR)的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。当输出允许控制(EN)为高电平时,并行输出(Q0~Q7)为高阻态,而串行输出(QS)不受影响。74HC595最多需要5根控制线,即SDA、SH_CP、ST_CP、CLR和EN。其中CLR可以直接接到高电平,用软件来实现寄存器清零;如果不需要软件改变亮度,EN可以直接接到低电平,而用硬件来改变亮度。把其余三根线和单片机的I/O口相接,即可实现对LED的控制。数据从S
4、DA口送入74HC595,在每个SH_CP的上升沿,SDA口上的数据移入寄存器,在SH_CP的第9个上升沿,数据开始从QS移出。如果把第一个74HC595的QS和第二个74HC595的SDA相接,数据即移入第二个74HC595中,照此一个一个接下去,可接任意多个。数据全部送完后,给ST_CP一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据即从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了。。LED的亮度用PR1~PR3的阻值来控制。P1口的P115、P1
5、16、P117用来控制LED的显示,分别接到ST_CP、SH_CP和SDA脚。实验内容:按下图连接器件: 程序如下所示: C程序#include #include #define uchar unsigned char #define uint unsigned int sbit SDA = P1^1; sbit SHIFT = P1^2; sbit ST = P1^0; #define NOP _nop_() uchar led[] = {0x5b,0x3f,0x3f,0x6f}; ucha
6、r select[] = {0x0fe,0xfd,0xfb,0xf7}; uchar i=0; void Init( ) { SDA = 0; SHIFT = 0; ST = 0; } void delay() { uchar jj; for(jj=0;jj<200;jj++); while(jj--); } void display(uchar dat) { uchar ii; uchar sdata=dat; for(ii=0;ii<8;ii++) { if(
7、sdata&0x80) SDA=1; else SDA = 0; sdata<<=1; SHIFT =0; NOP; NOP; SHIFT = 1; NOP; NOP; } ST = 1; NOP; NOP; ST = 0; } void main() { Init(); while(1) { delay(); delay();
8、 P2 = select[i]; display(led[i]); i