#include "reg51.h"
#include "intrins.h" //移位必须用的语句
typedef unsigned char u8; //变量命名
//typedef unsigned int u16;
sbit srclk=P3^6; //11号引脚,移位寄存器时钟输入
sbit rclk=P3^5; //12号引脚,储存寄存器时钟输入
sbit ser=P3^4; //14号引脚,串行数据输入
u8 code hanga[]={0x00,0x49,0x49,0x7f,0x49,0x49,0x00,0x00}; //D7-D0,D7最高位
//u8 code hangb[]={0x08,0x10,0x3f,0x49,0x2d,0x7f,0x2d,0x09}; //D7-D0
u8 code lie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //P0^7-P0^0,P0^7是最高位
void dbyte(u8 dat) //输入dat到595芯片
{
u8 i; //变量定义
srclk=0; //初始化
rclk=0;
for(i=0;i<8;i++) //循环移位8次,因为有八次数据
{
ser=dat>>7; //把数据最高位右移到最低位
dat<<=1; //然后把后面的数据左移一位
srclk=1; //上升沿,将数据串行输入
_nop_(); //一个机器周期 延时
_nop_();
srclk=0; //再拉低
}
rclk=1; //上升沿,将数据送入储存存器
_nop_();//一个机器周期 延时
_nop_();
rclk=0; //再拉低储存起来
}
void delay(int i)
{
while(i--); //延时函数
}
void main(void)
{
u8 i; //变量定义
while(1)
{
for(i=0;i<8;i++) //循环8次
{
P0=lie[i]; //选通列
dbyte(hanga[i]); //送入行
delay(100); //延时
dbyte(0x00);//消影
}
}
}