找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2191|回复: 5
打印 上一主题 下一主题
收起左侧

新手求救,51单片机+08接口点阵屏显示不正常

[复制链接]
跳转到指定楼层
楼主

想用8个0x11点亮上半个屏幕(16行)每行应该是0001000100010001001....即3个灯灭1个灯亮重复16次
但实际却是1111111111111111111....整个屏幕都在发光

请大神看下代码,出出主意



#include<STC12C5A60S2.H>

#define  uchar         unsigned char  
#define  uint  unsigned int


sbit IA  =P2^0;
sbit IB  =P2^1;
sbit IC  =P2^2;
sbit ID  =P2^3;

#define  scan0    {IA=0;IB=0;IC=0;ID=0;}
#define  scan1    {IA=1;IB=0;IC=0;ID=0;}
#define  scan2    {IA=0;IB=1;IC=0;ID=0;}
#define  scan3    {IA=1;IB=1;IC=0;ID=0;}
#define  scan4    {IA=0;IB=0;IC=1;ID=0;}
#define  scan5    {IA=1;IB=0;IC=1;ID=0;}
#define  scan6    {IA=0;IB=1;IC=1;ID=0;}
#define  scan7    {IA=1;IB=1;IC=1;ID=0;}
#define  scan8    {IA=0;IB=0;IC=0;ID=1;}
#define  scan9    {IA=1;IB=0;IC=0;ID=1;}
#define scan10    {IA=0;IB=1;IC=0;ID=1;}
#define scan11    {IA=1;IB=1;IC=0;ID=1;}
#define scan12    {IA=0;IB=0;IC=1;ID=1;}
#define scan13    {IA=1;IB=0;IC=1;ID=1;}
#define scan14    {IA=0;IB=1;IC=1;ID=1;}
#define scan15    {IA=1;IB=1;IC=1;ID=1;}

sbit SH=P2^7;
sbit ST=P2^6;
sbit R1=P1^0;
sbit R2=P1^1;
sbit G1=P1^2;
sbit G2=P1^3;
sbit OE=P2^5;

void scan(unsigned char Value)  
{switch(Value)
        {case  0: scan0;break;
                  case  1: scan1;break;
                   case  2: scan2;break;
                    case  3: scan3;break;
             case  4: scan4;break;
                      case  5: scan5;break;
                       case  6: scan6;break;
                        case  7: scan7;break;
                 case  8: scan8;break;
                       case  9: scan9;break;
                      case 10:scan10;break;
                     case 11:scan11;break;
            case 12:scan12;break;
                  case 13:scan13;break;
                 case 14:scan14;break;
            case 15:scan15;break;
           default:break;
        }
}

void WriteR1(unsigned char byte)   
{
        unsigned int i;
        for(i=0;i<8;i++)
        {
                SH=1;
                R1=byte&(0x80>>i);
                SH=0;
        }
}
void WriteR2(unsigned char byte)
{
        unsigned int i;
        for(i=0;i<8;i++)
        {
                SH=1;
                R2=byte&(0x80>>i);
                SH=0;
        }
}
void WriteG1(unsigned char byte)
{
        unsigned int i;
        for(i=0;i<8;i++)
        {
                SH=0;
                G1=byte&(0x80>>i);
                SH=1;
        }
}

void WriteG2(unsigned char byte)
{
        unsigned int i;
        for(i=0;i<8;i++)
        {
                SH=0;
                G2=byte&(0x80>>i);
                SH=1;
        }
}



void main()
{

        while(1)
        {
        unsigned int i,j;
                        for(i=0;i<16;i++)  //16DDé¨Ãè
                {
                        OE=0;
                        for(j=0;j<8;j++){
                                WriteR1(0x11);
                                WriteR2(0x00);
                                WriteG1(0x00);
                                WriteG2(0x00);
                        }
                        ST=0;
                        scan(i);
                        ST=1;
                        OE=1;
                       
                }
        }
        }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390416 发表于 2021-5-12 08:00 | 只看该作者

这种就是08接口的,ABCD控制0~16行。
回复

使用道具 举报

板凳
ID:68189 发表于 2021-5-12 14:36 | 只看该作者
至少有电原理图啥的参考,才能明白你要干嘛,都是代码,难道你以为别人都 是神仙吗
回复

使用道具 举报

地板
ID:844772 发表于 2021-5-12 15:10 | 只看该作者
好几个函数中有类似: = byte&(0x80>>i); 的,建议 改为 =(byte<<i)&0x80;

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:908326 发表于 2021-5-12 16:27 | 只看该作者
glinfei 发表于 2021-5-12 15:10
好几个函数中有类似: = byte&(0x80>>i); 的,建议 改为 =(byte

多谢,今天回家试试
回复

使用道具 举报

6#
ID:908326 发表于 2021-5-12 16:28 | 只看该作者
wpppmlah 发表于 2021-5-12 14:36
至少有电原理图啥的参考,才能明白你要干嘛,都是代码,难道你以为别人都 是神仙吗

回家画完Proteus上传
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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