16X16点阵显示程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/**********************************************************
工程名称: 16*16点阵显示程序
创建时间: 2011-9-24
作 者: CX
说 明: 本程序能实现汉字循环左移、右移、翻页显示
ULN2803列扫描,74HC595行扫描
点阵格式:阴码
取模方式:逐列扫描
取模走向:逆向(低位在前)
输出数字:16进制数
最后修改: 2011-12-4
**********************************************************/
#include
#define uint unsigned int
#define uchar unsigned char
unsigned char key;



sbit DS=P3^0; //595数据端
sbit SH=P3^1; //595时钟端
sbit ST=P3^2; //595锁存端
sbit xianshi=P3^4;

uchar code shuzi[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //灭
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

//0[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x0F,0xF8,0x1F,0x0C,0x30,0x04,0x20,
0x04,0x20,0x04,0x20,0x0C,0x30,0xF8,0x1F,
0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
//1[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x20,0xF8,0x3F,
0xFC,0x3F,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//2[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x20,0x38,0x30,0x0C,0x38,0x04,0x2C,
0x04,0x26,0x0C,0x23,0xF8,0x21,0xF0,0x38,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//3[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x08,0x18,0x18,0x0C,0x30,0x84,0x20,
0x84,0x20,0xCC,0x31,0x78,0x1F,0x30,0x0E,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//4[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,
0x80,0x07,0xC0,0x05,0x70,0x04,0x18,0x24,
0xFC,0x3F,0xFE,0x3F,0x00,0x24,0x00,0x04,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//5[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFC,0x08,0xFC,0x18,0xC4,0x30,0x44,0x20,
0x44,0x20,0xC4,0x30,0x84,0x1F,0x04,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//6[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x0F,0xF8,0x1F,0x8C,0x30,0x44,0x20,
0x44,0x20,0xCC,0x30,0x98,0x1F,0x10,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//7[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x1C,0x00,0x0C,0x00,0x0C,0x3C,0x0C,0x3F,
0xCC,0x03,0xEC,0x00,0x3C,0x00,0x1C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//8[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x0E,0x78,0x1F,0xCC,0x31,0x84,0x20,
0x84,0x20,0xCC,0x31,0x78,0x1F,0x30,0x0E,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//9[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x08,0xF8,0x19,0x0C,0x33,0x04,0x22,
0x04,0x22,0x0C,0x33,0xF8,0x1F,0xF0,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};


