#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit cp=P2^4; //74hc164芯片的脉冲端
sbit dsb=P2^5; //74hc164芯片的数据输入端
sbit wei=P2^7;
sbit du=P2^6;
uchar code table[]={0xef,0x01,0x6d,0x6d,0x01,0xef,0xef,0xef}; //列值,HC573
uchar code sheet[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //行值 HC164
/************************************************************************************************/
void delay_xms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--); //12MHz下时间为1002us=1.002ms //y=115时,11.0592MHz
} //时间为1.00044ms
/***********************************************************************************************/
void shift(uchar temp)
{
uint i;
for(i=8;i>0;i--)
{
dsb=temp&0x80;
cp=0;
cp=1;
temp<<=1; //74hc164同步移位首先移到D0位
}
}
/************************************************************************************************/
/***********************************************************************************************/
void main()
{
uint j;
wei=1;
P0=0xff;
wei=0;
while(1)
{
for(j=0;j<8;j++)
{
du=1;
P0=table[j];
du=0;
shift(sheet[j]);
delay_xms(1);
du=1; P0=0xff;
du=0;
shift(0x00); //顺序反了也不能消隐
}
}
}
|