一、实验目的以及要求
(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);
}
}