我爱单片机.c
来自「基于51单片机的16*16点阵」· C语言 代码 · 共 147 行
C
147 行
#include <reg52.h>
#define BLKN 2
#define uchar unsigned char
#define uint unsigned int
uchar i,j,k,l;
//uint i;
uchar data dispram[32];
sbit G =P2^7;
sbit RCK=P2^6;
sbit SCLR=P2^5;
void delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
uchar code bmp[][32]=
{
{
0xFB,0x7F,0xF1,0x5F,0x87,0x6F,0xF7,0x6F,0xF7,0x7B,0x00,0x01,0xF7,0x7F,0xF7,0x6F,
0xF5,0x6F,0xF3,0x9F,0xE7,0xBF,0x97,0x5F,0xF6,0xDF,0xF5,0xEB,0xD7,0xEB,0xEF,0xF3
}, //我 0
{
0xFF,0x87,0xC0,0x7F,0xEE,0xEF,0xF6,0xDF,0x80,0x01,0xBD,0xFD,0x7D,0xFB,0x80,0x07,
0xFB,0xFF,0xF8,0x0F,0xF5,0xDF,0xF6,0xBF,0xEF,0x7F,0xEE,0x9F,0xDD,0xE3,0xF3,0xF7
},//爱 1
{
0xEF,0xEF,0xF7,0xDF,0xFB,0xB7,0xC0,0x03,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,
0xDE,0xF7,0xC0,0x07,0xDE,0xFF,0xFE,0xFB,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF
},//单 2
{
0xFF,0x7F,0xDF,0x7F,0xDF,0x7F,0xDF,0x7F,0xDF,0x7B,0xC0,0x01,0xDF,0xFF,0xDF,0xFF,
0xC0,0x3F,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xBF,0xBF,0x7F,0xBF
},//片 3
{
0xEF,0xFF,0xEF,0xEF,0xEE,0x07,0xEE,0xEF,0x02,0xEF,0xEE,0xEF,0xCE,0xEF,0xC6,0xEF,
0xAA,0xEF,0xAE,0xEF,0x6E,0xEF,0xEE,0xEF,0xEE,0xED,0xED,0xED,0xEB,0xF1,0xE7,0xFF
},//机 4
{
0xFF,0xFF,0xFF,0xFF,0xF0,0x0F,0xEF,0xF7,0xDF,0xFB,0xBF,0xFD,0xA3,0xC5,0x9D,0xB9,
0xBF,0xFD,0xBF,0xFD,0xBF,0xFD,0xB7,0xED,0xD8,0x1B,0xEF,0xF7,0xF0,0x0F,0xFF,0xFF
},//笑脸 5
{
0xEF,0xFF,0xEE,0x03,0xEF,0xFB,0xEF,0xF7,0x03,0xEF,0xDB,0xDF,0xDB,0xDB,0xD8,0x01,
0xDB,0xDF,0xBB,0xDF,0xD7,0xDF,0xEF,0xDF,0xD7,0xDF,0xBB,0xDF,0x7B,0x5F,0xFF,0xBF
},//好 6
{
0xEF,0xFF,0xEE,0x03,0xEF,0xFB,0xEF,0xF7,0x03,0xEF,0xDB,0xDF,0xDB,0xDB,0xD8,0x01,
0xDB,0xDF,0xBB,0xDF,0xD7,0xDF,0xEF,0xDF,0xD7,0xDF,0xBB,0xDF,0x7B,0x5F,0xFF,0xBF
},//好 7
{
0xDD,0xF7,0xEE,0xF7,0xEE,0xEF,0xFF,0xDF,0x80,0x01,0xBF,0xFD,0x7F,0xFB,0xE0,0x1F,
0xFF,0xBF,0xFE,0x7B,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFA,0xFF,0xFD,0xFF
}, //学 8
{
0xFF,0xFF,0xFF,0xFB,0x00,0x01,0xFF,0xFB,0xF7,0xFB,0xFB,0xFB,0xFD,0xFB,0xFD,0xDB,
0xFF,0x3B,0xFC,0xFB,0xF3,0xFB,0xCF,0xFB,0xEF,0xFB,0xFF,0xBB,0xFF,0xD7,0xFF,0xEF
} //习 9
};
uchar data dispram[32];
void main()
{
SCON=0x00; //串口工作模式0;移位寄存器方式
TMOD=0x01; //定时器T0工作方式1:16位方式
TR0=1; //启动定时器t0
P1=0x3f; //P1端口初值:允许接收、锁定、显示
IE=0x82;
for(i=0;i<32;i++)
{
dispram[i]=0xff;
}
while(1)
{
delay(2000);
for(i=0;i<32;i++)
{
dispram[i]=bmp[5][i];
if(i/2) delay(100); //卷帘出一个笑脸
}
delay(2000);
for(i=0;i<5;i++) //上卷帘显示“我爱单片机”
{
for(j=0;j<16;j++)
{
for(k=0;k<15;k++)
{
dispram[k*BLKN]=dispram[(k+1)*BLKN];
dispram[k*BLKN+1]=dispram[(k+1)*BLKN+1];
}
dispram[30]=bmp[i][j*BLKN];
dispram[31]=bmp[i][j*BLKN+1];
delay(100);
}
}
delay(2000);
for(i=5;i<10;i++) //左跑马显示“好好学习”
{
for(j=0;j<2;j++)
for(k=1;k<9;k++)
{
for(l=0;l<16;l++)
{
dispram[l*BLKN]=dispram[l*BLKN]<<1|dispram[l*BLKN+1]>>7;
dispram[l*BLKN+1]=dispram[l*BLKN+1]<<1|bmp[i][l*BLKN+j]>>(8-k);
}
delay(100);
}
}
}
}
void leddisplay(void) interrupt 1 using 1
{
uchar i,j=BLKN; //设定显示屏刷新率62.5帧/s
TH0=0xfd;
TL0=0xf0;
i=P1; //读取当前显示的行列
i=++i&0x0f; /*行数自动加一,屏蔽高4位 ,注意P1.0,P1.1,P1.2,P1,3控制行的显示,
通过4线16线译码器,对16行进行控制*/
do
{
j--;
SBUF=dispram[i*BLKN+j]; //送显示数据,SBUF串行数据缓冲寄存器
while(!TI); /*串行发送停止位的开始时,由内部硬件使T11,向CPU发出中断请求
,在中断服务程序中,必须用软件使其清0*/
TI=0;
}
while(j); //完成一行数据的发送
G=1; //消隐(关闭显示)
P1&=0xf0; //行号端口清0
RCK=1; //显示数据打入输出锁存器
P1|=i; //写入行号
RCK=0; //锁存显示数据
G=0; //打开显示
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?