#include <AT89X52.H>
#include "74HC595.H"
unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//延时99835us,约延时100ms
void delay(void)
{
unsigned char i,j,k;
for(k=10;k>0;k--)
for(j=20;j>0;j--)
for(i=248;i>0;i--);
}
void main(void)
{
unsigned char i,j;
while(1)
{
for(j=0;j<3;j++)//从左到右3次
{
for(i=0;i<8;i++)
{
Ser_IN(taba[i]);//8X8点阵列扫描
Ser_IN(0xff);//8X8点阵传送扫描数据
Par_OUT();//74HC595输出显示
delay();
}
}
/*
for(j=0;j<3;j++)//从右到左3次
{
for(i=0;i<8;i++)
{
Ser_IN(taba[7-i]);//8X8点阵列扫描
Ser_IN(0xff);//8X8点阵传送扫描数据
Par_OUT();//74HC595输出显示
delay();
}
}
for(j=0;j<3;j++)//从上到下3次
{
for(i=0;i<8;i++)
{
Ser_IN(0x00);//8X8点阵列扫描
Ser_IN(tabb[i]);//8X8点阵传送扫描数据
Par_OUT();//74HC595输出显示
delay();
}
}
for(j=0;j<3;j++)//从下到上3次
{
for(i=0;i<8;i++)
{
Ser_IN(0x00);//8X8点阵列扫描
Ser_IN(tabb[7-i]);//8X8点阵传送扫描数据
Par_OUT();//74HC595输出显示
delay();
}
}
*/
}
}
//Note: 74HC595驱动
// __ __
//Note: MR 主复位接电源正极, OE 使能端,输出有效接电源负极
/*--------------------------------------------*/
#ifndef __74HC595_H__
#define __74HC595_H__
/*--------------------------------------------*/
sbit SD = P0^4; //串行数据输入
sbit ST_CK = P0^5; //存储寄存器时钟输入
sbit SH_CK = P0^6; //移位寄存器时钟输入
/*--------------------------------------------*/
//数码管断码和位码的定义
//unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0xff};
//0 1 2 3 4 5 6 7 8 9 a b c d e f 8 无
//unsigned char code pos[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//1 2 3 4 5 6 7 8
/*--------------------------------------------*/
//函数声明
void Ser_IN(unsigned char Data); //串行数据输入
void Par_OUT(void); //并行数据输出
//void Ser_Par(unsigned char Data); //串行输入,并行输出
/*--------------------------------------------*/
//串行数据输入
void Ser_IN(unsigned char Data)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
SH_CK = 0; //CLOCK_MAX=100MHz
SD = Data & 0x80;
Data <<= 1;
SH_CK = 1;
}
}
/*--------------------------------------------*/
//并行数据输出
void Par_OUT(void)
{
ST_CK = 0;
ST_CK = 1;
}
/*--------------------------------------------*/
//串行输入,并行输出
/*void Ser_Par(unsigned char Data)
{
Ser_IN(Data);
Par_OUT();
}
*/
/*--------------------------------------------*/
#endif
照道理,8列点阵应该按顺利点亮,但是只有第2列和第6列点亮,小弟不才,检查不出代码错误!!!硬件设备应该没问题的。
|