📄 mov_right_up.c
字号:
/*******************************
; 点阵显示
;
;P2.5--P2.0口是行驱动,选择任一行亮,P2.4控制前16行的开关允许,P2.5控制后16行的开关允许;
;P1.4--P1.0口是列驱动,锁存任一点阵数据,P1.4是锁存的开关允许,0开,1关.
;P0作为数据输出口;
;P3.3,P3.4分别是E2PROM的SDA和SCL口.
;*********************************/
#include<reg52.h>
#define uchar unsigned char
bit mov_left,mov_up;
sbit e_U_ROW=0xA4;
sbit e_D_ROW=0xA5;
sbit e_LIND=0x94;
unsigned char data mark1,b;
unsigned char idata dis[128];
//void mov_up();
//void mov_left();
void delay(unsigned int);
void clear();
void main(void)
{ register uchar data i,j,k,l,flat;
uchar code BMP[][128] = // 数据表
{
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x70,0x00,//"动",
0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x30,0x00,0xF8,0x0F,0x30,0x00,
0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x08,0x00,0x00,0xFF,0x1F,0x00,0x00,0x30,0x18,
0x00,0xC0,0x30,0x18,0xFC,0x3F,0x30,0x18,0x80,0x03,0x30,0x18,0x80,0x03,0x30,0x18,
0x80,0x01,0x10,0x18,0xC0,0x00,0x10,0x18,0x40,0x08,0x18,0x18,0x60,0x10,0x18,0x18,
0x20,0x30,0x18,0x18,0x10,0x60,0x0C,0x18,0x08,0x60,0x0C,0x08,0xCC,0xDF,0x04,0x08,
0xFC,0xC0,0x06,0x08,0x08,0x40,0x03,0x0C,0x00,0x80,0x01,0x0C,0x00,0x80,0x00,0x0C,
0x00,0x40,0xE0,0x07,0x00,0x30,0x80,0x07,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00},
/*"感"*/{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x88,0x01,
0x00,0x00,0x08,0x03,0x20,0x00,0x08,0x13,0xE0,0xFF,0xFF,0x3F,0x60,0x00,0x18,0x00,
0x60,0x00,0x18,0x00,0x60,0x00,0x19,0x04,0x60,0xFF,0x1B,0x0E,0x60,0x00,0x1C,0x06,
0x60,0x00,0x10,0x03,0x60,0x06,0xB3,0x01,0x60,0xFE,0xB3,0x01,0x20,0x06,0xE1,0x00,
0x20,0x06,0x61,0x00,0x30,0x06,0xF1,0x10,0x10,0xFE,0xD9,0x11,0x18,0x06,0x8F,0x13,
0x08,0x00,0x06,0x3E,0x04,0x00,0x01,0x3C,0x02,0xC2,0x01,0x20,0x00,0x8E,0x03,0x03,
0x20,0x06,0x03,0x06,0x20,0x06,0x02,0x0C,0x30,0x06,0x20,0x0C,0x38,0x06,0x60,0x0C,
0x18,0x06,0x60,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*"地"*/{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x00,0x38,0x00,
0xC0,0x00,0x18,0x00,0xC0,0x00,0x18,0x00,0xC0,0x40,0x18,0x00,0xC0,0xC0,0x18,0x00,
0xC0,0x40,0x18,0x00,0xC0,0x40,0x18,0x04,0xC0,0x40,0x18,0x0F,0xC0,0x44,0xD8,0x04,
0xC0,0x44,0x38,0x04,0xFC,0x43,0x1F,0x04,0xC0,0xC0,0x18,0x04,0xC0,0x78,0x18,0x04,
0xC0,0x44,0x18,0x04,0xC0,0x40,0x18,0x04,0xC0,0x40,0x18,0x04,0xC0,0x40,0x18,0x04,
0xC0,0x40,0x18,0x06,0xC0,0x40,0xD8,0x07,0xC0,0x40,0x18,0x13,0xC0,0x4C,0x18,0x10,
0xC0,0x43,0x08,0x10,0xF0,0x40,0x00,0x10,0x3E,0xC0,0x00,0x30,0x0C,0xC0,0x00,0x70,
0x00,0xC0,0xFF,0x3F,0x00,0x80,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*"带*/{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x00,0x00,0x86,0xE3,0x00,
0x00,0x86,0x61,0x00,0x00,0x86,0x61,0x00,0x00,0x86,0x61,0x08,0xF8,0xFF,0xFF,0x1F,
0x00,0x86,0x61,0x00,0x00,0x86,0x61,0x00,0x00,0x86,0x61,0x00,0x00,0x86,0x60,0x00,
0x00,0x00,0x00,0x10,0xF0,0xFF,0xFF,0x3F,0x10,0x80,0x00,0x38,0x18,0x80,0x03,0x0C,
0x1C,0x80,0x01,0x04,0x88,0x80,0x01,0x03,0x00,0xFF,0xFF,0x03,0x00,0x81,0x81,0x01,
0x00,0x81,0x81,0x01,0x00,0x81,0x81,0x01,0x00,0x81,0x81,0x01,0x00,0x81,0x81,0x01,
0x00,0x81,0x81,0x01,0x00,0x81,0x81,0x01,0x00,0x81,0xF9,0x01,0x00,0x81,0xE1,0x01,
0x80,0x80,0xC1,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00}
};
uchar code BMP2[][128]=
{{
0x40,0x12,0xF0,0x36,0x3C,0x66,0x30,0x26,0x30,0x06,0xFE,0x7F,0x30,0x26,0xB0,0x66,
0x70,0x36,0x38,0x34,0x3E,0x1C,0x34,0x0C,0x30,0x9E,0x30,0xB3,0xBC,0xE0,0x10,0xC0,
0x08,0x08,0x18,0x18,0x0C,0x0C,0x46,0x44,0xFE,0xFE,0x66,0x63,0x66,0x61,0x66,0x62,
0x7E,0x66,0x66,0x6C,0x66,0x64,0x66,0x60,0x66,0x60,0x7E,0x34,0x22,0x38,0x00,0x10,
0x00,0x04,0x08,0x0C,0x18,0x0C,0x98,0x4C,0x98,0xFD,0xFE,0x6F,0xD8,0x6D,0x98,0x6D,
0x98,0x6D,0x98,0x7D,0xD8,0x2D,0xB8,0x01,0x9E,0x41,0x84,0x41,0x80,0xFF,0x00,0x7F,
0x00,0x03,0x90,0x11,0xF0,0x3F,0xB0,0x19,0x30,0x5B,0xFE,0xFF,0xB0,0x19,0x30,0x1B,
0x18,0x1D,0x0C,0x28,0xFA,0x7F,0xD8,0x36,0xD8,0x36,0xD8,0x36,0xD8,0x36,0xFE,0xFF},
{0x40,0x12,0xF0,0x36,0x3C,0x66,0x30,0x26,0x30,0x06,0xFE,0x7F,0x30,0x26,0xB0,0x66,
0x70,0x36,0x38,0x34,0x3E,0x1C,0x34,0x0C,0x30,0x9E,0x30,0xB3,0xBC,0xE0,0x10,0xC0,
0x80,0x61,0x04,0x37,0x8C,0x5A,0x98,0xFF,0x88,0x61,0x90,0x61,0xBE,0x61,0x98,0x7F,
0x98,0x5A,0x18,0x1E,0x18,0x1E,0x58,0x1B,0x38,0x9B,0x9C,0x99,0xC8,0xF8,0x20,0xF0,
0x00,0x10,0xF8,0x3F,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x20,0x03,0xC0,0x03,0x80,0x01,
0x10,0x08,0x30,0x18,0xF8,0xFD,0xD8,0x36,0xFC,0x7F,0x32,0x18,0xF0,0x1F,0x30,0x18,
0xF0,0x1F,0x30,0x18,0xF0,0x1F,0xC0,0x4C,0xFE,0xFF,0x60,0x0C,0x30,0x0C,0x08,0x0C}};
// 汉字表:
// 我的地盘我说了算
mov_up=0;
mov_left=0;
IE=0xff;
//e_LIND=1;
mark1=0;
clear();
P2=0xff;
P1=0xff;
//mov_left();
TH0=0xF8;
TL0=0x30;
TMOD=0x01;
while(1)
{
mov_left=0;
mov_up=0;
for(l=0;l<2;l++)
{
for(j=0;j<16;j++)
{
for(k=0;k<4;k++)
{
dis[flat++]=BMP2[l][j*2+k*32];
dis[flat++]=BMP2[l][j*2+k*32+1];
}
}
flat=0;
mov_left=1;
TR0=1;
delay(1000);
//mark1=0;
for(i=0;i<63;i++)
{
for(j=0;j<16;j++)
{
for(k=0;k<3;k++)
{
dis[8*j+2*k]=dis[8*j+2*k]>>1|dis[8*j+2*k+1]<<7;
dis[8*j+2*k+1]=dis[8*j+2*k+1]>>1|dis[8*j+2*k+2]<<7;
}
dis[8*j+6]=dis[8*j+6]>>1|dis[8*j+7]<<7;
dis[8*j+7]=(dis[8*j+7]>>1)&0x7f;
}
delay(300);
}
}
mov_left=0;
TR0=0;
mov_up=1;
for(i=0;i<128;i++)
{
dis[i]=BMP[0][i];
}
TR0=1;
for(i=1;i<5;i++)
{
for(j=0;j<32;j++)
{
for(k=0;k<31;k++)
{
for(l=0;l<4;l++)
{
dis[k*4+l]=dis[k*4+l+4];
}
}
dis[124]=BMP[i][j*4];
dis[125]=BMP[i][j*4+1];
dis[126]=BMP[i][j*4+2];
dis[127]=BMP[i][j*4+3];
delay(200);
}
}
mov_up=0;
}
}
void display(void) interrupt 1 using 1
{
register uchar j,a,p;
TH0=0xF8;
TL0=0x30;
e_U_ROW=1;
e_D_ROW=1; //关显示
a=P2;
a++;
P1=0x1f;
if(mov_left==1)
{
if(mark1==128)
{
mark1=0;
b=0;
}
else ;
for(j=0;j<8;j++)
{
P0=dis[mark1++];
p=P1;
P1=++p;
}
e_LIND=1;
if(b==8)
{
a=a|0x10;
a=a&0x1F; //确保开后8行开关允许
P2=a;
}
else
{
a=a|0x28;
a=a&0x2F; //确保开前8行开关允许,其保持后数位不变
P2=a;
b++;
}
}
else if(mov_up==1) //向上显示汉字的扫描程序
{
P1=0x11;
if(mark1==128)
{
mark1=0;
b=0;
}
else ;
for(j=0;j<4;j++)
{
P0=dis[mark1++];
p=P1&0x0f;
P1=++p;
}
e_LIND=1;
if(b==0x10)
{
a=a|0x10;
a=a&0x1F; //确保开后16行开关允许
P2=a;
}
else
{
a=a|0x20;
a=a&0x2F; //确保开前16行开关允许,其保持后数位不变
P2=a;
b++;
}
}
}
void clear()
{
register uchar data i,a;
P0=0;
P1=0xFF;
for(i=0;i<16;i++)
{ a=P1;
a++;
P1=a;
}
e_LIND=1;
}
void delay(unsigned int t)
{
register unsigned char d;
for(;t>0;t--)
{
for(d=0;d<250;d++)
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -