ACALL DELAY ;延时,保持灯亮一段时间 DJNZ R0, LOOP2 ;循环,点亮下一个灯 SJMP MAINLOOP ;循环,重新开始下一轮 如果你是管脚输出低LED才亮,只需将MOV A ,#00 和SETB C改为MOV A, #0FFH和CLR C即可。方案
delay ; 延时 rl a ;循环左移。ajmp loop ; 跳转main继续循环 delay: mov r5,#20 ;延时子程序1闪烁灯调用 d1:mov r6,#20 d2: mov r7,#250 djnz r7,djnz r6,d2 djnz r5,d1(时间此处可自行设置)
程序1:ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV SP,#5FH LOOP:MOV A,P2 MOV B,A MOV P0,A MOV P1,#0FFH LOOP1:LCALL DELAY MOV C,P1.7 MOV A,P0 RLC A MOV P0,A MOV A,P1 RLC A MOV P1,A MOV
把灯的正极接电源正极 即vcc 负极分别接p0.0-p0.5 此时 给p0 送0灯就亮 1灯就不亮 程序已经过调试 可用 仿真如下:
答疑解难 跑马灯程序 ORG 0000H LJMP MAIN ORG 0100H MAIN: JB P0.7,MAIN ;等待开始键按下 LCALL YS ;按键延时 JB P0.7,MAIN MOV A,#7FH ;是开始键按下 则跑马灯开始
void Delay1ms(unsigned int count){ unsigned int i,j;for(i=0;i
ORG 0000H MOV 30H, #0 MOV 31H, #0 M_LOOP:MOV R2, #8 DISP1:CALL DL CALL SHIFT2 DJNZ R2, DISP1 MOV R2, #8 DISP2:CALL DL CALL SHIFT1 DJNZ R2, DISP2 SJMP M_LOOP ;
51单片机控制,两个74ls164 十六个LED小灯,求跑马灯程序 求汇编程序
we2=1;P0=xdat[i];we2=0;if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0;if(++Num_Index==10) Num_Index=0; //显示下一个数字 } break;case 1
sbit SH_CK = P1^6; //移位寄存器时钟输入 void Ser_IN(unsigned char Data); //串行数据输入 void Par_OUT(void); //串行数据输出 //void Ser_Par(unsigned char Data); //串行输入,并行输出 //串行数据输
主循环程序中,j 循环结束别加延时,那个delay(250);删掉。j 循环一次只是显示一屏,应再循环显示n屏,再 i 循环,调这个n大小,就是调滚动的速度。你现在是,一屏只显示一次,又加延时250,这等于黑屏了250的延时
另外如果你的51还要执行别的运算,应尽量减少它们的时间,也就是让51的绝大部分时间都在驱动LED“显示”。如果还不行,那就只能在LED驱动一侧加锁存器了。
我用51单片机串行通信方式去控制一块8×8LED点阵屏,显示的时候,文字闪烁厉害……
在1602的第一行 循环显示 welcome to china //用1602循环右移显示"Welcome to China"include
会用1602显示英文,就可以用12864lcd显示汉字,二者区别就在于,显示汉字要送两个字节的代码,其中首个字节的值要大于128,而ASCI码的值均小于128。汉字的机器码不用计算,编译器会自动编译,例如 unsigned char code table[
51单片机对lcd1602一些基础程序 include
1602是一字符型LCD显示器,总共显示2*16个字符(也就是两行,每行16个字符,字符点阵为5*7或5*10),在其点阵库里只有少量的几个汉字,而且要显示它们,必须知道它们在字库里的位置(类似于ASCII码)。要显示汉字,可用
【1】1602液晶是字符型液晶,总共有2行,每行16个字符。每个字符有效的可显示字体是5*8点阵字体。所以通常无法显示中文。中文的显示必须选择图形点阵型液晶。【2】特别地:你是指,显示“年月日”,之类的简单的汉字吧?
LCD1602只允许显示ASCII字符,汉子不在其中,不能显示。汉子可以使用点阵型的LCD显示,如LCD12864。
51单片机1602液晶显示汉字
这个只能单次刷新。你可以以开头的为单位安排显示,如果按上(控制)(或者已有方向),在这个之前(方位标志的方向)写一个格行了。 同时消除最后一个格子。至于加长啊,。 (就是说你只按前一步的时候不用消除最后一个
void init_dis(); //显示初始化 void write_595(uchar data1); //向595写一字节数据 void delay(uchar n); //n*1ms void hccl(); //显示缓存全左移一位处理 void main(){ uchar i;init_dis();in
把LED灯在电路板上拼成一个笑脸图案就可以了。把LED的负极连在一起接到电源负极,搭建一个三极管共射电路,LED的正极连在一起经过一个适当阻值的电阻接到三极管共射电路的输出端,三极管的控制端---基极接单片机的IO口,
你的程序没有问题的,估计是,你的程序与你的开发板上74HC595的引脚不符吧。下图是根据你的程序画的仿真图,程序没有变,只是把显示的图形数据变了一下,显示出菱形。u8 code duanled[]= { /*-- 调入了一幅图像:这
基于51单片机的16×16点阵屏流动显示目录一,制作所需器材二,STC89C52简介三,点阵的简介四,程序五,演示六,总结一.制作所需器材1.单片机开发扳一块;2.16*16LED点阵一块;3.杜邦线若干;返回二.STC89C52简介STC89C52是S
http://wenku.baidu.com/view/aa7092dbd15abe23482f4df6.html 51单片机LED点阵屏显示设计 http://wenku.baidu.com/view/c81be9eb19e8b8f67c1cb99b.html 89c51单片机控制的LED点阵显示系统+Keil C源程序 http://wenku
下面是8×8的LED点阵程序,参考一下吧 include
51单片机如何储存LED点阵屏显示的图案并且可以实现调用出来,求程序?
介绍了一款以单片机AT89S51为控制器的LED点阵显示屏系统的设计。该系统可实现中英文字符的显示和动态特效显示。并且可以通过级连的方式来扩大显示屏幕的尺寸以达到增加显示内容的目的。系统采用PC机作为上位机,上位机向单片机发送控制命令和上位机所存储的显示代码,AT89S51单片机接收并处理PC 机的控制命令以及显示代码,由显示驱动模块驱动一个16×16分辨率的LED点阵显示屏的扫描显示。PC机与单片机之间的通信采用RS—232C通信标准来实现。所选用的AT89S51单片机具有价格低廉程序写入方便的特点使得整个系统方便维护和检修。除此之外,该系统只占用了单片机少量的I /O口和内存,为系统留下了功能扩展的空间。51和led点阵一般要用到动态扫描的方式,也就是显示的画面不是一下子就把整个画面的内容全部显示出来,而是逐行显示的,只不过显示的频率超过了50HZ 甚至更高,所以我们看起来是“不晃眼”的。也就是说,屏幕显示是由行显示组成的(即子程序)。行显示再细分就是有位显示组成,不过行显示就不用逐位显示了。其实行显示就是串入并出,即行显示是一下子就显示出来的。 我给你传一份资料你参考一下。。。。。。
5ms×8=40ms(25次/秒),这只是人眼视觉暂留的下限。 我觉得你至少应该提高4~5倍的刷新速度才行(例如每行显示1ms)。 另外如果你的51还要执行别的运算,应尽量减少它们的时间,也就是让51的绝大部分时间都在驱动LED“显示”。 如果还不行,那就只能在LED驱动一侧加锁存器了。
你好,你那个U2是什么器件?请说明一下。或者把这个仿真文件直接发过来,实现比较快。
给个你参考 ******* /* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。 * 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。 */ /* 程序详细功能介绍: *做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上, *输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。 */ ORG 0000H LJMP START ORG 0030H START: MOV R2,#8 ;左移次数 MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮 SETB C LOOP: MOV P0,A LCALL DELAY RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动 DJNZ R2,LOOP MOV R2,#8 ;右移次数 LOOP1: RRC A ;右移流水灯 MOV P0,A LCALL DELAY DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END
for(i=0; i<2; i++) { SBUF = LEDcode[i]; while(TI ==0);//等待发送完字节,TI置1 TI = 0 ; }