西北民族大学单片机课程设计报告课题名称:16×16LED点阵显示学院:电气工程学院专业班级:09级电气工程及其自动化3班学号:P091812929姓名:蒋呈指导老师:马蕙兰16*16点阵设计摘要单片机自20世纪70年代问世以来,以极其高的性价比
一般建议用2片3-8译码器做片选信号(控制16个口),然后再用两个P口(也是16脚)进行数据传输,这样就能实现16*16的数据显示了,建议PROTUES仿真,网上这样的例子很多,但仿真时可能效果不如实际开发板上效果好。这里有个
16*16的,其实用一个单片机就能搞定了,不过你们老师让你做肯定是传统的做法,4953做行驱动,就是选择某一行显示,595移位寄存器可以把这行的数据显示出来,当然最主要的是一个单片机来控制这些的工作,其它一些电阻电容啊是
这是一列列的数模。0x04对应的是左边第一列下面8个点阵的显示0x28对应的是左边第一列上八位。且上面是高位下面是低位。这样你在16x16的格子中把所有1标出来就可以组成一个欢字了
首先显示一列(也可以一行,具体你这里是一行还是一列麻烦自己看一下),即这一列是六个点,用到你上面的两个数据,然后给i这一行置位(是高是低看你电路)延时显示一段时间后,关闭显示,消隐掩饰,继续取下两组数据
这样就可以用矩阵键盘扫描的方式分别对256个LED进行动态扫描。不过单片机的工作速度最好在16M以上。否则,描述的速度太慢了,会出现闪烁的情况。不过,要是有32个I/O口的话,就不用74HC595了,不过要是还有其它功能需要用到
Proteus中只有5×7和8×8等LED点阵,并没有16×16LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要16×16点阵。下面我们就首先介绍使用8×8点阵构建16×16点阵的方法,并构建一块16×16LED点阵,用于本例的
请问怎样用单片机做16*16LED显示?咨询详细解答!!!
4个574是驱动管,因为你的单片机的管教的输出电流只有10到20个毫安,无法驱动16个LED http://wenku.baidu.com/view/2f74a0bc960590c69ec3765f.html 上面的连接是5744的datasheet 把四个都用上吧,你那个138译码器是用
首先,从Proteus元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面
首先显示一列(也可以一行,具体你这里是一行还是一列麻烦自己看一下),即这一列是六个点,用到你上面的两个数据,然后给i这一行置位(是高是低看你电路)延时显示一段时间后,关闭显示,消隐掩饰,继续取下两组数据
这是一列列的数模。0x04对应的是左边第一列下面8个点阵的显示0x28对应的是左边第一列上八位。且上面是高位下面是低位。这样你在16x16的格子中把所有1标出来就可以组成一个欢字了
单片机16*16(4个8*8)LED显示,汉字和代码的转换。
51单片机驱动1616LED点阵显示动画汉字(汇编程序)http://wenku.baidu.com/view/a1a08f05cc1755270722085a.html 基于51单片机控制的LED点阵显示屏(c 语言)http://wenku.baidu.com/view/aa7092dbd15abe23482f4df6.html 51
肯定是取点阵时扫描方向搞反了,改正方法:调整取模方向,如原来是"逆向",改为"顺向",或反之,重新生成字模,而不是简单地将上面的字模数据顺序调整
Proteus中只有5×7和8×8等LED点阵,并没有16×16LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要16×16点阵。下面我们就首先介绍使用8×8点阵构建16×16点阵的方法,并构建一块16×16LED点阵,用于本例的显示任务。首先,
1、一片AT89S51单片机2、由4个8*8点阵LED模块组成一个16X16点阵LED3、4个按键开关(功能预留)4、一个REST手动复位按键 注意:本电路板耗电较大,正常工作时LM7805稳压器比较烫手,有条件的客户可以加装散热器或者直接用5V/1A开关电源供电
include"at89x51.h"unsigned char code led[]={0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0xFF,0x90,0x00,0x18,0x1D,0xF7,0x13,0x14,0x11,0x54,0x15,0x94,0x19,0x14,0x51,0x14,0x91,0xF6,0x7F,0x04,
单片机方的程序设计 单片机在LED点阵汉字显示系统中主要负责数据的接收、存储和扫描显示 LED点阵屏三大主要功能。串行移动的子程序设计 这是一个通用子程序,在显示子程序中都要被调用,功能是移位寄存器 74HC595接收单片机发出的点阵行数据,逐
单片机在通过点阵显示汉字的时候,需要用到如下技术手段:1、汉字取模 汉字取模,即把汉字对应16x16点阵的图形用16进制数来描述,形成可以用于驱动显示的数据。例如下图,的汉字“中”该字的16x16点阵图形中,每行有16个像
51单片机用汇编语言驱动16*16点阵显示“机电工程系”汉字
第一步:先制作字库,少量汉字可以利用画笔工具,在画笔上写上16*16的汉字(最好是宋体),在放大功能下查看每个像素,黑色为1,白色为0,按照列或行依次读取。一个汉字的点阵用32个字节表示。第二步:将上述汉字点阵制成
1、一片AT89S51单片机2、由4个8*8点阵LED模块组成一个16X16点阵LED3、4个按键开关(功能预留)4、一个REST手动复位按键 注意:本电路板耗电较大,正常工作时LM7805稳压器比较烫手,有条件的客户可以加装散热器或者直接用5V/1A开关电源供电
4个574是驱动管,因为你的单片机的管教的输出电流只有10到20个毫安,无法驱动16个LED http://wenku.baidu.com/view/2f74a0bc960590c69ec3765f.html 上面的连接是5744的datasheet 把四个都用上吧,你那个138译码器是用
首先,从Proteus元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面
首先显示一列(也可以一行,具体你这里是一行还是一列麻烦自己看一下),即这一列是六个点,用到你上面的两个数据,然后给i这一行置位(是高是低看你电路)延时显示一段时间后,关闭显示,消隐掩饰,继续取下两组数据
这是一列列的数模。0x04对应的是左边第一列下面8个点阵的显示0x28对应的是左边第一列上八位。且上面是高位下面是低位。这样你在16x16的格子中把所有1标出来就可以组成一个欢字了
单片机16*16(4个8*8)LED显示,汉字和代码的转换。
具体的LED显示屏控制电路如图1所示。整个电路由单片机89C52、点阵数据存储器6264、列驱动电路ULN2803、行驱动电路TIP122、移位寄存器4094及附属电路组成。该电路所设计的电子屏可显示10个汉字,需要40个8×8 LED点阵模块,可组成16×160的
即这一列是六个点,用到你上面的两个数据,然后给i这一行置位(是高是低看你电路)延时显示一段时间后,关闭显示,消隐掩饰,继续取下两组数据,显示i++,
Proteus中只有5×7和8×8等LED点阵,并没有16×16LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要16×16点阵。下面我们就首先介绍使用8×8点阵构建16×16点阵的方法,并构建一块16×16LED点阵,用于本例的显示任务。首先,从
可以真接从网上下载一个汉字字库。据我所知,HZK16正好是16*16点阵汉字库。我们可以通过编写一段VB程序将字库里边的汉字字模代码取出,然后通过串口送给单片机。这样单片机就可以随我们的需要进行显示内容的更新。希望对你会有
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0xF0,0x80,0x00,
单片机16*16 led显示 点阵字库
if(i==16)i=0;if(time_50ms==20){ time_50ms=0;j++;if(j==2)j=0;} } } int_T0() interrupt 1 { TH0=0X3C;TL0=0XB0;time_50ms++;} delay(){ unsigned char t1;for(t1=0;t1<100;t1++);}
刚好,我上个星期写了个向上滚动的,字有点自恋,我就不改了 上程序 include
TxD 两个三八译码器74LS138组成的16个输出端连接 16 个 9012的三极管的基极 B,发射极E 连接5V电源,集电极C连接到三个汉字点阵的16 个行线控制端。
可以真接从网上下载一个汉字字库。据我所知,HZK16正好是16*16点阵汉字库。我们可以通过编写一段VB程序将字库里边的汉字字模代码取出,然后通过串口送给单片机。这样单片机就可以随我们的需要进行显示内容的更新。希望对你会有
你这个单片机是带I2C接口的 那个SMBus就是,我用这个系列的单片机写过,模拟的还没有借口直接来的好。 我的空间里面有我调好的一篇247519442 你说的全部是0xff也是正常的,因为外部存储一般都是高电平为空,也就是说你的
首先,从Proteus元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面
单片机16*16LED点阵怎样让文字从上到下显示出来 求程序
由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。总结本文设计的一个室内用16x16的点阵LED图文显示屏,能够在目测条件下LED字库自己做。 网上有字模生成的软件。
这是一列列的数模。0x04对应的是左边第一列下面8个点阵的显示0x28对应的是左边第一列上八位。且上面是高位下面是低位。这样你在16x16的格子中把所有1标出来就可以组成一个欢字了
51单片机对lcd1602一些基础程序 #include #define dataport P1 sbit RS=P2^ 6; sbit RW=P2^5; sbit EN=P2^4; //======================== //========================= void waitfor() //检测忙信号函数 { dataport=0xff; RS=0;RW=1;_nop_(); //选择指令寄存器 读操作 EN=1;_nop_(); //使能操作 while(dataport&0x80); //如果最高位是1 表示1602正忙 原地踏步 忙完后芯片会将高位拉低 EN=0; } //====================== void writedata(unsigned char dataw) //写数据到lcm { waitfor(); //测忙 RS=1;RW=0;_nop_(); //选择数据寄存器 写操作 dataport=dataw;_nop_(); //将数据送到数据口 EN=1;_nop_();_nop_();EN=0; //使能 } //========================== void writecmd(unsigned char cmd) //写命令到lcm { waitfor(); RS=0;RW=0;_nop_(); dataport=cmd;_nop_(); EN=1;_nop_();_nop_();EN=0; } //=========================== void init(void) // 初始化函数 { writecmd(0x38); //功能设定 8位数据传输 双行显示 writecmd(0x0c);//显示器开关 writecmd(0x01);//清屏 writecmd(0x06);//字符进入模式 每进入一个字符光标向右移动一格 原有字符不动 //我在刚开始学的时候不知道下一个字符显示在哪 是和AC值有关还是和光标位置有关? //最后摸索出来是只和光标定位有关 现在还是不知道Ac值有什么用 } //========================= void location(unsigned char x,unsigned char y) //确实坐标函数 { unsigned char temp; temp=x&0x0f; //只要x数据的后四位 if(y){temp=temp|0x40;} //第一行为0 第二行为1 如果y=1则地址加0x40 temp|=0x80; //DDRAM地址的命令DB7为一 writecmd(temp); } //============================== void displyonechar(unsigned char x,unsigned char y,unsigned char dataw) //显示一个字符函数 { location(x,y); writedata(dataw); } //======================================= void displylistchar(unsigned char x,unsigned char y,unsigned char *p) //显示字符串 { while(*p) //当一个字符型数组读完时*P指的为零 { displyonechar(x,y,*(p++)); x++; } } //===================================================== void writecgram(unsigned char address,unsigned char *p) //写CGRAM的数据 { unsigned char i=8; writecmd(address); //CGRAM里的地址 初始值0x40 每次加0x80 while(i--) { writedata(*p); p++; } } //===================================================== void displyonecharacter(unsigned char x,unsigned char y,unsigned char address,unsigned char *p) //显示一个自定义字符 { unsigned char i=8; writecmd(address); //CGRAM里的地址 初始值0x40 每次加0x08 while(i--) { writedata(*p); p++; } //============================================================ location(x,y); //设定要显示的位置 writedata((address&=0x3f)/0x08); //要从CGRAM中读出数据在1602上显示 搞了半天发现CGRAM里的地址 } //和DDRAM里的地址有上面的转换关系 //======================================================== void displynumber(unsigned char x,unsigned char y,unsigned long num) //显示一个整数 { unsigned int number[8]; int k,gh; for(k=0;;k++) { *(number+k)=(unsigned int)(num%10);//强制类型转换 num=num/10; if(num==0)break; } for(gh=k;gh>=0;gh--) { displyonechar(x,y,(*(number+gh)+48)); x++; } } //字型码 uchar code nin[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};// "年" uchar code yue[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11};// "月" uchar code ri[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x11,0x1f};// "日" 显示汉字 displyonecharacter(0,0,0x40,nin); displyonecharacter(1,0,0x80,yue); displyonecharacter(1,0,0xc0,ri);
很简单/*16*16点阵屏的显示*/ #include #include #define DATAOUT P2 //指定P2口做为输出 sbit DATA=DATAOUT^0; //列数据输出位 sbit SCLH=DATAOUT^1; //列扫描时钟位 sbit SCLT=DATAOUT^2; //列数据锁存位 sbit AB=DATAOUT^4; //行数据输出位 sbit SCK=DATAOUT^5; //行扫描时钟位 unsigned char lhj[32];//32字节RAM做为16*16点阵屏显示缓存 void display();//做为点阵扫描函数,将显示缓存的数据输出到点阵屏 void displayS(unsigned int timer);//指定时间扫描显示 void displaymove(unsigned char *lp,unsigned char c,unsigned char timer);//显示汉字内容的移动效果,LP指向要显示第一个字的首地址,C表示显示字的个数, //timer是移动的速度 void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer); //上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度 void delay(unsigned int a);//延时子函数 code unsigned char lin[32]={0x04,0x20,0x04,0x20,0xff,0xfe,0x04,0x20,//汉字"英"的点阵数据。汉字点阵数据,可用汉字库点阵生成软件获得 0x01,0x00,0x1f,0xf0,0x11,0x10,0x11,0x10, 0x11,0x10,0xff,0xfe,0x01,0x00,0x02,0x80, 0x04,0x40,0x08,0x30,0x10,0x1c,0x20,0x08}; code unsigned char yang[32]={//达 0x00,0x00,0x40,0x80,0x30,0x80,0x10,0x80, 0x0f,0xfc,0x00,0x80,0x00,0x80,0xe0,0x80, 0x21,0x40,0x21,0x20,0x22,0x18,0x24,0x0c, 0x28,0x08,0x50,0x02,0x8f,0xfc,0x00,0x00}; code unsigned char dian[32]={//通 0x40,0x00,0x27,0xf8,0x20,0x90,0x00,0x60, 0x07,0xf8,0x04,0x48,0xe7,0xf8,0x24,0x48, 0x24,0x48,0x27,0xf8,0x24,0x48,0x24,0x68, 0x24,0x50,0x50,0x00,0x8f,0xfe,0x00,0x00}; code unsigned char zi[32]={//讯 0x40,0x00,0x27,0xf8,0x31,0x08,0x21,0x08, 0x01,0x08,0xf1,0x08,0x17,0xe8,0x11,0x08, 0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x0a, 0x15,0x0a,0x19,0x0a,0x11,0x04,0x00,0x00}; code unsigned char LY[32]={//图案数据 0x00,0x00,0x30,0x00,0x30,0x20,0x30,0x30, 0x30,0x18,0x30,0x0C,0x30,0x06,0x3F,0x7F, 0x3F,0x7F,0x00,0x06,0x00,0x0C,0x00,0x18, 0x00,0x30,0x00,0x20,0x00,0x00,0x00,0x00}; void main(void) //主入口函数 { unsigned char i=0,j=0; for(i=0;i<32;i++) lhj[i]=LY[i];//将图案数据复制到显示缓存 while(1){ displayS(2); //显示图案约2秒 displaymove(lin,4,7);//将从"英"开始的四个汉字从右向左移动 displayS(1); //等持约1秒 displaymovetb(1,0,10); //将点阵上显示的内容向下以10的速度移出,补上0,即清空显示屏 displayS(1); //等待1秒 displaymovetb(0,lin,10); //达"达"字以10的速度向上移动 displaymovetb(0,yang,10); //将"通"字以10的速度向上移动 displaymovetb(0,dian,10); //将"讯"字以10的速度向上移动 displaymovetb(0,zi,10); //将"子"字以10的速度向上移动 displaymovetb(0,0,10); //以10的速度向上清空 displayS(1); //等待1秒 displaymovetb(1,LY,10); //将"图案"以10的速度向下移动 } } void display()//显示 { unsigned char i,ia,j,tmp; //定义变量 DATAOUT=0XFF; //置位高电平做准备 AB=0; //将行数据位清0,准备移位 for(i=0;i<16;i++){ //循环输出16行数据 SCK=0; //为行移位做准备 SCLT=0; //为列锁存做准备 for(ia=2;ia>0;){ //每行16个点,循环位移两个字节 ia--; //循环两次 tmp=~lhj[i*2+ia]; //读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成, //电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据 for(j=0;j<8;j++){ //循环两次,每次移一个字节, SCLH=0; //为列移位做准备 DATA=tmp&0x01; //将数据低位做输出,由电路图可知,移位寄存器的最后一位对应最后一列,因此先移最后一位 tmp>>=1; //将数据缓冲右移一位,为下次输出做准备 SCLH=1; //将DATA上的数据移入寄存器 } //移入单字节结束 } //移入两个字节结束 DATAOUT|=0X24; //此句可以用以下两句来理解,如果不将两句合为一句,将出现拖影现像 //SCK=1; //SCK拉高,行数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳) //SCLT=1; //SCLT拉高,将数据锁存输出到相应列的点阵发光管显示,显示一行后将保持到下一行显示开始 AB=1; //行数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位, //移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱 } j=64; while(j--); //每一行的显示,保持了两字节的移位时间,因此,最后一行的显示,也要加入保持时间,补尝显示的亮度 SCK=0; // SCK=1; //将最后一行数据移出 } void displayS(unsigned int timer) //指定时间扫描显示 { unsigned char i; while(timer--){ //当timer=1时,大约1秒时间 i=130; while(i--) display(); } } void displaymove(unsigned char *lp,unsigned char c,unsigned char timer)//显示汉字内容的移动效果,LP指向要显示第一个字的首地址,C表示显示字的个数, //timer是移动的速度 { unsigned char i=0,j=0,ia=0; unsigned int tmp=0,timerc=0; unsigned char tmp2[16]; c*=2; //因一个汉字由32字节组成,而移位显示,要分开半个汉字16字节处理,因此将这里乘以2 for(i=0;i<16;i++) tmp2[1]=0; //将缓冲区清0, while(c){ //循环处理 if(lp!=0){ //当lp指向的地址为0时,直接用组缓冲0补上,效果是将当前显示的内容移出 tmp=c%2; //取余,目的是为了判断处理汉字的前半部份还是后半部份 for(i=0;i<16;i++){ tmp2[i]=lp[i*2+tmp]; //取半个汉字点阵数据,16字节 } if(tmp) //当tmp为1时,表时一个字数组处理完成,将地址转到下一个字 lp+=32; } //-------------- tmp=8; //变量再次利用 while(tmp){ //循环8次,是将下一个字的前半部份的字节数据移入显示缓冲 ia=0; //做为点阵数组的元素 for(i=0;i<16;i++){//移动是16行同时移,因此要处理16个字节 lhj[ia]<<=1; //移当前显示缓冲的前半行字节 if(lhj[ia+1]&0x80) //判断后半行字节的高位是否为1,是移入前半行字节低位,否则不处理 lhj[ia]++; ia++; lhj[ia]<<=1; //移当前显示缓冲的后半行字节 if(tmp2[i]&0x80) //判断下一个要显示汉字的前半行字节的高位是否为1,是移入,否则不处理 lhj[ia]++; ia++; tmp2[i]<<=1; //下一个要显示汉字的半行字节向高位移一位,准备下一次取位 } tmp--; timerc=timer; //处理完16行,调用显示函数更新点阵 while(timerc--) //循环做为处理的速度,即移动的速度 display(); } //---------- c--; //移完一半,进入下一半或下一个汉字,直到结束 } } void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer) //上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度 { unsigned char i=0,j=0,ia=0; unsigned int tmp=0,timerc=0; if(din){ //判断移动方向,向下 ia=32; //要移入第一个汉字的数组元素 i=16; //行索引 while(i--){ //逐行处理 j=30; while(j){ j--; lhj[j+2]=lhj[j]; //将上一行的内容复制到下一行,每两行内容相隔四个字节,复制15行 } if(lp==0){ //最后一行的处理,判断移入的内容是否为空,是用0移入 lhj[0]=0; lhj[1]=0; } else{ //否则,取字数组处理 ia--; lhj[1]=lp[ia]; ia--; lhj[0]=lp[ia]; } timerc=timer; //处理完16行,调用显示函数更新点阵 while(timerc--) //循环做为处理的速度,即移动的速度 display(); } } else{ //移动方向,向上 ia=0; //向上移动,移入汉字从低位开始 for(i=0;i<16;i++){ //处理16行 for(j=0;j<30;j++) //将下一行的内容复制到上一行,每两行内容相隔四个字节,复制15行 lhj[j]=lhj[j+2]; if(lp==0){ //最后一行的处理,判断移入的内容是否为空,是用0移入 lhj[30]=0; lhj[31]=0; } else{ //否则,取字数组处理 lhj[30]=lp[ia]; lhj[31]=lp[ia+1]; ia+=2; } timerc=timer; //处理完16行,调用显示函数更新点阵 while(timerc--) //循环做为处理的速度,即移动的速度 display(); } } } void delay(unsigned int a) //延时 { while(a--); } 有字模软件修改你想要显示的字,程序要字模改动别告诉我你不懂
#include unsigned int code hang[][32]={/*电 CB5E7 */ 0x01,0x80,0x01,0x80,0x01,0x80,0x3F,0xFC,0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x31,0x8C, 0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x31,0x8C,0x01,0x83,0x01,0x83,0x00,0xFF,0x00,0x00, /*气 CC6F8 */ 0x0C,0x00,0x0C,0x00,0x1F,0xFF,0x18,0x00,0x30,0x00,0x6F,0xFC,0x00,0x00,0x1F,0xF8, 0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x0F,0x00,0x0F,0x00,0x07,0x00,0x03, /*自 CD7D4 */ 0x01,0x80,0x01,0xC0,0x03,0x00,0x1F,0xFC,0x18,0x0C,0x18,0x0C,0x1F,0xFC,0x18,0x0C, 0x18,0x0C,0x18,0x0C,0x1F,0xFC,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x1F,0xFC,0x18,0x0C, /*动 CB6AF */ 0x00,0x30,0x00,0x30,0x7F,0x30,0x00,0x30,0x00,0xFE,0xFF,0xB6,0x18,0x36,0x18,0x36, 0x36,0x36,0x33,0x36,0x6F,0xE6,0xFF,0x66,0x60,0xC6,0x01,0x9E,0x03,0x0C,0x00,0x00, /*化 CBBAF */ 0x0C,0xC0,0x0E,0xC0,0x0C,0xCC,0x18,0xCE,0x18,0xDC,0x38,0xF8,0x78,0xF0,0xD8,0xE0, 0x19,0xC0,0x1B,0xC0,0x1E,0xC0,0x18,0xC6,0x18,0xC6,0x18,0xC6,0x18,0x7E,0x00,0x00,} unsigned char lie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0XFF}; main() {unsigned int i,j,k,m; while(1) {for(m=0;m<10;m++) for(k=0;k<100;k++) {for (i=0;i<8;i++) {P1=0XFF;P0=0XFF; P3=hang[m][i*2];P2=hang[m][i*2+1]; P1=lie[i];P0=0XFF; for(j=0;j<500;j++);} for (i=0;i<8;i++) {P1=0XFF;P0=0XFF; P3=hang[m][i*2+16];P2=hang[m][i*2+17]; P1=0xff;P0=lie[i]; for(j=0;j<500;j++);} }} } 上面显示“电气自动化”汇编有点难。必须得练。帮我加分 采纳哦
很简单的东西,我看着都不想回答了。 4个574是驱动管,因为你的单片机的管教的输出电流只有10到20个毫安,无法驱动16个LED http://wenku.baidu.com/view/2f74a0bc960590c69ec3765f.html 上面的连接是5744的datasheet 把四个都用上吧,你那个138译码器是用来选择那个574工作的 你需要做的就是用单片机控制四个574管子工作输出,就那么简单 输出-锁存-输出-锁存.......... 不断的刷新,一个汉字就出来了 如果你想确保你的点阵屏没事,不会烧的呢,你可以加上个 1K 的限流电阻,整个设计就完成了。
用汇编语言完全可以实现。 第一步:先制作字库,少量汉字可以利用画笔工具,在画笔上写上16*16的汉字(最好是宋体),在放大功能下查看每个像素,黑色为1,白色为0,按照列或行依次读取。一个汉字的点阵用32个字节表示。 第二步:将上述汉字点阵制成表格,采用查表法获取需要显示的汉字点阵。 第三步:依据字库提取时的顺序,采用扫描驱动的方式依次在行和列上输出点阵。