该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
#include
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit SRCLK=P3^6; //锁存高电平有效 164CP
sbit RCLK=P3^5; //时钟 164MR
sbit SER=P3^4; //数据 164dsa dsb
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
void delay(u16 i)
{
while(i--);
}
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()
{ u8 i;
Hc595SendByte(0x81);
// P0=0x7f;
while(1)
{
for(i=0;i<16;i++) //将led左移一位
{
Hc595SendByte(smgduan[i]);
delay(50000); //大约延时450ms
}
}
}
我没测试,应该可以用的。理论上是没错的,你试下吧。MR可以不接先试下。单块164可以,多块164级联MR必须接。