【郭天祥 TX-1C经典版 51单片机开发板试用体验】+LED点阵

  • wambob
  • LV4工程师
  • |      2017-09-05 11:31:57
  • 浏览量 1193
  • 回复:0
本帖最后由 wambob 于 2017-9-5 12:53 编辑 有些51单片机开发板上带有一个或几个8x8的LED点阵。如果全部使用IO口,需要占用8个IO。使用串入并出IC如74HC595可以节约IO。例如: 通过一行一行扫描,显示8列对应的数据。利用人眼的余晖效应可以看到整个8X8显示,同时为了保证图像的不闪,同一个8x8点整数据要重复50次。即电视或监视器的场频或帧频。 32x64的点阵图比8x8相对要复杂点,两个3-8译码器负责选通驱动上、下16行之一,74HC595级联负责驱动64列。一共使用了32个8x8点阵模块。 显示基本原理同8x8点阵。 32x64点阵接口: A、B、C、D是由2个3-8译码器组成的4-16线输入端; EN,译码器输出使能端; R1、R2、G1、G2双色屏的上下半屏数据输入端; SCR,74HC595时钟信号; STR,74HC数据输出锁存。 实物及连接图: 显示上、下板屏的第一行: 代码
#include         



sbit SEG_DLE =P2^6;

sbit SEG_WLE =P2^7;

  

sbit IA  =P0^0;  //行控制线A

sbit IB  =P0^1;  //行控制线B

sbit IC  =P0^2;  //行控制线C

sbit ID  =P0^3;  //行控制线D



sbit STR=P0^5;              //锁存         

sbit SCK=P0^4;                    //时钟         

sbit R1= P0^6;            //上半屏数据         

//sbit En= P0^4;                          EN=1;

sbit R2= P0^7;                          //下半屏数据          



#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;}   





void HScan(unsigned char Value)

{switch(Value)

        {case  15: scan0;break;

                  case  0: scan1;break;

                   case  1: scan2;break;

                    case  2: scan3;break;

             case  3: scan4;break;

                      case  4: scan5;break;

                       case  5: scan6;break;

                        case  6: scan7;break;

                 case  7: scan8;break;

                       case  8: scan9;break;

                      case 9:scan10;break;

                     case 10:scan11;break;

            case 11:scan12;break;

                  case 12:scan13;break;

                 case 13:scan14;break;

            case 14:scan15;break;

           default:break;

        }

}         

void delayms(unsigned int xms)

 {

  unsigned int i,j;

  for(i=xms;i>0;i--)

     for(j=110;j>0;j--);

 }



void send_R1(unsigned char *d)//发送数据

{   unsigned char i,TEMP;     

    TEMP=*d;             

for(i=0;i<8;i++)

       {

        if((TEMP<);

                          send_R2(&displayH);

                 }

                  STR=1;

                 HScan(15);

                 delayms(10) ;



        }  



}

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子