📄 mov_right.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
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 delay(unsigned int);
void clear();
void main(void)
{
uchar code BMP2[][128]=
{{
0x20,0x01,0x70,0x05,0x1E,0x09,0x10,0x09,0x10,0x21,0xFF,0x7F,0x10,0x01,0x10,0x09,
0x50,0x09,0x30,0x06,0x18,0x02,0x16,0x05,0x90,0x04,0x50,0x28,0x14,0x28,0x08,0x30,
0x08,0x02,0x08,0x02,0x44,0x22,0xFE,0x7E,0x42,0x21,0xC2,0x20,0x42,0x20,0x42,0x21,
0x7E,0x26,0x42,0x24,0x42,0x20,0x42,0x20,0x42,0x20,0x7E,0x20,0x42,0x14,0x00,0x08,
0x00,0x02,0x04,0x02,0x44,0x02,0x44,0x02,0x44,0x12,0x44,0x3E,0xDF,0x13,0x64,0x12,
0x44,0x12,0x44,0x12,0x44,0x16,0x44,0x0A,0x5C,0x42,0x47,0x40,0x82,0x7F,0x00,0x00,
//0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,
// 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff},
0x40,0x08,0xF8,0x1F,0x08,0x08,0x48,0x08,0x88,0x28,0xFF,0x7F,0x08,0x08,0x48,0x08,
0x84,0x0A,0x02,0x04,0xFC,0x1F,0x24,0x12,0x24,0x12,0x24,0x12,0xFF,0x7F,0x00,0x00},
{0x20,0x01,0x70,0x05,0x1E,0x09,0x10,0x09,0x10,0x21,0xFF,0x7F,0x10,0x01,0x10,0x09,
0x50,0x09,0x30,0x06,0x18,0x02,0x16,0x05,0x90,0x04,0x50,0x28,0x14,0x28,0x08,0x30,
0x00,0x00,0x44,0x10,0x88,0x08,0x08,0x05,0xC0,0x1F,0x40,0x10,0x4F,0x10,0x48,0x10,
0xC8,0x1F,0x48,0x15,0x08,0x05,0x08,0x05,0xA8,0x44,0x98,0x44,0x48,0x78,0x20,0x00,
0x00,0x00,0xFE,0x1F,0x00,0x08,0x00,0x04,0x00,0x02,0x80,0x01,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,
0x04,0x01,0x7C,0x3F,0x92,0x04,0xF9,0x0F,0x08,0x08,0xF8,0x0F,0x08,0x08,0xF8,0x0F,
0x08,0x08,0xF8,0x0F,0x10,0x24,0xFF,0x7F,0x10,0x04,0x10,0x04,0x08,0x04,0x04,0x04}};
// 汉字表:
// 我的地盘我说了算
register uchar data i,j,k,l,flat;
TH0=0xF9;
TL0=0x80;
TMOD=0x01;
while(1)
{
IE=0xff;
//e_LIND=1;
mark1=0;
clear();
P2=0xff;
P1=0xff;
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;
TR0=1;
delay(3000);
//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);
}
delay(2000);
}
TR0=0;
}
}
}
void display(void) interrupt 1 using 1
{
register uchar j,a,p;
TH0=0xF9;
TL0=0x30;
e_U_ROW=1;
e_D_ROW=1; //关显示
a=P2;
a++;
P1=0x1f;
if(mark1==128)
{
mark1=0;
b=0;
}
else ;
for(j=0;j<8;j++)
{
P0=dis[mark1];
mark1=mark1+1;
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++;
}
}
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 + -