打印

8X8点阵测试小实验问题

[复制链接]
1630|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#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头文件我已经检查过了,实在找不出问题!:'(

使用特权

评论回复
5
yunan0808|  楼主 | 2013-7-27 09:33 | 只看该作者
dirtwillfly 发表于 2013-7-26 19:33
这是51的问题耶。楼主的电路图是什么样的?也传上来看看啊,对照电路图才能知道程序有没有问题。 ...

           

使用特权

评论回复
6
NE5532| | 2013-7-27 22:20 | 只看该作者
yunan0808 发表于 2013-7-27 09:30
那个74HC595.H头文件我已经检查过了,实在找不出问题!

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

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
dirtwillfly + 6 正解
7
dirtwillfly| | 2013-7-28 10:14 | 只看该作者
另外,也不要完全排除硬件问题。

使用特权

评论回复
8
yunan0808|  楼主 | 2013-7-28 11:32 | 只看该作者
NE5532 发表于 2013-7-27 22:20
不是要你查,是要你测,595输出一个字节测过了没?

嗯,是这里出问题了,没注意细节啊!!!谢谢帮助啊!!!

使用特权

评论回复
9
NE5532| | 2013-7-28 15:44 | 只看该作者
yunan0808 发表于 2013-7-28 11:32
嗯,是这里出问题了,没注意细节啊!!!谢谢帮助啊!!!

呵呵,不是细节,是方法。以后记得程序要边写边调。

使用特权

评论回复
10
yunan0808|  楼主 | 2013-7-28 23:37 | 只看该作者
NE5532 发表于 2013-7-28 15:44
呵呵,不是细节,是方法。以后记得程序要边写边调。

前辈多多指点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

25

帖子

0

粉丝