单片机汉字8x8点阵LED动态显示程序

求大神给个程序,点阵上显示汉字动态滚动,小白想看看效果,自己又不会写

第1个回答  推荐于2018-02-24
#include <reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned char code image[11][8] = {
{0xC3, 0x81, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3}, //数字0
{0xEF, 0xE7, 0xE3, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3}, //数字1
{0xC3, 0x81, 0x9D, 0x87, 0xC3, 0xF9, 0xC1, 0x81}, //数字2
{0xC3, 0x81, 0x9D, 0xC7, 0xC7, 0x9D, 0x81, 0xC3}, //数字3
{0xCF, 0xC7, 0xC3, 0xC9, 0xC9, 0x81, 0xCF, 0xCF}, //数字4
{0x81, 0xC1, 0xF9, 0xC3, 0x87, 0x9D, 0x81, 0xC3}, //数字5
{0xC3, 0x81, 0xF9, 0xC1, 0x81, 0x99, 0x81, 0xC3}, //数字6
{0x81, 0x81, 0x9F, 0xCF, 0xCF, 0xE7, 0xE7, 0xE7}, //数字7
{0xC3, 0x81, 0x99, 0xC3, 0xC3, 0x99, 0x81, 0xC3}, //数字8
{0xC3, 0x81, 0x99, 0x81, 0x83, 0x9F, 0x83, 0xC1}, //数字9
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //全亮
};

void main()
{
EA = 1; //使能总中断
ENLED = 0; //使能U4,选择LED点阵
ADDR3 = 0;
TMOD = 0x01; //设置T0为模式1
TH0 = 0xFC; //为T0赋初值0xFC67,定时1ms
TL0 = 0x67;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
while (1);
}
/* 定时器0中断服务函数 */
void InterruptTimer0() interrupt 1
{
static unsigned char i = 0; //动态扫描的索引
static unsigned int tmr = 0; //1s软件定时器
static unsigned char index = 9; //图片刷新索引

TH0 = 0xFC; //重新加载初值
TL0 = 0x67;
//以下代码完成LED点阵动态扫描刷新
P0 = 0xFF; //显示消隐
switch (i)
{
case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index][0]; break;
case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index][1]; break;
case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index][2]; break;
case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index][3]; break;
case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index][4]; break;
case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index][5]; break;
case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index][6]; break;
case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index][7]; break;
default: break;
}
//以下代码完成每秒改变一帧图像
tmr++;
if (tmr >= 1000) //达到1000ms时改变一次图片索引
{
tmr = 0;
if (index == 0) //图片索引10~0循环
index = 10;
else
index--;
}
}本回答被网友采纳
第2个回答  2018-07-20
*****************************************************************************************
* *
* LED点阵实验 (左右上下流动显示) *
* 说明 通过P0 P1和 P2 作为点阵接口 *
*要求学员掌握 LED点阵的工作原理和 各点阵脚的定义及接法,具体接线请参考接线说明 *
*我们采用的LED点阵式是低功耗,在做实验时可以用单片机脚直接驱动 *
******************************************************************************************/
#include <REG51.H>
unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //纵条表
unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //衡条表
/*************延时函数*********************/
void delay1(void)
{
unsigned char i,j,k;

for(k=10;k>0;k--) //循环时间是 10*20*248次
for(i=20;i>0;i--)
for(j=248;j>0;j--);

}
/*************主函数*****************************/
void main(void)
{
unsigned char i,j;

while(1)
{
for(j=0;j<3;j++) //从左到右3次
{
for(i=0;i<8;i++) //循环8次逐条点亮8个LED点阵灯
{
P2=taba[i];
P0=0xff;
delay1();
}
}

for(j=0;j<3;j++) //从右到左3次
{
for(i=0;i<8;i++) //循环8次逐条点亮8个LED点阵灯
{
P2=taba[7-i];
P0=0xff;
delay1();
}
}

for(j=0;j<3;j++) //从上到下3次
{
for(i=0;i<8;i++) //循环8次逐条点亮8个LED点阵灯
{
P2=0x00;
P0=tabb[7-i];

delay1();
}
}

for(j=0;j<3;j++) //从下到上3次
{
for(i=0;i<8;i++) //循环8次逐条点亮8个LED点阵灯
{
P2=0x00;
P0=tabb[i];

delay1();
}
}
}
}
第3个回答  2015-03-27
需要给你完成一份吗
第4个回答  2015-03-28
给电路图!本回答被提问者采纳

