51单片机16X32LED点阵程序Word格式文档下载.docx
《51单片机16X32LED点阵程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《51单片机16X32LED点阵程序Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
sbitID=P1^3;
//行控制线D
sbitSpeek=P2^3;
//蜂鸣器
/********************************************************************/
#definescan0{IA=0;
IB=0;
IC=0;
ID=0;
}
#definescan1{IA=1;
#definescan2{IA=0;
IB=1;
#definescan3{IA=1;
#definescan4{IA=0;
IC=1;
#definescan5{IA=1;
#definescan6{IA=0;
#definescan7{IA=1;
#definescan8{IA=0;
ID=1;
#definescan9{IA=1;
#definescan10{IA=0;
#definescan11{IA=1;
#definescan12{IA=0;
#definescan13{IA=1;
#definescan14{IA=0;
#definescan15{IA=1;
ucharMove,Speed,line;
//(移位速度行)定义
uintzimuo;
//字模计数器
uintuiAllData;
ucharBUFF[10];
//缓存
voidDelayMs(void);
//延时
voidin_data();
//调整移动数据
voidrxd_data();
//发送移动数据
constucharcodehanzi[];
/******************************************************/
/*****不影响其他端口的扫描*************************/
voidscan(unsignedcharValue)
{
switch(Value)
case0:
scan0;
break;
case1:
scan1;
case2:
scan2;
case3:
scan3;
case4:
scan4;
case5:
scan5;
case6:
scan6;
case7:
scan7;
case8:
scan8;
case9:
scan9;
case10:
scan10;
case11:
scan11;
case12:
scan12;
case13:
scan13;
case14:
scan14;
case15:
scan15;
default:
/**************************延时***********************/
/*
voidDelay1ms(unsignedinttima)
unsignedinta,b;
for(a=tima;
a>
0;
a--)
for(b=110;
b>
b--);
}*/
/********************************************/
voidDelay_15us(unsignedinttime)
do
_nop_();
}while(--time);
/*主函数*/
voidmain()
{
Move=0;
zimuo=0;
while
(1)
//利用sizeof()语句运算字幕有效数据的总数;
while(zimuo<
uiAllData)//2048)//定义显示字幕数据的长度2048/32=64即显示完64个16*16大小的字符后重新循环
for(Move=0;
Move<
16;
Move++)//数据移位。
for(Speed=0;
Speed<
10;
Speed++)//移动速度控制
for(line=0;
line<
line++)
in_data();
//调整移动数据
rxd_data();
//装载移动数据
scan(line);
//输出行扫描
STCP=1;
//锁存
STCP=0;
OE=0;
//打开屏使能端
//Delay1ms
(1);
//延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。
//DelayMs();
Delay_15us(6);
OE=1;
}//移动一步
zimuo=zimuo+32;
//换下一个字
/**********************************************************/
voidin_data(void)//调整数据一个屏4个字的数据
chars;
for(s=4;
s>
=0;
s--)//一个屏能显示4个字取最前面的字发送给595的最前面
//zimuo是个计算显示到哪个字的计数器s是取4个字的循环line是显示到哪一行根据这几个参数计算出一个屏中现在需要显示的数据放入BUFF内存中等待发送给595
BUFF[2*s+0]=hanzi[zimuo+0+32*s+2*line];
//要知道为什么这么算就需要知道取模的方向和原理一行有8个字节(一个中文16*16的字一行有2个字节)
BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*line];
//把一个字的首字节放入BUFF[0]中后面一个字节放入BUFF[1]以此类推剩下的3个字
/***********************发送移动的数据****************************/
voidrxd_data(void)//串行发送数据
uchars;
ucharinc,tempyid,temp;
if(Move<
8)
inc=0;
else
inc=1;
for(s=0+inc;
s<
4+inc;
s++)//发送4字节数据
8)
tempyid=Move;
tempyid=Move-8;
temp=(BUFF[s]<
<
tempyid)|(BUFF[s+1]>
>
(8-tempyid));
//h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的数据。
temp=255-temp;
//temp1=(BUFF1[s]>
tempyid)|(BUFF1[s+1]<
//temp1=255-temp1;
ACC=temp;
//if(zimuo<
104)//当显示完512/32=16个字后变绿色显示
//{
SDA_G=1;
/*for(k=0;
k<
8;
k++)//一个字节8位发送给595
SHCP=0;
//上升沿移位595
SDA_R=(bit)(temp&
0x01);
//通过IO口送一个位给595
temp=temp>
1;
//字节移位准备送下一位
SHCP=1;
//}
SHCP=0;
ACC<
=1;
SDA_R=CY;
SHCP=1;
//取模说明:
取模软件用PC2002资料包里有直接打开即可用配置请看此程序目录下的"
配置图片"
//
constucharcodehanzi[]={/*移动显示汉字字模,*/
//移动显示汉字
0x90,0x00,0x90,0x01,0x88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,0x45,0x0A,
0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,/*"
你"
6*/
0x40,0x00,0x40,0x00,0xFE,0x7F,0x20,0x00,0x20,0x00,0x10,0x02,0x18,0x02,0xE8,0x3F,
0x0C,0x02,0x0A,0x02,0x09,0x02,0x08,0x02,0x08,0x02,0xE8,0x7F,0x08,0x00,0x00,0x00,/*"
在"
7*/
0xE0,0x7B,0x4F,0x4A,0x49,0x2A,0x49,0x2A,0xE9,0x2B,0x49,0x1A,0x49,0x2A,0xF9,0x2B,
0x49,0x4A,0x4F,0x4A,0x29,0x4A,0x20,0x5A,0x10,0x2A,0x88,0x0A,0x04,0x09,0x00,0x00,/*"
哪"
8*/
0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,0x84,0x10,0x84,0x10,0xFC,0x1F,
0x80,0x00,0x80,0x00,0xFC,0x1F,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0x7F,0x00,0x00,/*"
里"
9*/
0x60,0x02,0x1C,0x0A,0x10,0x12,0x10,0x12,0x10,0x02,0xFF,0x7F,0x10,0x02,0x10,0x12,
0x70,0x14,0x1C,0x0C,0x13,0x04,0x10,0x0A,0x90,0x49,0x10,0x50,0x14,0x60,0x08,0x40,/*"
我"
10*/
0x80,0x00,0x80,0x00,0xFC,0x3F,0x80,0x00,0x90,0x0C,0xA0,0x04,0xC0,0x02,0xFE,0x7F,
0x80,0x01,0xC0,0x02,0xA0,0x04,0x90,0x18,0x8C,0x70,0x83,0x20,0x80,0x00,0x80,0x00,/*"
来"
11*/
0x00,0x00,0xFE,0x3F,0x00,0x18,0x00,0x06,0x80,0x01,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,/*"
了"
12*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,
0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,/*"
!
"
13*/
};
uintuiAllData=sizeof(hanzi)-128;