uchar code xun[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //灭
0x00,0x00,0x00,0x00,0x00,0x00,0x0

0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xFE,0xFF,0x22,0x02,0x52,0x04,0x8E,0x23,0x00,0x10,0xC4,0x0C,0xB4,0x40,
0x8C,0x80,0xE7,0x7F,0x84,0x00,0x84,0x02,0x84,0x04,0x84,0x18,0x04,0x30,0x00,0x00,/*"陈",0*/

0x00,0x40,0x82,0x20,0x8C,0x10,0xB8,0x18,0x90,0x0E,0x82,0x04,0x8C,0x00,0xB8,0x00,
0x90,0x00,0x80,0x02,0xC0,0x04,0xB0,0x18,0x9E,0x70,0x84,0x20,0x80,0x00,0x00,0x00,/*"兴",1*/

//0[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x0F,0xF8,0x1F,0x0C,0x30,0x04,0x20,
0x04,0x20,0x04,0x20,0x0C,0x30,0xF8,0x1F,
0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
//9[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x08,0xF8,0x19,0x0C,0x33,0x04,0x22,
0x04,0x22,0x0C,0x33,0xF8,0x1F,0xF0,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//5[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFC,0x08,0xFC,0x18,0xC4,0x30,0x44,0x20,
0x44,0x20,0xC4,0x30,0x84,0x1F,0x04,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//1[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x20,0xF8,0x3F,
0xFC,0x3F,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//1[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x20,0xF8,0x3F,
0xFC,0x3F,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//0[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x0F,0xF8,0x1F,0x0C,0x30,0x04,0x20,
0x04,0x20,0x04,0x20,0x0C,0x30,0xF8,0x1F,
0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
//0[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x0F,0xF8,0x1F,0x0C,0x30,0x04,0x20,
0x04,0x20,0x04,0x20,0x0C,0x30,0xF8,0x1F,
0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
//2[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x20,0x38,0x30,0x0C,0x38,0x04,0x2C,
0x04,0x26,0x0C,0x23,0xF8,0x21,0xF0,0x38,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//1[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x20,0xF8,0x3F,
0xFC,0x3F,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//2[16*16]下上列排
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x20,0x38,0x30,0x0C,0x38,0x04,0x2C,
0x04,0x26,0x0C,0x23,0xF8,0x21,0xF0,0x38,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //灭
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,




};
uint cd=sizeof(xun); //数组的sizeof值等于数组所占用的内存字节,这里的sizeof当作求数组元素的个数
void delay(uchar ms);
void num(uchar num);
uchar key_sm(void);
//void left(void);
//void right(void);
void left(void) //汉字循环从右向左移
{ uint sm;
uint m=0;
uint t=0;

uint n=0;
for(m=0;m{
for(t=0;t<7;t++) //控制汉字的移动速度
{
for(n=0;n<16;n++)

{
ST=0; // 移位时钟脉冲
ST=1;
SBUF=xun[m+n*2]; //上半屏

SBUF=xun[m+n*2+1]; //下半屏

sm=1<P2=sm;
P1=(sm>>8);
ST=0;
ST=1;
delay(100);
}
}
}
}
void right(void) //汉字循环从左向右移
{
uint sm;
uint m=0;
uint t=0;
uint n=0;
for(m=cd-32;m>0;m=m-2)
{
for(t=0;t<7;t++) //控制汉字的移动速度
{
for(n=16;n>0;n--)
{
ST=0; // 移位时钟脉冲
ST=1;
SBUF=xun[m+n*2];

SBUF=xun[m+n*2+1];

sm=0x8000>>(16-n);//相当于sm=0x01<P2=sm;
P1=(sm>>8);
ST=0;
ST=1;
delay(100);
}
}

}
}
void turn(void) //汉字翻页显示
{
uint sm;
uint t=0;
uint n=0;
uint N=0;
for(N=0;N<14;N++) //循环扫描一遍14帧

{
for(t=0;t<50;t++) //速度
{
for(n=0;n<=32;n=n+2)
{
ST=0; // 移位时钟脉冲
ST=1;
SBUF=xun[n+32*N];

SBUF=xun[n+32*N+1];

sm=0x0001<<(n/2);//
P2=sm;
P1=(sm>>8);
ST=0;
ST=1;
delay(100); //会影响列扫描的速度,这里的延时要和”for(t=0;t<100;t++) //速度“这里联合起来用
}
}
}
}
void main()

{
while(1)
{
left();
right();
turn();
if(xianshi==0)goto loop; // 这里我没试过,可能转不到loop,可能这段应该放在left();或者right();或者turn();里面,放在外面执行不了
}

loop:while(1)
{
key_sm();
}
}
/////////////////////////////按键扫描
uchar key_sm(void)

{
while(1)
{
P3=0x7f;
if(P3!=0x7f)
{
delay(5);
if(P3!=0x7f)
{
switch(P3)
{
case 0x77: key=4;break;
case 0x7b: key=3;break;
case 0x7d: key=2;break;
case 0x7e: key=1;break;
}

}
}
P3=0xbf;
if(P3!=0xbf)
{
delay(5);
if(P3!=0xbf)
{
switch(P3)
{
case 0xb7: key=8;break;
case 0xbb: key=7;break;
case 0xbd: key=6;break;
case 0xbe: key=5;break;
}

}
}
P3=0xdf;
if(P3!=0xdf)
{
delay(5);
if(P3!=0xdf)
{
switch(P3)
{
case 0xd7: key=12;break;
case 0xdb: key=11;break;
case 0xdd: key=10;break;
case 0xde: key=9;break;
}

}
}
P3=0xef;
if(P3!=0xef)
{
delay(5);
if(P3!=0xef)
{
switch(P3)
{
case 0xe7: key=16;break;
case 0xeb: key=15;break;
case 0xed: key=14;break;
case 0xee: key=13;break;
}
}
}
if(key>10) key=0x00;

num(key);
}
}

////////////////////////////显示按键数字
void num(uchar shu)
{
uint n,m;
uint sm;
m=shu*32;
for(n=0;n<16;n++)
{
ST=0;
ST=1;
SBUF=shuzi[m+n*2];
SBUF=shuzi[m+n*2+1];
sm=1<P2=(sm);
P1=(sm>>8);
ST=0;
ST=1;
delay(5);
}
}
///////////////////////延时
void delay(uchar ms)
{
uchar i,j;
for(j=0;jfor(i=0; i<120;i++);
}

相关文档
最新文档