用51单片机驱动8*8点阵 的代码
8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。不知道你要实现什么样的显示,不过基本方法是一样的。我这有一个现成的8*8的程序,你可以根据这个去修改:在8X8点阵LED上显示...

求一个8*8LED点阵汉字显示C语言程序(C52)
include<reg52.h>\/\/单片机头文件 void delay1ms(unsigned int ms);\/\/延时ms函数声明(可根据实际情况更改)unsigned char code led0[]={};\/\/字码表,你自己把你要显示的字码放进去就可以了 void main(){ unsigned char w,i;while(1){ \/\/显示0 w=0x01; \/\/行变量为第一行 for(i=0;...

我的单片机处理控制8×8LED点阵屏的显示。由于仅采用一个8×8LED点阵...
我帮你写了~~~记得给分 include <iom16v.h> include <macros.h> define uint unsigned int define uchar unsigned char void time(uint z) \/\/延时函数 { uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);} uchar table[]= { \/\/高位到低位 0x7f,0xbf,0xdf,0xef,0xf7...

单片机汉字8x8点阵LED动态显示程序
0x08},\/\/4 {0x3E,0x20,0x20,0x3E,0x02,0x02,0x22,0x1C},\/\/5 {0x1C,0x22,0x20,

【51单片机系列】文字取模软件使用
【51单片机系列】文字取模软件详解 要利用这款软件在8x8 LED点阵上显示文字,首先双击打开,选择【新建图像】并设置为8x8。操作界面就像一个LED矩阵,点击格子即可控制显示。输入数字0时,通过点击构建其形状。注意取模方式:横向取模时文字纵向排列,纵向取模时则横向排列。完成输入后,Ctrl+Enter确认,...

用51单片机以及8*8点阵显示英文字母或者数字(最好是全部数字和字母都说...
8*8点阵是动态扫描的 静态显示也是动态扫描的结果。比如说下面这个程序:include <AT89X52.H> include "74HC595.H"unsigned char code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code b[]={0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00};\/*"L",0*\/ void ...

单片机,如何让8X8LED点阵屏由下往上循环显示?
\/\/--- \/\/--- \/\/ \/\/16*16点阵LED显示中文程序 \/\/本程序逐个显示中文,从右至左流动显示 \/\/使用横向,流动只有字节间操作 \/\/字模数据:文字下侧存储为数组中奇数 \/\/文字上侧存储为数组中偶...

单片机 在8X8LED点阵显示数字
我想你会显示数码管吧。那你就行写一个程序把8位数码管的8个数据接点阵的行或列,位选接8个公共端。取数建议你用2维数组,X〔10(10个数)〕〔8(位数码管8行的数据)〕在加个键盘判断if(input){A ;if(A>9)A=0;} P1=X[A][?行(这里是扫描行数的变量)]参考资料:如果您的回答是...

利用单片机,在一个8*8的点阵显示屏上显示一个“大”字,怎样编程啊...
1.首先用字模提取软件提取“大”字的字模。软件网上很多,用“字模提取”关键字可以搜到。也可以用EXCEL在8x8上方框上自己写一个“大字”,然后有标记的为1,没标记的为0,那么一行下来有8位既一个节,总共8行,共8个字节。2.把这8个字节做成数组。放在FLASH里比较好。3.使用时,数组第一个元素送...

单片机什么代码能88点阵动态显示
88点阵动态显示 硬件组成:单片机最小系统+88点阵+按键 图形移动模式 切换 1 跳动 2 上移 3 下移 4 左移 5 右移 显示内容汉字 一 二 三 四。四个字 仿真图:打开APP查看高清大图 程序:打开APP查看高清大图 源代码 include define uchar unsigned char define uint unsigned ...

相似回答