历史上的今天
今天是:2025年01月12日(星期日)
2018年01月12日 | 51单片机16*16LED点阵滚动显示
2018-01-12 来源:eefocus
*
功能:LED16*16点阵滚动显示
说明:74LS154用作发送数据,P0,P2口用来列选
看本程序最好的工具最好旁边有标号和语法着色,推荐keil或UltraEdit
懒人提示:要改成自己所要的显示内容,要怎么改?
1.要改显示内容改第23~92行代码,还有第119行代码,具体改法见下面注释
2.要改滚动速度改第102行代码
*/
/*头文件*/
#include
#include
/*宏定义*/
#define uchar unsigned char
#define uint unsigned int
/*函数声明*/
void delay();
/*全局变量*/
uint lie; //列选标志
/**
字模:反显,纵向取模,开头和结尾均加入32个0xFF,用于改善屏滚动显示时循环的连贯性 **/
/**
杭州市公交公司K316路,开往武林广场,发车时间20:30,欢迎大家乘坐! -- ** 宋体, 12 **/
/**
当前所选字体下一个汉字对应的点阵为: 宽度x高度=496x16, 调整后为: 496x16 **/
uchar code text[1056]={
//这里的数据为你要显示的内容的数据量+64(前后各32个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,0xFF,
//改显示内容以上两行别改
0xEF,0xDF,0xEF,0x3F,0xE8,0xFF,0x00,0x00,0xED,0xFF,0xFE,0xFD,0xEF,0xF3,0xEC,0x0F,
0x6D,0xFF,0x8D,0xFF,0xED,0xFF,0xEC,0x03,0xEF,0xFD,0xEF,0xFD,0xEF,0xE1,0xFF,0xFF,
0xFF,0x7F,0xF8,0xFE,0xFF,0xF9,0xFF,0xE7,0x00,0x1F,0xFB,0xFF,0xFC,0xFF,0xFF,0xFF,
0x80,0x01,0xF7,0xFF,0xF9,0xFF,0xFE,0x7F,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xD8,0x03,0xDB,0xFF,0xDB,0xFF,0x5B,0xFF,0x80,0x00,
0xDB,0xFF,0xDB,0xFF,0xDB,0xF7,0xDB,0xFB,0xD8,0x07,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x7F,0xFE,0xFB,0xFD,0xF1,0xF3,0xEB,0x8F,0xDB,0xDE,0x3B,0xFF,0x73,
0xFF,0xF7,0x8F,0xF7,0xF7,0xD7,0xF9,0xE1,0xFC,0xF3,0xFE,0x7F,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xEF,0xFE,0xEE,0xFE,0xED,0xFD,0xE3,0x7D,0xEB,0xBB,0x6F,0xD7,0x8F,0xE7,
0xCF,0xCF,0xEF,0x97,0xE6,0x3B,0xEB,0x79,0xE9,0xFC,0xED,0xFD,0xEF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x7F,0xFE,0xFB,0xFD,0xF1,0xF3,0xEB,0x8F,0xDB,0xDE,0x3B,0xFF,0x73,
0xFF,0xF7,0x8F,0xF7,0xF7,0xD7,0xF9,0xE1,0xFC,0xF3,0xFE,0x7F,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF7,0xFF,0xB6,0x07,0xB6,0xDF,0xB6,0xDF,0xB6,0xDF,0xB6,0xDF,0xB6,0xDF,
0xB6,0xDF,0xB6,0x0F,0xB7,0xFF,0xBF,0xFB,0xBF,0xFD,0x80,0x03,0xFF,0xFF,0xFF,0xFF,
0xEF,0xFB,0xE0,0x03,0xEE,0xFB,0xFC,0x7F,0xEB,0x9B,0xE7,0xE3,0xEF,0xFB,0xFF,0xFF,
0xFF,0xFF,0xF3,0xE7,0xEF,0xFB,0xEE,0xFB,0xEE,0xFB,0xED,0x77,0xF3,0x8F,0xFF,0xFF,
0xFF,0xFF,0xF7,0xFB,0xF7,0xFB,0xE0,0x03,0xFF,0xFB,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF8,0x0F,0xF7,0x77,0xEE,0xFB,0xEE,0xFB,0xE7,0x77,0xFF,0x8F,0xFF,0xFF,
0xFF,0xFB,0x81,0x03,0xBB,0xFB,0xB8,0x07,0x83,0x77,0xFB,0x77,0xF7,0xBF,0xEF,0x01,
0x0F,0x3B,0xD2,0xBB,0xDD,0xBB,0xDA,0xBB,0xC6,0x81,0xDF,0x3F,0xFF,0x7F,0xFF,0xFF,
0xFF,0xFE,0xFF,0xF2,0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFD,0xFF,0xBD,0xFD,0xBD,0xFB,0xBD,0xF7,0xBD,0xCF,0x80,0x3F,0xBD,0xFF,0xBD,0xFF,
0xBD,0xFF,0xBD,0xFF,0x80,0x01,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xFF,0xFF,
0xFB,0xBF,0xF7,0x7F,0xEE,0xFF,0x10,0x00,0xBB,0xFF,0xEF,0xFD,0xEF,0x7D,0xEF,0x7D,
0x6F,0x7D,0x80,0x01,0xAF,0x7D,0xEF,0x7D,0xEF,0x7D,0xEF,0x7D,0xEF,0xFD,0xFF,0xFF,
0xF7,0xFD,0xF7,0xFD,0xD7,0x01,0xD7,0xFB,0xD7,0xFB,0xD4,0x07,0xD7,0x77,0xD7,0x77,
0xF7,0x7F,0x01,0xFF,0xF6,0x1F,0xB7,0xE7,0xD7,0xFB,0xF7,0xFD,0xF7,0xF0,0xFF,0xFF,
0xF7,0xEF,0xF7,0x9F,0xF6,0x7F,0x00,0x00,0xF6,0xFF,0xF7,0x37,0xFF,0xEF,0xF7,0xDF,
0xF7,0x3F,0xF4,0xFF,0x00,0x00,0xF6,0x7F,0xF7,0x9F,0xF7,0xE7,0xF7,0xEF,0xFF,0xFF,
0xFF,0xFD,0xFF,0xF3,0xC0,0x0F,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0x5F,0xFF,
0x9F,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,
0xF7,0xEF,0xF7,0xE7,0xF7,0xEF,0x00,0x1F,0xF7,0xDF,0xF7,0xBF,0xBF,0xAD,0xBD,0xDB,
0xB9,0xB7,0xB4,0x6F,0xAD,0x9F,0x9C,0x7D,0xBD,0xFE,0xF8,0x01,0xFD,0xFF,0xFF,0xFF,
0xFF,0xFE,0xFF,0xF2,0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0xF7,0xFB,0x83,0xF7,0xF7,0xEE,0xF7,0x1E,0xF0,0x7D,0x06,0x9D,0xF6,0xEB,
0xF6,0xF7,0xB6,0xEB,0xD6,0x1B,0xC7,0xFD,0xF7,0xFC,0xF7,0xFD,0xF7,0xFF,0xFF,0xFF,
0xFF,0xDF,0xDF,0xDF,0xDE,0xDF,0xDC,0xDF,0xDA,0xDF,0xC6,0xDF,0x1E,0xDF,0xDE,0xDF,
0xD0,0x00,0xDE,0xDF,0xDE,0xDF,0xDE,0xDF,0xDE,0xDF,0xDE,0xDF,0xFF,0xDF,0xFF,0xFF,
0xFF,0xFF,0xC0,0x1F,0xDD,0xDF,0xDD,0xDF,0xDD,0xDF,0xC0,0x1F,0xF7,0xFF,0xF6,0xFF,
0xF7,0x3F,0xF7,0xFD,0xF7,0xFE,0x00,0x01,0xF7,0xFF,0xF7,0xFF,0xF7,0xFF,0xFF,0xFF,
0xFF,0xFF,0xE0,0x00,0x7F,0xFF,0x9F,0xFF,0xFF,0xFF,0xF0,0x1F,0xB6,0xDF,0xB6,0xDF,
0xB6,0xDF,0xB6,0xDF,0xB0,0x1F,0xBF,0xFD,0xBF,0xFE,0x80,0x01,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF1,0xF3,0xEF,0xEB,0xEF,0xDB,0xEF,0xBB,0xEE,0x7B,0xF1,0xF3,0xFF,0xFF,
0xFF,0xFF,0xF8,0x0F,0xF7,0xF7,0xEF,0xFB,0xEF,0xFB,0xF7,0xF7,0xF8,0x0F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF3,0xFC,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF3,0xE7,0xEF,0xFB,0xEE,0xFB,0xEE,0xFB,0xED,0x77,0xF3,0x8F,0xFF,0xFF,
0xFF,0xFF,0xF8,0x0F,0xF7,0xF7,0xEF,0xFB,0xEF,0xFB,0xF7,0xF7,0xF8,0x0F,0xFF,0xFF,
0xFF,0xFE,0xFF,0xF2,0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xD7,0xFB,0xDB,0xF7,0xDD,0xCD,0xDE,0x3D,0xD9,0x3D,0xC7,0xCB,0xFB,0xFB,0xE7,0xF7,
0x0F,0xCF,0xE8,0x3F,0xEF,0x9F,0xEF,0xE7,0xEB,0xF3,0xE7,0xF9,0xEF,0xFB,0xFF,0xFF,
0xFD,0xFD,0x7D,0xFB,0x8C,0x07,0xDF,0xFB,0xFF,0xFD,0xC0,0x1D,0xDF,0xBD,0xBF,0x7D,
0xBF,0xFD,0xC0,0x05,0xDF,0xFD,0xDF,0xBD,0xDF,0xDD,0xC0,0x3D,0xFF,0xFD,0xFF,0xFF,
0xFB,0xFF,0xFB,0xFE,0xFB,0xFD,0xFB,0xFB,0xFB,0xF7,0xFB,0xCF,0xFA,0x3F,0x01,0xFF,
0xFA,0x7F,0xFB,0x9F,0xFB,0xEF,0xFB,0xF3,0xFB,0xF9,0xFB,0xFC,0xFB,0xFD,0xFF,0xFF,
0xFF,0xFF,0xE7,0x6B,0xDF,0x6B,0xD7,0x57,0xD6,0xD7,0xD6,0xAD,0x54,0x6E,0x92,0xDD,
0xD7,0x03,0xD7,0x9F,0xD6,0x6F,0xDF,0x6F,0xD7,0xF7,0xCF,0xF3,0xDF,0xF7,0xFF,0xFF,
0xEF,0xBB,0xEB,0xBB,0xAB,0x77,0xAB,0x77,0xA0,0x2F,0xAF,0xCF,0xAF,0x9F,0x80,0x01,
0xAF,0xBF,0x6F,0xDF,0x60,0x4F,0x6D,0x67,0x6B,0x73,0xCB,0x77,0xEE,0x7F,0xFF,0xFF,
0xFF,0x7D,0xFE,0xFD,0xF9,0xDD,0xC7,0xDD,0xFB,0xDD,0xFC,0xDD,0xFF,0xDD,0x00,0x01,
0xFF,0x5D,0xFE,0xDD,0xFD,0xDD,0xC3,0xDD,0xFD,0xDD,0xFE,0xFD,0xFF,0xFD,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x05,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,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
/*主函数*/
void
main()
{
uchar i,j;
uint m=0; //m是从字模数组里向后取数据时的计数器,用以改变显示文字的内容,及滚动显示效果
SCON=0;
//初始化串口为工作方式0(同步通信方式,TxD输出同步脉冲)
lie=0x7fff; //列选标志初始化
while(1)
//重复循环显示
{
for(j=0;j<10;j++) //j用来控制屏上1帧显示内容停留的时间,即用来控制滚动速度
{
for(i=1;i<=31;i+=2)
{
P0=0xff; //先关显示,以免164内数据移动过程中在屏上产生不良影响,大家可以把这两句去掉比较下显示效果
P2=0xff;
SBUF=text[i+m]; //从串口发送字模数据(为什么要先发后一个数据,看下电路应该会明白吧:)
while(TI==0); //等待发送完毕
TI=0;
SBUF=text[i+m-1]; //从串口发送数据,补全整一列数据
while(TI==0);
TI=0;
P0=lie%256; //选中要显示的那列,同时等于打开了那列的显示
P2=lie/256;
delay(); //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象,略知生理的人应该都知道吧。
lie=_iror_(lie,1); //列选标志移位,准备用来选中下一列
}
} //返回显示下一列,直到16列都显示完成
m+=2; //显示内容向后移一列
if(m>1024) //这个数据为你的字模数组的大小-32,我的是1056-32=1024
m=0;
}
}
/*延时子程序*/
void delay()
{
uint n;
for(n=0;n<90;n++)
{;}
}


上一篇:单片机脉搏测量仪的制作
下一篇:三相步进电机驱动电路
史海拾趣
|
MCS-51单片机实用子程序库 目前已有若干版本的子程序库公开发表,它们各有特色。本程序库中的开平方算法为快速逼近算法,它能达到牛顿迭代法同样的精度,而速度加快二十倍左右,超过双字节定点除法的速度。 本子程序库对《单片机应用程序设计技 ...… 查看全部问答> |
|
感谢周工提供! 1:选择过高电压等级的弊端 选择过高的电压等级造成投资过高,回收期长。电压等级的提高,电机的绝缘必须提高,使电机价格增加。电压等级的提高,使变频器中电力半导体器件的串联数量加大,成本上升。 & ...… 查看全部问答> |
|
各位朋友,你们好!第一次来这里.很高兴和你们一起讨论问题,在这里我有个简单的问题向你们请教..... 是这么回事:我家和隔壁邻居2家共同在过道上安了一扇防盗门,这盗门距离家里的门有7米远左右.由于有两扇门.回家按过道上那道门,家里的人完全听不到 ...… 查看全部问答> |
|
EK-LM3S8962评估套件原价99美元,现价48元,抢啊 EK-LM3S8962评估套件 哈哈,好便宜啊,大家可以抢了: 为了感谢您的参与,TI特别推出限量500套的惊爆特价LM3S8962开发工具(原价99美元),现仅售人民币68元!如果您在7月31日之前下单付款,更可享受人民币48元的超低 ...… 查看全部问答> |
|
1.linux的TC模块对qos有了很好的支持,但对系统的资源消耗很大。我的开发环境是嵌入式+MIPS+Multi-core,linux内核版本是2.6.21。以HTB为例,配置了 qdisc&class(约10000个class)后使得系统整体性能大大降低,大约下降了 ...… 查看全部问答> |
|
embedded Visual C++ 4.0(Windows ce)很惨的问题 本人刚下了一个embedded Visual C++ 4.0在win2000server下安装完成,想熟悉一下,选emulator后,一发默认后,成立项目,可F7后,模拟起动找不到程序,输出显示下载不成功,这是怎么回事,在线等… 查看全部问答> |
|
1:TCL1543驱动子程序 #define CLOCK P1_3 #define D_IN P1_4 #define D_OUT P1_5 #define _CS P1_6 uint read1543(uchar port) //从TLC1543读取采样值,形参port是采样的通道号 { uint data ad;uint data i; uchar data al=0,ah ...… 查看全部问答> |
|
我用的是MINI2440学习板,现讲wavecom模块和ARM用串口连一起来,在arm的串口助手上发AT指令没有反应,但是将ARM换成PC机就可以了,用PC连ARM测试串口也是正常的。不知道为什么??ARM为wince5.0系统… 查看全部问答> |
|
我用一个串口类接收一个下位机硬件通过串口发来的数据,总是会出现两个包串在一起的情况(不是很多,但经常会有)请问这是为什么。我的串口类如下。 打开及串口设置: BOOL CCESeries::OpenPort(CWnd* pPortOwner, &n ...… 查看全部问答> |




