单片机通过74HC595控制8个LED循环点亮,按照D16-D15-D14......D9依次循环,每次亮一个。仿真看着没问题,实物运行起来会有不止一个LED亮起来,学艺不精,找了很久没找到问题根源,还请大佬指点迷津。 单片机型号STC89C52,晶振12MHz。电路、程序、现象还请看一下附件,先谢过了。
单片机源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- sbit RCK=P3^5; // Pin12 输出锁存控制脉冲
- sbit SER=P3^4; // Pin14 串行数据输入
- sbit SCK=P3^6; // Pin11 移位脉冲
- void HC595_Send(unsigned char byte);
- void Delay();
- void main()
- {
- unsigned char i;
- unsigned char buffer[8]={0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE};
-
- while(1)
- {
- for(i=0;i<8;i++) //循环点亮单个LED
- {
- HC595_Send(buffer[i]);
- Delay();
- }
- }
- }
- /*驱动HC595*/
- void HC595_Send(unsigned char byte)
- {
- unsigned char i;
- for(i=0;i<8;i++) //写入移位寄存器
- {
- SCK=0;
- SER=byte>>7;
- byte<<=1;
- SCK=1;
- }
-
- RCK=0; //锁存时钟产生上升沿更新输出
- _nop_();
- RCK=1;
- }
- /*延时*/
- void Delay() //@12.000MHz
- {
- unsigned char i, j, k;
- _nop_();
- i = 8;
- j = 154;
- k = 122;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
复制代码
|