前言:
而今我们对“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点阵