用扫描显示的方法,在一小段时间内,只让其中的一个亮,顺序轮流,就形成了你要的显示效果。
8位数码管可以看成是8个小灯泡。比如想显示1,则右侧上下两个小灯泡点亮即可。按一定顺序,把8个小灯泡编号,比如ABCDEFGH,当显示不同的数值,比如从0一直到9,把显示这十个数字时的小灯泡的编号记下来,也就形成了
如,先输出第一个数码管显示的段码,再输出第一位数码管阳极有效的位码,只有这一个阳极为1。延时,再依次输出后面的数码管显示的段码和位码。这样不断循环显示才行的。但显示每一位的延时不能太长了,如你这个延时子
通常8个数码管,都是采用动态显示电路的,也就是逐位点亮1ms~2ms,不停地轮流显示每一位,最终看到的是8个数码管全显示了,每一显示的数当然是不一祥的了。下图是用两片锁存器驱动的8个数码管电路。
1、多个数码管的段码连接在一起,位码分别控制。2、由于段码连接在一起,如果数码管全亮,则显示的数据相同,所以为了显示不同的数字,任何时刻,只能有一个数码管显示,其余不显示。3、用软件使这几个数码管轮流显示我们
如何让8个数码管显示出不一样的数值
while(1){ //在循环语句里执行显示函数 } } 说明:由于这个得看你的电路图具体情况,上面只是一个框框,你可以自己该就可以!
数码管段选连接到单片机P0口,位选连接到P2口 ORG 0000h MAIN:CALL DISPLAY AJMP MAIN DISPLAY:MOV R0,#0 MOV R1,#0x01 MOV DPTR,#TAB LOOP:INC R0 MOV A,R0 MOVC A,@A+DPTR MOV P0,#0 ;消隐 MOV P0,A
1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2
其实,可以这样,你就用中断 中断里面加个空循环,放手即跳出。比方说sbit stop=P3^5;void interrupt_s() interrupt 0 { if(stop== 0) while(stop==0);// 假设按下为低电平。}
求一个单片机程序,要使单片机驱动数码管进行1--8的循环显示,还要可以停止在某一个数字上,相当于选号。
while(1){ for(i=0;I<8;I++){ P0=1<
每200ms对字节LED值做左移1位指令(汇编可循环)。主程序中位寻址判断字节LED的bit(0-7)点亮相应的灯。或者直接P0=LED 纯想法、还没试过,感觉好玩,呵呵。 好像上述灯流的方式不对,不过可以改。。。
temp<<=1;} temp=0x7F;for(i=0;i<8;i++) //8个流水灯依次反向全部点亮 { P1=temp;delay(100); //调用延时函数 temp>>=1;} void delay(uint t) //定义延时函数 { register uint bt;for(;t;t--)for(
单片机流水灯C语言程序的源代码如下:include //51系列单片机定义文件。define uchar unsigned char //定义无符号字符。define uint unsigned int //定义无符号整数。void delay(uint); //声明延时函数。硬件特征 1、单片机
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
下面是c语言程序源码 include
把各个花样写在子函数,中断中对变量加1,在判断是否大于5,大于5就对变量清零。因为你要5种花样。主函数判断变量的值,1时执行从左到右依次点亮,2时执行从左到右逐个依次熄灭。依次下去 include "reg51.h" // 包
实现单片机信号灯1-8依次循环点亮的程序怎么写
include
define uint unsigned int // 宏定义 可以不用 define uchar unsigned char sbit //位申明 具体看你的数码管是共阴还是共阳的 还有要用到的I/O口 char tab[]={} //显示1--8的数码管编码;voide delay(uint a)//
数码管段选连接到单片机P0口,位选连接到P2口 ORG 0000h MAIN:CALL DISPLAY AJMP MAIN DISPLAY:MOV R0,#0 MOV R1,#0x01 MOV DPTR,#TAB LOOP:INC R0 MOV A,R0 MOVC A,@A+DPTR MOV P0,#0 ;消隐 MOV P0,A
1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2
单片机汇编语言8只数码管显示1-8
下面是1~8数字循环显示 ;仿照例7.7 ORG 0000H LJMP MAIN ORG 0030H MAIN:;CLR P2.5 ;CLR P2.7 MOV A,#03H ;控制字 MOV DPTR,#6100H;8155的命令状态口地址 MOVX @DPTR,A DISPLY:MOV R0,#8 MOV R3,#
1、使用驱动芯片。动态数码管通常需要使用驱动芯片来控制,可以通过编程控制芯片输出的电信号,使得8个灯同时亮起来。2、并联多个数码管。可以将多个数码管并联在一起,通过控制每个数码管的显示内容,使得8个灯同时亮起来。3
动态显示:8个数码管依次显示,首先第1个显示“1”其余7个不点亮,然后第2个显示“2”其余7个不显示……依此类推,循环显示1至8位数字。由于人的眼睛识别闪烁的频率是有范围的,当8个数码管循环显示的频率足够高,人眼
同时点亮8个数码管得用扫描方式驱动数码管,就是将不同的数码管的段码端连在一起,作为整体的段码信号,8个数码管的共阳或共阴端排列起来,作为位选信号。但是8个数码管的极性的一样。分时点亮每个数码管,;利用人眼的
如何使用三位数码管实现8个数码管循环显示?
ORG 00H LJMP MAIN ORG 30HMAIN: MOV DPTR, #TABLE MOV R7, #10 MOV A, #0LOOP: LCALL DISPLAY LCALL DELAY INC A DJNZ R7, LOOP LJMP MAINDISPLAY: PUSH ACC MOVC A, @A+DPTR MOV P1, A POP ACC RETDELAY:DL1:DJNZ R6, DL1DL2:DJNZ R6, DL2 DJNZ R7, DL1 RETTABLE: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FHEND 再试试看。这是静态显示,每个口都是段码,共阴,复位后显示4个8。; ORG 0000H MAIN: MOV P0,#4FH MOV P2,#5BH MOV P3,#06H MOV P1,#3FH AJMP MAIN END
ORG 0000H JMP BEGIN ORG 000BH LJMP T0INT ORG 0030H;---------------------------------------TABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;01234 DB 6DH,7DH,07H,7FH,6fh ;56789;---------------------------------------BEGIN: MOV SP,#5FH MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 SETB ET0 SETB EA MOV R2,#20 MOV P1,#0FEH MOV DPTR,#TABLE MOV A,#1 MOVC A,@A+DPTR MOV P0,A MOV R3,#1 SJMP $;---------------------------------------T0INT: CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 DJNZ R2,T0INTE MOV R2,#20 INC R3 MOV A,R3 CJNE A,#9,T0INT1 MOV A,#1T0INT1: MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,AT0INTE: RETI END
#include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; void DelayMS(uint x) { uchar t; while(x--) { for(t=120;t>0;t--); } } void main() { uchar k,m=0x80; P0=0xff; P2=0x00; while(1) { for(k=0;k<8;k++) { m=_crol_(m,1); P2=m; P0=DSY_CODE[k+1]; DelayMS(2); } } } 程序来自:《单片机C语言程序设计实训100例——基于8051+Proteus仿真》
通常8个数码管,都是采用动态显示电路的,也就是逐位点亮1ms~2ms,不停地轮流显示每一位,最终看到的是8个数码管全显示了,每一显示的数当然是不一祥的了。 下图是用两片锁存器驱动的8个数码管电路。
可以循环扫描。有不同的程序,你只要设置合适的扫描时间,由于LED余晖作用,人眼看见都亮。 ORG 0100H MAIN: MOV R3,#00H ;字型码初始地址 LOOP: MOV DPRT,#TABLE ;字型码送数据指针 MOV A,R3 MOV A,@A+DPTR MOV P1,A ;送显示 MOV R4,#0E8H ;循环显示某个字符1S DELAY: ACALL DISPLAY ;显示 DJNZ R4,#DELAY ;延时显示时间示到继续 INC R3 ;显示下个字符 CJNE R3,#0AH,LOOP ;示显示到9续续 AJMP MAIN ;返回主程序 DISPLAY:MOV R1,#08H ;共显示8位LED MOV R5,#00H ;从第一位开始显示 DISP: MOV A,R5 MOV P3,A ;送地址数据 ACALL DELAY1 ;送位显示15MS INC R5 ;指向下一位LED DJNZ R1,DISP ;8位未显示完继续 RET DELAY1: MOV R6,#10H ;延时子程序 LOOP1: MOV R7,#38H LOOP2: DJNZ R7,LOOP2 DJNZ R6,LOOP1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H END ;程序结束