龙空技术网

51单片机学习22-88点阵动态显示

小果学电子 868

前言:

而今我们对“c语言88点阵”都比较重视,朋友们都需要了解一些“c语言88点阵”的相关资讯。那么小编也在网摘上网罗了一些对于“c语言88点阵””的相关资讯,希望看官们能喜欢,各位老铁们快快来学习一下吧!

88点阵动态显示

硬件组成:单片机最小系统+88点阵+按键

图形移动模式 切换 1 跳动 2 上移 3 下移 4 左移 5 右移

显示内容汉字 一 二 三 四。四个字

仿真图:

程序:

源代码

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

// 左右移动 取码方式 阴码逐列

uchar code TAB[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏

0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,/*"一",0*/

0x00,0x40,0x44,0x44,0x44,0x44,0x40,0x00,/*"二",1*/

0x00,0x40,0x54,0x54,0x54,0x54,0x42,0x00,/*"三",2*/

0x00,0x7E,0x52,0x5E,0x42,0x5E,0x52,0x7E,/*"四",3*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏, //空屏

};

// 上下移动及翻页 取模方式 阳码逐行

uchar code TAB1[]={

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏

0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,/*"一",0*/

0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0x81,0xFF,/*"二",1*/

0xFF,0xBF,0xC3,0xFF,0xC3,0xFF,0x81,0xFF,/*"三",2*/

0xFF,0x81,0xA9,0xA9,0xA9,0x9D,0xBD,0x81,/*"四",3*/

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏

};

uchar idata Buffer[48]={0}; //缓存显示单元

sbit key1=P3^2; //外部中断

uchar num=0;//用于图形移动切换

char i,t;

void delay(uchar t)

{

while(t--)

{;}

}

void delay_ms(uint z) //延时子程序

{

uint x,y;

for(x=z;x>0;x--)

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

}

void right(void)

{

uchar N,T;

for(N=0;N<40;N++) //循环扫描一遍6帧

{

for(T=0;T<70;T++) //速度

{

P1=0x7f; //0111 1111 第一列开始

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

{

P0=TAB[i+N];

delay(100);

delay_ms(1);//实物消影

P0=0X00; //实物消影

P1=P1>>1|P1<<7; //0011 1111 | 1000 0000 =1011 1111 相当于移位一位

}

}

}

}

void left(void)

{

uchar N,T;

uchar m,n;

for(m=0;m<6;m++)

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

Buffer[8*m+n]=TAB[7-n+m*8]; //将TAB数组中的数据重新排列

for(N=0;N<40;N++) //循环扫描一遍40帧

{

for(T=0;T<60;T++) //移动速度

{

P1=0xfe;

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

{

P0=TAB[i+N];

delay(100);

delay_ms(1);//实物消影

P0=0X00; //实物消影

P1=P1<<1|P1>>7; //扫描起始列为第一行

}

}

}

}

void up(void)

{

uchar N,T;

for(N=0;N<40;N++) //循环扫描一遍40帧

for(T=0;T<60;T++) //移动速度

{

P0=0x01;

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

{

P1=TAB1[i+N];

delay(100);

delay_ms(1);//实物消影

P1=0XFF; //实物消影

P0=P0<<1|P0>>7;

}

}

}

void down(void)

{

uchar N,T;

uchar m,n;

for(m=0;m<6;m++)

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

Buffer[8*m+n]=TAB1[7-n+m*8]; //将TAB数组中的数据重新排列

for(N=0;N<40;N++) //循环扫描一遍6帧

for(T=0;T<70;T++) //速度

{

P0=0x80;

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

{

P1=Buffer[i+N];

delay(100);

delay_ms(1);//实物消影

P1=0XFF; //实物消影

P0=P0>>1|P0<<7; //扫描起始行

}

}

}

void dongtai(void)

{

uchar N,T;

for(N=0;N<6;N++) //循环扫描一遍6帧 一次扫描完成一个,很快

for(T=0;T<100;T++) //速度

{

P0=0x01;

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

{

P1=TAB1[i+8*N];

delay(100);

delay_ms(1);//实物消影

P1=0XFF; //实物消影

P0=P0<<1|P0>>7;

}

}

}

void main(void)

{

EA=1;

EX0=1;//开启外部中断0

IT0=1;//触发方式为下降沿 按键按下就触发

while(1);

}

void wbINT0() interrupt 0

{

num++;

if(num==6)

{

num=0;

}

switch (num)

{

case 1: dongtai();break;

case 2: up();break;

case 3: down();break;

case 4: left();break;

case 5: right();break;

default: P0=0XFF; P1=0XFF;break;

}

}

仿真结果:

标签: #c语言88点阵