#include "reg51.h"
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void main()
{
Hc595SendByte(0x80);
P0=0x7f;
while(1);
}
教程程序如上,1.宏定义、所用数据类型定义
2.所用IO口定义,
3.74HC595芯片调用程序(移位、寄存、输出,循环8次)
4.主函数,595控制行,P0控制列
程序烧录后,我看到点亮的是一列LED时,人都蒙了,还以为是代码错了...改来改去,最后啥也没变。
在网上看了些资料后发现,原来74H595芯片的JOE要接地才能正常使用,如果接高电平,不能正常使用,
那么生效语句为P0=0x7f;,则只会第一列亮。
将JOE与GND连接后,将教程程序重新烧录,单片机上就会显示一个LED亮了。