可左移和静态显示,程序如下:include
AJMP BEGIN ORG 0030H BEGIN:MOV R0,#8 MAIN:MOV A,R0 MOV R2,#00H MOV SP,#60H MOV R3,A MOV R4,#16 MOV DPTR,#WORDTAB START:JNB P1.0,SLOW JNB P1.1,SOON MOV R1,#00H SCAN8:MOV A,R1 SWAP
1:Dais-PG206试验箱,这是教学用的,应该是你们学校的实验仪器,建议你到实验室了解一下。2:16×16点阵就是256个LED发光二极管集成在一块上,16个脚接高电平16脚通过限流电阻接地,通电就亮,原理很简单。3:通信原理
基于51单片机的16×16点阵屏流动显示目录一,制作所需器材二,STC89C52简介三,点阵的简介四,程序五,演示六,总结一.制作所需器材1.单片机开发扳一块;2.16*16LED点阵一块;3.杜邦线若干;返回二.STC89C52简介STC89C52是S
基于51单片机的16×16点阵屏流动显示单片机课程设计
/***从RRp的第RRheard个字右移出显示number个字***///用指针更加节约空间void R_Removeout_Word(uchar *RRp,uchar RRheard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i
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++);}
;显示字用查表法,不占用内存,字符用16x16共阳LED点阵,;效果:向上滚动显示5个字,再重复循环。;R1:查表偏址寄存器,B:查表首址,R2:扫描地址(从00~0FH)。;R3:滚动显示时控制移动速度,单字显示可控制静止
可以真接从网上下载一个汉字字库。据我所知,HZK16正好是16*16点阵汉字库。我们可以通过编写一段VB程序将字库里边的汉字字模代码取出,然后通过串口送给单片机。这样单片机就可以随我们的需要进行显示内容的更新。希望对你会有
TxD 两个三八译码器74LS138组成的16个输出端连接 16 个 9012的三极管的基极 B,发射极E 连接5V电源,集电极C连接到三个汉字点阵的16 个行线控制端。
你这个单片机是带I2C接口的 那个SMBus就是,我用这个系列的单片机写过,模拟的还没有借口直接来的好。 我的空间里面有我调好的一篇247519442 你说的全部是0xff也是正常的,因为外部存储一般都是高电平为空,也就是说你的
首先,从Proteus元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面
单片机16*16LED点阵怎样让文字从上到下显示出来 求程序
第一步:先制作字库,少量汉字可以利用画笔工具,在画笔上写上16*16的汉字(最好是宋体),在放大功能下查看每个像素,黑色为1,白色为0,按照列或行依次读取。一个汉字的点阵用32个字节表示。第二步:将上述汉字点阵制成
是仿真,还是实物?一个8×8点阵会接吗?是按8行,8列控制的吧。那16×16点阵就按16行,16列控制的。即需要两个锁存器,锁存16行数据。再需要两个锁存器,锁存16列的数据。
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显示,汉字和代码的转换。
一般建议用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显示?咨询详细解答!!!
这是一列列的数模。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);
LED显示器是用发光二极管构成的显示器。构成方式有两大类:一是笔段字符式,一般又有三种:7段(/8段)数码管、15段(/17段)数码管和6段符号显示器;二是点阵字符式,一般有5×7、5×8、8×8和16×16等若干种点阵结构。为了适应不同电路的需要,根据构成LED显示器的发光二极管公共极的极性,有共阴极和共阳极两种形式。对共阴极数码管,公共阴极接地,当各段阳极上的电平为高电平时,该段接通亮,电平为0时,该段关断不亮。对共阳极数码管则刚好相反,高电平时不亮,低电平时亮。这种器件根据显示数位分类,可以分为一位、双位和多位LED显示器,一位LED显示器就称作LED数码管,两位以上的一般就称作LED显示器。 要实现LED的汉字显示在进行、列的扫描的同时还要对其进行供电,因为每行16个二极管点亮电流很大,普通芯片的输出电流远不能满足。下面为你提供实例参考 以16×16显示器为例,你可以用并行扩展芯片8255实现点阵的行扫描,8255可以将单片机一个8位并行I/O口扩展成16位(8255的PA口、PB口同时使用);列扫描的16位可以用两个TTL门74LS164(8位移位寄存器),74LS164再接ULN2803以对电流放大后再接16×16点阵。74LS164的移位触发端A、B可以接上一片的相邻输出端,Q1或Q7这样实现能实现多个芯片连续移位,以实现显示屏汉字从右到左或从左到右的移动显示功能。 由于百度知道不能插入图片,所以不提供图片了,将具体引脚接法告诉你:8255的D0--D7数据输入端接单片机P2.0--P2.7(任一并行I/O口),A0接P2.0,A1接P2.1,/WR接单片机的/WR,/RD接高电平,如果单片机资源足够,则片选端/CS接低电平;74LS164芯片的触发端A、B接到一起,与CK脚、CLK脚、随意接到单片机的I/O上。
ORG 0000H AJMP BEGIN ORG 0030H BEGIN: MOV R0,#8 MAIN: MOV A,R0 MOV R2,#00H MOV SP,#60H MOV R3,A MOV R4,#16 MOV DPTR,#WORDTAB START: JNB P1.0,SLOW JNB P1.1,SOON MOV R1,#00H SCAN8: MOV A,R1 SWAP A MOV P3,A SWAP A INC A MOV R1,A MOV A,R2 MOVC A,@A+DPTR CJNE A, #0DDH,NEXT AJMP MAIN NEXT: MOV P2,A INC R2 MOV A,R2 MOVC A,@A+DPTR MOV P0,A INC R2 LCALL DELAY1400 MOV P0,#00H MOV P2,#00H DJNZ R4,SCAN8 MOV R4,#16 DJNZ R3,SCAN16 AJMP END16 SCAN16: MOV A,R2 CLR C SUBB A,#32 MOV R2,A AJMP START END16: INC DPTR INC DPTR MOV A,R2 CLR C SUBB A,#32 MOV R2,A MOV A,R0 MOV R3,A AJMP START SLOW: LCALL DELAY20000 DEC R0 JB P1.0,$ AJMP BACK SOON: LCALL DELAY20000 INC R0 JB P1.1,$ AJMP BACK BACK: LCALL DELAY20000 AJMP START DELAY1400: ;误差 0us MOV R6,#7FH DL0: MOV R7,#04H DJNZ R7,$ DJNZ R6,DL0 RET DELAY20000: ;误差 0us MOV R6,#0D7H DL1: MOV R7,#2DH DJNZ R7,$ DJNZ R6,DL1 NOP NOP RET WORDTAB: DB 00H,1FH,80H,20H,40H,40H,20H,40H,10H,40H,08H,40H,04H,20H,02H,10H; DB 02H,10H,04H,20H,08H,40H,10H,40H,20H,40H,40H,40H,80H,20H,00H,1FH; TAB:;结束码 DB 0DDH END