标题:
16*64点阵左右移动程序显示汉字 数字 英文等 带Proteus仿真 取模软件等
[打印本页]
作者:
51hei社区
时间:
2016-1-14 00:34
标题:
16*64点阵左右移动程序显示汉字 数字 英文等 带Proteus仿真 取模软件等
0.png
(31.81 KB, 下载次数: 168)
下载附件
2016-1-14 00:32 上传
单片机16乘64点阵的所有制作资料打包下载(Proteus仿真 程序 取模软件):
16X64点阵左右移动模式.rar
(1.53 MB, 下载次数: 309)
2016-1-14 00:34 上传
点击文件名下载附件
下载积分: 黑币 -5
先来一个视频:
http://player.youku.com/player.php/sid/XNTgyMTAwOTQ0/v.swf
在做16*64 。或者16*16 16*32 等点阵的时候遇到一个小问题。
就是汉字是16*16的规格。但是数字和英文字符那些都是8*16的规格
程序扫描算法是按照汉字的规格扫描的。如果出现8*16的。就会乱码
。
如果要改变扫描算法识别8*16的。那么汉字就会乱码、
如果要同时识别汉字和数字,那么扫描算法就有点复杂。我有心无力、。
所以编写了个小软件,重组下数组。
具体操作请看视频
左移
右移
小软件
视频比较模糊.大家将就下,把视频录到的文件贴上来.大家对着看就懂了
源程序预览:
#include<reg52.h>
#include"MacroAndConst.h"
#include"delay.h"
#include"display.h"
#include"ziku.h"
extern bit fLeftFlag; //声明外部变量
extern bit fRightFlag; //声明外部变量
uchar scan;
uchar speed=2; //设定移动速度
uint words; //字模计数器
uchar move; //列指针
uchar line; //行指针
uchar temp;
uchar BUFF[10]; //缓存数组
sbit ST=P3^5; //595 STR
sbit SH=P3^6; //595 CLK
sbit DATA=P3^7; //595 DATAS
/**********************************************************
函数名称:LeftflowDisplay
函数功能:左移显示函数
入口参数:无
出口参数:无
备 注:
**********************************************************/
void LeftflowDisplay() //逐行 阴码 逆向
{
uchar sp,y=0;
move=0;
words=0;
while(words<46*32) //
{
if(fLeftFlag==1)
{
while(move<16) //数据移位
{
if(fLeftFlag==1)
{
for(sp=0;sp<speed;sp++) //移动速度
{
if(fLeftFlag==1)
{
for(line=0;line<16;line++) //行扫描
{
loadline1(); //装载一线点阵数据
sendline1(); //发送一线移动数据
scan=line; //显示第line行
P2=scan;
ST=1; //锁存为高,595锁存信号
ST=0;
delay_10us(50); //延时500us,等待一段时间,产生视觉暂留
}
}
else
break;
}
move=move+1; //移动一步(一位)
}
else
break;
}
move=0;
words=words+32; //下一个字
}
else
break;
}
words=0;
}
/**********************************************************
函数名称:loadline1
函数功能:装载点阵数据 缓存
入口参数:无
出口参数:无
备 注:
**********************************************************/
void loadline1()
{
uchar s;
for(s=0;s<5;s++) //s为要显示的字数+1(显示4字+1=5)
{
BUFF[2*s]=zuoyi[words+ 32*s + 2*line];
BUFF[2*s+1]=zuoyi[words+1+ 32*s + 2*line];
}
}
/**********************************************************
函数名称:sendline1
函数功能:发送点阵数据 缓存
入口参数:无
出口参数:无
备 注:
**********************************************************/
void sendline1()
{
uchar s;
uchar inc,temp,tempcol;
uchar k;
DATA=1;
if(move<8) inc=0;
else inc=1;
for(s=0+inc;s<=7+inc;s++)
{
if(move<8)
tempcol=move;
else
tempcol=move-8;
temp=(BUFF[s]>>tempcol)|(BUFF[s+1]<<(8-tempcol)); //字模左边字节右移tempcol位,右边字节左移8-tempcol位,2者相或
for(k=0;k<8;k++)
{
SH=0;
DATA=(bit)(temp&0x80);
temp=temp<<1;
SH=1;
}
}
}
/**********************************************************
函数名称:RightflowDisplay
函数功能:右移显示函数
入口参数:无
出口参数:无
备 注:
**********************************************************/
void RightflowDisplay() //流动右移 逐行 阴码 顺向
{
uchar i;
move=0;
words=0;
while(words<=46*32) //数组元素。46组,每组32个
{
if(fRightFlag==1)
{
while(move<16)// 循环16次,点亮并移动一个汉字
{
if(fRightFlag==1)
{
for(i=0;i<speed;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
{
if(fRightFlag==1)
{
for(line=0;line<16;line++)//扫描16行
{
loadoneline();//装载一线点阵数据
sendoneline();//发送一线点阵数据
P2=line;
ST= 0;
ST= 1;
delay_10us(50); //延时500us,等待一段时间,产生视觉暂留
}
}
else
break;
}
move++; //列指针递增
}
else
break;
}
move=0;
words=words+32;// 一个汉字移动后,指向下一个汉字
}
else
break;
}
words=0;
}
/**********************************************************
函数名称:loadoneline
函数功能:装载点阵数据 缓存
入口参数:无
出口参数:无
备 注:
**********************************************************/
void loadoneline()
{
uchar s;
for(s=0;s<5;s++) //s为要显示的数字+1
{
BUFF[2*s+1]=youyi[words+32*s+2*line];
BUFF[2*s]=youyi[words+1+32*s+2*line];//~
}
}
/**********************************************************
函数名称:sendoneline
函数功能:发送点阵数据 缓存
入口参数:无
出口参数:无
备 注:
**********************************************************/
void sendoneline()
{
char s;
uchar inc,k,tempcol;
if(move<8)
inc=0;
else
inc=1;
for(s=7+inc;s>=0+inc;s--)
{
if(move<8)
tempcol=move;
else
tempcol=move-8;
temp=(BUFF[s]>>tempcol)|(BUFF[s+1]<<(8-tempcol));
for(k=0;k<8;k++)
{
SH=0;
DATA=(bit)(temp&0x01);
temp=temp>>1;
SH=1;
}
}
}
复制代码
作者:
zzz哈哈哈
时间:
2016-4-7 16:38
楼主,感觉左移的时候字有点抖动啊,还有我换成自己的字摸后有逗号,第一遍显示正常,第二遍就乱码了。。求助楼主
作者:
lanyu222
时间:
2017-5-4 20:16
真的太棒了,不过有没有总程序啊
作者:
695723413
时间:
2017-5-17 13:13
真的太棒了,不过有没有总程序啊
作者:
hf51hei
时间:
2017-12-11 21:22
学习中,帮助大大的。谢谢
作者:
mykent
时间:
2018-2-6 19:31
好,学习有邦助
作者:
五月风暖
时间:
2018-11-30 12:00
请问这个程序完整嘛,可以直接用吗
作者:
slaoliu
时间:
2019-1-30 07:35
下来改改测试一下,
作者:
HOU9914
时间:
2019-4-29 22:14
楼主哇,这个程序有点复杂,有没有在一个.c里的程序呢?我这种新手看不太懂
求帮助
作者:
yaoyinzhi
时间:
2020-3-15 21:40
显示的缓冲区的数据不能在程序时时更新,不太方便。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1