请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3975|回复: 4

求8*8点阵显示汉子问题

 关闭 [复制链接]

2

主题

9

帖子

38

积分

新手上路

Rank: 1

积分
38
发表于 2017-5-25 22:38:06 | 显示全部楼层 |阅读模式
准备显示一个“你”字,用行扫描的方式显示行从上到下用0x01往左移动给每行从上到下的高电平

列码为:0xff,0xf3,0x85,0xa8,0xc5,0xA9,0xe5,0xed
可是写了程序后,就上四行显示正确,下四行不显示,而且通过一行一行测试,下四行每次一闪而过,而且显示的位置也不对,请老师们帮我解答下!!
以下为程序:
#include "reg51.h"
#include "intrins.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit SER=P3^4;
sbit shuchu=P3^5;
sbit yiwei=P3^6;
void delay(uint16 i){
        while(i--);
}
uint8 code liema[8]={0xff,0xf3,0x85,0xa8,0xc5,0xA9,0xe5,0xed};
void HC595(uint8 dat1,uint8 dat2){
        uint8 i;
        for(i=0;i<8;i++){
                SER=dat1>>7;
                yiwei=0;
                _nop_();
                _nop_();
                yiwei=1;
                dat1<<=1;
        }
        for(i=0;i<8;i++){
                SER=dat2>>7;
                yiwei=0;
                _nop_();
                _nop_();
                yiwei=1;
                dat2<<=1;
        }
        shuchu=0;
        _nop_();
        _nop_();
        shuchu=1;
}

void main(){
        uint8 hangsao,i;
        hangsao=0x01;
        i=0;
        while(1){
                HC595(liema[i],hangsao);
                delay(10);
                hangsao=_crol_(hangsao,1);
                i++;
                if(i==8){
                        i=0;
                }
        }
       //下边是我一行一行显示测试用的
        //HC595(liema[0],0x01);
        //HC595(liema[1],0x02);
        //HC595(liema[2],0x04);        //闪烁,为啥??
        //HC595(liema[3],0x08);
       
        //HC595(liema[4],0x10);  //一闪而过 显示不正确
        //HC595(liema[5],0x20);  //一闪而过 显示不正确
        //HC595(liema[6],0x40);  //一闪而过 显示不正确
        //HC595(liema[7],0x80);         //一闪而过 显示不正确
       
}


本帖子中包含更多资源

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

x
回复

使用道具 举报

20

主题

1343

帖子

8345

积分

论坛元老

Rank: 8Rank: 8

积分
8345
发表于 2017-5-26 08:28:58 | 显示全部楼层
我不知道你用的什么板子,我的是HC6800-ES-V2.0
我的程序现在是可以显示了的。你看看与你的区别在什么地方。
你的程序到我板子上什么都没有,你的数据用到我的板子上,阴阳相反,横纵相反。
#include<reg51.h>
#include<intrins.h>

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;

#define LKZ P0
#define LED P2

unsigned char code LKZP0[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char code XS[8]={0x10,0x3F,0x54,0x6A,0x3F,0x28,0x34,0x00};

void delay(unsigned int time)
{
  unsigned int j;
  for(time;time>0;time--)
    for(j=0;j<20;j++);
}

void XP74HC595(unsigned char dat)
{
        unsigned char a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
                if ((dat<<a)&0x80)
                {
                        SER=1;
                }
                else
                {
                        SER=0;
                }
                SRCLK=1;
                _nop_();
                _nop_();
                SRCLK=0;       
        }

        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
}

void main ()
{
        unsigned char k;
        LKZ=0xff;
        XP74HC595(0x00);

        while (1)
        {
                                for (k=0;k<8;k++)
                                {
                                        XP74HC595(XS[k]);//显示字模
                                        LKZ=LKZP0[k];
                                        LED=LKZP0[k];
                                        delay(10);
                                        LKZ=0xff;                       
                                        LED=0xff;
                                        XP74HC595(0x00);
                                }
        }
}

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

2

主题

9

帖子

38

积分

新手上路

Rank: 1

积分
38
 楼主| 发表于 2017-5-26 10:24:28 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-5-26 08:28
我不知道你用的什么板子,我的是HC6800-ES-V2.0
我的程序现在是可以显示了的。你看看与你的区别在什么地方 ...

我的是HC6800-EM3 V2.2(10,29)板子
点阵  行是共阳,列是共阴
回复 支持 反对

使用道具 举报

2

主题

9

帖子

38

积分

新手上路

Rank: 1

积分
38
 楼主| 发表于 2017-5-26 10:31:15 | 显示全部楼层
eerduosili 发表于 2017-5-26 10:24
我的是HC6800-EM3 V2.2(10,29)板子
点阵  行是共阳,列是共阴

麻烦看下,我的程序原理对吗?

还有 你的为啥定义了两个端口#define LKZ P0   #define LED P2
你的是P0和P2直接驱动点阵吗?既然直接驱动,为啥还有移位这些595的操作了?
我的是两个595驱动点阵的
回复 支持 反对

使用道具 举报

20

主题

1343

帖子

8345

积分

论坛元老

Rank: 8Rank: 8

积分
8345
发表于 2017-5-26 11:35:50 | 显示全部楼层
eerduosili 发表于 2017-5-26 10:31
麻烦看下,我的程序原理对吗?

还有 你的为啥定义了两个端口#define LKZ P0   #define LED P2

我的板子,列是P0控制,行是595控制。
难怪你会对595写两个数据了。
没有你那样的硬件,我模拟不了。
看到帮不到你了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 20:55 , Processed in 0.094022 second(s), 31 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表