单片机实验7:LED点阵显示

一、实验目的以及要求

(1)利用单片机并行控制LED点阵显示。

(2)掌握单片机与LED点阵块之间接口电路设计及编程。

二、实验原理

三、实验内容和步骤

利用取模软件建立标准字库,编制程序实现点阵循环左移显示汉字。

1、用8芯线将点阵显示区的JHPC连接至8255实验区的JX16,JHP1连接至系统接口区的JP1,JLPA连接至8255实验区的JX9,JLPB连接至8255实验区的JX15;

2、运行程序LEDQDB.ASM即可左移显示“启东计算机总厂OK”字样。

四、实验代码

实验代码:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define com8255 XBYTE[0xff2b]       //8255控制口
#define pa8255 XBYTE[0xff28]        //8255 PA口
#define pb8255 XBYTE[0xff29]        //8255 PB口
#define pc8255 XBYTE[0xff2a]        //8255 PC口
sbit c=PSW^7;
bit flag=0;
uchar x1,x,y,temp,tp;
uint code table[128]=
{
/*--  文字:  鹏   --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16???--*/
0x00,0x7F,0x44,0x7F,0x00,0x7F,0x44,0x7F,0x00,0x3F,0x68,0xA4,0x21,0x3F,0x00,0x00,
0x06,0xF8,0x44,0xFD,0x02,0xFC,0x41,0xFF,0x00,0xC8,0x48,0x48,0x4A,0x41,0x7E,0x00,
/*--  文字:  梅  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x08,0x0B,0xFF,0x0A,0x09,0x10,0xEF,0x28,0x2A,0x29,0x28,0x2F,0x20,0x00,0x00,
0x20,0xC0,0x00,0xFF,0x00,0x80,0xB8,0xC8,0x88,0xAA,0x99,0x8A,0xFC,0x88,0x80,0x00,
/*--  文字:  4  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x01,0x02,0x0C,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x60,0xA0,0x24,0x24,0xFC,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  7  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x18,0x10,0x10,0x11,0x16,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7C,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};



//*********************************************
//MON51必须用到的
code unsigned char stop[3] _at_ 0x3b;
//*********************************************

void delay(unsigned int i)         //延时程序
{
   unsigned int j,k;
   for(k=0;k<i;k++)
   for(j=0;j<100;j++);  
}

void main(void)
 {
  com8255=0x80;  //PA输出口、PB输出口、PC输出口、方式0 	  1000 0000
  pa8255=0xff;
  pb8255=0xff;
  while(1)
  {
  x1=0x00;
  do {uchar p,counter1,counter2;
   unsigned int j,k,d;
   for(k=0;k<1;k++)
      {
       for(j=0;j<10;j++)
         {counter1=0x00;
          counter2=0x00;
          x=x1;
          y=0x01;
          c=0;
  while(counter1<0x08)
      {counter1++;
       pc8255=table[x];    //掌握分析PC口在16*16LED显示中的作用 
       temp=0x10+x;
       P1=table[temp];     //掌握分析P1口在16*16LED显示中的作用
       x++;
       temp=x;
       temp=temp&0x0f;
       if(!temp){temp=0x10+x;x=temp;}
       c=0;
       tp=~y;
       pa8255=tp;    //掌握分析PA口在16*16LED显示中的作用 
       d=70;
       while(d--){};
       pa8255=0xff;
       pb8255=0xff;
       y=_crol_(y,1);  //掌握分析y在16*16LED显示中的作用
      }
       c=0;
       y=0x01;
  while(counter2<0x08)
      { counter2++;
        pc8255=table[x];
        temp=0x10+x;
        P1=table[temp];
        x++;
        temp=x;
        temp=temp&0x0f;
        if(!temp){temp=0x10+x;x=temp;}
        c=0;
        tp=~y;
        pb8255=tp;   //掌握分析PB口在16*16LED显示中的作用
        d=70;
        while(d--){};
        pa8255=0xff;
        pb8255=0xff;
        y=_crol_(y,1);
      }
     }
  }
      x1++;
      temp=x1;
      temp=temp&0x0f;
      if(!temp) {temp=0x10+x1;x1=temp;}
     }
     while(x!=0x00);
  }
}

  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

x陌北x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值