16×16点阵LED显示汉字

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

以下程序在16×16点阵LED上依次显示“梅川酷子”四个字,分别用正向显示和反向显示,间隔两秒钟变换一次,电路图和效果图下图所示。 AT89 c52晶振频率为24MHz,用T0定时,改变变量flag值,从而让程序确定显示哪个汉字和显示方式(正向or反向)。

#include 或者#include

#define int8 unsigned char

#define int16 unsigned int

#define int32 unsigned long

int8 flag;

/*

flag变量

MSB 7 6 5 4 3 2 1 0 LSB

× ××

Bit5=1,Bit4=0 时,负向显示

Bit5=0,Bit4=1 时,负向显示

Bit[2..0]74HC138的片选信号

*/

int8 n;

int8 code table[][32]={

{0x88,0x00,0x88,0x00,0x88,0x7F,0x48,0x00,0xDF,0x1F,0xA8,0x10,0x9C,0x1 2,0xAC,0x14,0xEA,0x7F,0x8A,0x12,0x89,0x14,0x88,0x10,0x88,0x7F,0x08,0x 10,0x08,0x14,0x08,0x08},/*"梅",0*/

{0x08,0x20,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x2 1,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x04,0x 21,0x04,0x20,0x02,0x00},/*"川",1*/

{0x00,0x08,0xFE,0x08,0x28,0x0A,0x28,0x7E,0xFE,0x0A,0xAA,0x09,0xAA,0xF F,0xEA,0x00,0x86,0x00,0x82,0x7E,0xFE,0x42,0x82,0x42,0x82,0x42,0xFE,0x 7E,0x82,0x42,0x00,0x00},/*"酷",2*/

{0x00,0x00,0xF8,0x1F,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x00,0x0 1,0x00,0x41,0xFE,0xFF,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x 01,0x40,0x01,0x80,0x00}/*"子",3*/

};

void delay(void);

void main(void){

int8 i;

int8 j;

int8 index;

flag=0x10;

n=0;

//定时器T0初始化

TMOD=0x01;

TH0=0xb1;

TL0=0xe0;

ET0=1;

EA=1;

TR0=1;

while(1)

{

index=flag&0x03;

if((flag&0x30)==0x10)

{ //正向显示

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

{ //显示上半屏

P0=table[index][2*i];

//左上

P2=i|0x08;

delay();

P0=table[index][2*i+1];

//右上

P2=i|0x10;

delay();

}

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

{ //显示下半屏

P0=table[index][2*i];

//左下

P2=(i-8)|0x20;

delay();

P0=table[index][2*i+1];

//右下

P2=(i-8)|0x40;

delay();

}

}

if((flag&0x30)==0x20)

{ //反向显示

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

{

P0=~(table[index][2*i]);

//左上

P2=i|0x08;

delay();

P0=~(table[index][2*i+1]);

//右上

P2=i|0x10;

delay();

}

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

{

P0=~(table[index][2*i]);

//左下

P2=(i-8)|0x20;

delay();

P0=~(table[index][2*i+1]);

//右下

P2=(i-8)|0x40;

delay();

}

}

}

}

void delay(void){

int16 i;

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

}

void timer0() interrupt 1 using 3

{

TF0=0;

TH0=0xb1;

TL0=0xe0;

//10ms中断一次

if(n<200)

{

n++;

}

else

{ //2秒改变一次

switch(flag)

{

case 0x10:

{

flag=0x11;//下次显示正向“川”

break;

}

case 0x11:

{

flag=0x12;//下次显示正向“酷”

break;

}

case 0x12:

{

flag=0x13;//下次显示正向“子”

break;

}

case 0x13:

{

flag=0x20;//下次显示负向“川”

break;

}

case 0x20:

{

flag=0x21;//下次显示负向“梅”

break;

}

case 0x21:

{

flag=0x22;//下次显示负向“酷”

break;

}

case 0x22:

{

flag=0x23;//下次显示负向“子”

break;

相关文档
最新文档