8X8点阵测试小实验问题

[复制链接]
2316|9
 楼主| yunan0808 发表于 2013-7-26 17:26 | 显示全部楼层 |阅读模式
#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列点亮,小弟不才,检查不出代码错误!!!硬件设备应该没问题的。



dirtwillfly 发表于 2013-7-26 19:33 | 显示全部楼层
这是51的问题耶。楼主的电路图是什么样的?也传上来看看啊,对照电路图才能知道程序有没有问题。
NE5532 发表于 2013-7-26 21:12 | 显示全部楼层
认为有问题,才能找到问题,楼主先从串并转换底层函数测起,不要想一口吃个胖子哈。
 楼主| yunan0808 发表于 2013-7-27 09:30 | 显示全部楼层
NE5532 发表于 2013-7-26 21:12
认为有问题,才能找到问题,楼主先从串并转换底层函数测起,不要想一口吃个胖子哈。 ...

那个74HC595.H头文件我已经检查过了,实在找不出问题!:'(
 楼主| yunan0808 发表于 2013-7-27 09:33 | 显示全部楼层
dirtwillfly 发表于 2013-7-26 19:33
这是51的问题耶。楼主的电路图是什么样的?也传上来看看啊,对照电路图才能知道程序有没有问题。 ...

         

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
NE5532 发表于 2013-7-27 22:20 | 显示全部楼层
yunan0808 发表于 2013-7-27 09:30
那个74HC595.H头文件我已经检查过了,实在找不出问题!

不是要你查,是要你测,595输出一个字节测过了没?

评分

参与人数 1威望 +6 收起 理由
dirtwillfly + 6 正解

查看全部评分

dirtwillfly 发表于 2013-7-28 10:14 | 显示全部楼层
另外,也不要完全排除硬件问题。
 楼主| yunan0808 发表于 2013-7-28 11:32 | 显示全部楼层
NE5532 发表于 2013-7-27 22:20
不是要你查,是要你测,595输出一个字节测过了没?

嗯,是这里出问题了,没注意细节啊!!!谢谢帮助啊!!!
NE5532 发表于 2013-7-28 15:44 | 显示全部楼层
yunan0808 发表于 2013-7-28 11:32
嗯,是这里出问题了,没注意细节啊!!!谢谢帮助啊!!!

呵呵,不是细节,是方法。以后记得程序要边写边调。
 楼主| yunan0808 发表于 2013-7-28 23:37 | 显示全部楼层
NE5532 发表于 2013-7-28 15:44
呵呵,不是细节,是方法。以后记得程序要边写边调。

前辈多多指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

25

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部