89c52开发板,如何利用74HC595驱动一个数码管,0到9循环?

发布时间:2019-08-09 15:06:43

89c52开发板, 如何利用74HC595驱动一个数码管,0到9循环?

推荐回答

#include&lt;reg52.h&gt; #include &lt;intrins.h&gt; #define uint unsigned int #define uchar unsigned char #define nop() _nop_();_nop_(); /*************************************************************/ sbit SCLR = P2^3; //移位寄存器清零端,对应 595 的 10脚 sbit SCK = P2^2; //移位寄存器时钟输入,对应595 的 11脚 SCK sbit RCK = P2^1; //存储寄存器时钟输入,对应595 的12 脚 RCK sbit SI = P2^0; //串行数据输入,对应 595的 14 脚 SI /*************************************************************/ uchar code table[]={0xc0,0xf9,0xa4,0xb0, <br> 0x99,0x92,0x82,0xf8, <br> 0x80,0x90,0x88,0x83, <br> 0xc6,0xa1,0x86,0x8e <br> }; //共阳极数码管编码表 void delayms(uint xms) { uchar i; while(xms--) for(i=0;i&lt;114;i++); } /*********************************************************** 74HC595数据输入 ************************************************************/ void WR_74HC595(uchar Data) { uchar i; //////////////移入串行数据 for(i = 0; i &lt; 8; i++) //循环 8次,刚好移完8位 { SCK= 0; //先将移位寄存器控制引脚置为低 SI = (bit)(Data &amp; 0x80); //取数据的最高位 Data &lt;&lt;= 1; //将数据的次高位移到最高位 SCK = 1; //再置为高,产生移位时钟上升沿,上升沿时数据寄存器的数据移位 } //////////////锁存 RCK = 0; //先将存储寄存器引脚置为低 _nop_(); //延时 RCK = 1; //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。 _nop_(); //延时 RCK = 0; //先将存储寄存器引脚置为低 } /************************************************************** 主函数 *****************************************************************/ void main(void) { uchar i; SCLR=1; P2= 0X0f; //四位数码管同时选中 P4 ~ P7输出 0 while(1) { for(i=0; i&lt;10; i++) //显示 0-9 { WR_74HC595(table[i]); //传段码 delayms(500); //延迟时间 2ms以内 } } }
以上问题属网友观点,不代表本站立场,仅供参考!