稍稍做了一些改动:
/******************温度数码显示模块*********************/
DISP1:
MOV R1, #70H
MOV R0, #74H
MOV R5, #0FEH
PLAY:
MOV DPTR, #TAB
MOV P2, #0FFH ;原来是 P1
MOV A, @R1
MOVC A, @A+DPTR
MOV P1, A
MOV A, @R0
MOVC A, @A+DPTR
MOV P0, A
MOV P2, R5
MOV A, R5
JB ACC.1, LOOP1
CLR P1.7
CLR P0.7
LOOP1:
CALL DL1MS
INC R1
INC R0
JNB ACC.3, ENDOUT
RL A
MOV R5, A
MOV A, 73H
......
Ⅱ 怎么用单片机汇编语言数码管静态显示1234
数码管连接电路如图1所示,p0口输出码型,p2口输出位选。锁存器74hc573起驱动作用,提供驱动电流供数码管发光。译码器74hc138将位选地址转换成位选信号,例如当前是第5个数码管显示,那么p2口输出位选地址05h,译码器输入cba=110,输出位选信号y7-y0=11101111,其中y5=0,第5个数码管选通并显示,其它数码管不显示。实验时将j6的左边两个引脚针(1和2)用跳冒连接,锁存器11脚接vcc,关闭锁存功能。
数码管显示方式为动态扫描方式,当p0口送第一个数0的码型到锁存器时,p2送位选地址01h,即y0=0,只有第一个数码管亮,显示0,其他数码管不显示。当p0口送第二个数1的码型到锁存器时,p2送位选地址02h,即y1=0,只有第二个数码管亮,显示1,其他数码管不显示。即每次只有一个数码管点亮,8个数码管是轮流被点亮的,轮流点亮的间隔时间很短(一般用延时程序延时几个毫秒),由于视觉的暂留现象,看到的却好象全都点亮着,这就是动态扫描。
数码管显示数字的码型由数码管的数据脚a~dp决定,图2为数码管的笔段分布图,由于是共阴极的,所以当a~dp为高电平时相应的笔段会亮,电路中p1.0~p1.7分别接数码管的a.b.c.d.e.f.g.dp,得到0~9这10个数字的码型如表1所示。
图2 数码管的笔段分布图
引脚
p0.7
p0.6
p0.5
p0.4
p0.3
p0.2
p0.1p0.0数字 码型
笔段
dp
g
f
e
d
c
b a
0
0
1
1
1
1
1 1
0 3fh
0
0
0
0
0
1
1 0
1 06h
0
1
0
1
1
0
1 1
2 5bh
0
1
0
0
1
1
1 1
3 4fh
0
1
1
0
0
1
1 0
4 66h
0
1
1
0
1
1
0 1
5 6dh
0
1
1
1
1
1
0 1
6 7dh
0
0
0
0
0
1
1 1
7 07h
0
1
1
1
1
1
1 1
8 7fh
0
1
1
0
1
1
1 1
9 6fh
1
0
0
0
0
0
0 0
小数点80h
只要把上面的相关数,改成学好就可以了。
Ⅲ 51单片机汇编语言如何用定时器中断实现数码管从0-F每秒进1且循环进行。
ORG0000H
JMPBEGIN
ORG000BH
LJMPT0ISR
ORG0030H
TABLE:;共阴极数码管显示代码表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6fh;56789
;---------------------------------------
BEGIN:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
SETBET0
SETBEA
MOVR2,#20
CLRA
LOOP:
MOVDPTR,#TABLE
PUSHACC
MOVCA,@A+DPTR
MOVP0,A
POPACC
SJMPLOOP
T0ISR:
CLRTR0
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
DJNZR2,T0E
INCA
ANLA,#0FH
T0E:
RETI
END
Ⅳ 单片机数码管编程 汇编语言,急
U16INC MACRO U16,;;16位无符号型变量加1
LOCALZZ
INC U16+1
MOV A,U16+1
JNZ ZZ
MOV U16+1,#0
INC U16
ZZ:
ENDM
U16MOV MACRO U16,VAL;;16位无符号型变量赋值
MOV U16+1,#LOW(VAL)
MOV U16,#HIGH(VAL)
ENDM
U16DAYV MACRO U16,VAL,;;16位无符号型变量判断大小,最后根据Cy判断
MOV A,U16+1
CLR C
SUBB A,#LOW(VAL)
MOV A,U16
SUBB A,#HIGH(VAL)
ENDM
WX1 EQU P2.0
WX2 EQU P2.1
WX3 EQU P2.2
WX4 EQU P2.3
S4 EQU P1.3
S5 EQU P1.4
LED1 EQU P1.6;;两个LED
LED2 EQU P1.7
JDQ EQU P1.5;;继电器
SMGBZ1 EQU 0X30
DS1 EQU 0X31
ZT EQU DS1+4
JSBZ1 EQU ZT+1;0-39的计数
JSBZ2 EQU ZT+2;计时标志,用于闪烁和计时
JSBZ3 EQU JSBZ2+2;;继电器通断两次的计时和计数
ORG 0
JMP MAIN
ORG 0XB
JMP TimeInterupt
MAIN:
MOV SP,#0X70
MOV R0,#0x70
CLR A
MA1: MOV @R0,A ;数据全清0
DJNZ R0,MA1
CALL JDQLC_STOP
CALL Time0Init
;主循环
LOOP: CALL AJPD
CALL RUN
JMP lOOP
;主运行函数
RUN: MOV A,ZT
CJNE A,#1,RR1
JMP RUN1
RR1: CJNE A,#2,RR2
JMP RUN2
RR2: RET
;;0-39循环
RUN1:
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV A,JSBZ1
MOV B,#10
DIV AB
MOV DS1+2,A
MOV DS1+3,B
U16DAYV JSBZ2,1000
JC RUN1_1
U16MOV JSBZ2,0
INC JSBZ1
MOV A,JSBZ1
CJNE A,#39+1,RUN1_1
MOVJSBZ1,#0
RUN1_1:
RET
;;FFFF闪烁
RUN2: U16DAYV JSBZ2,500
JC RUN2_1
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV DS1+2,#0X10
MOV DS1+3,#0X10
SETB LED1
SETB LED2
U16DAYV JSBZ2,1000
JC RUN2_2
U16MOV JSBZ2,0
JMP RUN2_2
RUN2_1:
MOV DS1+0,#0X0F
MOV DS1+1,#0X0F
MOV DS1+2,#0X0F
MOV DS1+3,#0X0F
CLR LED1
CLR LED2
RUN2_2:
CALL JDQLC
RET
;按键判断
AJPD:
JNB S4,AJ1
JNB S5,AJ2
RET
AJ1: JNB S4,$
MOV ZT,#2
CALL JDQLC_START
RET
AJ2: CALL JDQLC_STOP
SETB LED1
SETB LED2
JNB S5,$
MOV ZT,#1
MOV JSBZ1,#0
U16MOV JSBZ2,0
RET
JDQLC_START:
U16MOV JSBZ3,0
RET
JDQLC_STOP:
U16MOV JSBZ3,30000
SETB JDQ
RET
;继电器通断两次
JDQLC:
U16DAYV JSBZ3,1000
JNC JDQ_1
CLR JDQ;通1s
RET
JDQ_1: U16DAYV JSBZ3,1500
JNC JDQ_2
SETB JDQ;断0.5s
RET
JDQ_2: U16DAYV JSBZ3,1500+1000
JNC JDQ_3
CLR JDQ;通1s
RET
JDQ_3: U16DAYV JSBZ3,3000
JNC JDQ_4
SETB JDQ;断
JDQ_4: RET
;;定时器初始化
Time0Init:
MOV TMOD,#0X01
MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
SETB TR0
SETB ET0
SETB EA
RET
;;数码显示
SMXS:
INC SMGBZ1
MOV A,SMGBZ1
SUBB A,#4
JC SMXS1
MOV SMGBZ1,#0
SMXS1:
MOV P2,#0XF0
MOV A,SMGBZ1
ADD A,#DS1
MOV R0,A
MOV A,@R0
MOV DPTR,#TABD
MOVC A,@A+DPTR
MOV P0,A
MOV DPTR,#TABW
MOV A,SMGBZ1
MOVC A,@A+DPTR
MOV P2,A
RET
TABD:;段码
DB0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
DB0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF,0XBF
TABW:;位码
DB0xF1,0xF2,0xF4,0xF8
;;定时器0中断
TimeInterupt:
PUSH PSW
PUSH ACC
MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
CALL SMXS
U16INC JSBZ2
U16DAYV JSBZ3,30000
JNC TimeOut
U16INC JSBZ3
TimeOut:
POP ACC
POP PSW
RETI
END
Ⅳ 单片机控制74LS164控制数码管显示怎么编程(汇编语言)
74LS164是串入并出转换芯片,可以借助串口来实现,也可以用普通IO口模拟实现。举例如下:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit keyup=P3^6;
sbit keydn=P3^7;
void delay()
{
int i=1000;
while(i--);
}
main()
{
uchar i;
i=0;
SCON=0x00;
TI=1;
while(1)
{
SBUF=table[i];
while(TI==0);
TI=0;
delay();
if(keyup==0)
{
i++;
while(keyup==0);
}
if(keydn==0)
{
if(i>0)i--;
while(keydn==0);
}
i%=10;
}
}
Ⅵ 单片机汇编语言让数码管显示0到9
ORG00H
LJMPMAIN
ORG30H
MAIN:
MOVDPTR,#TABLE
MOVR7,#10
MOVA,#0
LOOP:
LCALLDISPLAY
LCALLDELAY
INCA
DJNZR7,LOOP
LJMPMAIN
DISPLAY:
PUSHACC
MOVCA,@A+DPTR
MOVP1,A
POPACC
RET
DELAY:
DL1:DJNZR6,DL1
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
再试试看。
Ⅶ LED数码管动态显示2017的51单片机汇编语言
DAT EQU33H
SCANLED EQU39H
ORG0000H
LJMPMAIN
ORG0003H
LJMPEXTINT0
ORG001BH
LJMPT1ISR ;扫描显示
ORG0030H
MAIN:
MOVSP,#5FH
MOVTMOD,#10H
MOVTH1,#0ECH
MOVTL1,#078H
MOV33H,#2
MOV34H,#0
MOV35H,#1
MOV36H,#7
SETBTR1
SETBET1
SETBEA
SJMP$
T1ISR:
PUSHACC
CLRTR1
MOVTH1,#0ECH
MOVTL1,#78H
SETBTR1
MOVDPTR,#LEDTAB
T100:
MOVR0,#DAT
MOVA,SCANLED
ADDA,R0
MOVR0,A
MOVA,SCANLED
JNZT101
MOVP2,#01H
SETBDOT
SJMPT1DIS
T101:
DECA
JNZT102
MOVP2,#02H
CLRDOT
SJMPT1DIS
T102:
DECA
JNZT103
MOVP2,#04H
SETBDOT
SJMPT1DIS
T103:
MOVP2,#08H
CLRDOT
T1DIS:
MOVA,@R0
MOVCA,@A+DPTR
JNBDOT,T1DIS1
ORLA,#01H
T1DIS1:
CPLA
MOVP0,A
INCSCANLED
MOVA,SCANLED
CJNEA,#4,T1END
MOVSCANLED,#0
T1END:
POPACC
RETI
LEDTAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
Ⅷ 单片机汇编语言8只数码管显示1-8
1、数码管显示演示程序:在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;
DIS_DIGITEQU40H
;位选通值,传送到P2口用于选通当前数码管的数值,
;如等于0xfe时,选通P2.0口数码管
DIS_INDEXDATA41H
;显示索引,用于标识当前显示的数码管和缓冲区的偏移量
DIS_BUFDATA50H
;显于缓冲区起始地址
ORG0000H
AJMPMAIN
ORG000BH
AJMPINTT0
ORG0100H
MAIN:MOVP0,#0FFH;初始化I/O口
MOVP2,#0FFH
MOVTMOD,#02H;定时器0在模式2下工作
MOVTL0,#38H;每200μs产生一次溢出
MOVTH0,#38H;自动重装初值
SETBET0;使能定时器0中断
SETBTR0;启动定时
SETBEA;使能总中断
MOVDPTR,#DIS_CODE;设定显示初值为1-8
MOVA,#1;初值为1,以后顺序加1
MOVCA,@A+DPTR
MOVDIS_BUF,A
MOVA,#2
MOVCA,@A+DPTR
MOVDIS_BUF+01H,A
MOVA,#3
MOVCA,@A+DPTR
MOVDIS_BUF+02H,A
MOVA,#4
MOVCA,@A+DPTR
MOVDIS_BUF+03H,A
MOVA,#5
MOVCA,@A+DPTR
MOVDIS_BUF+04H,A
MOVA,#6
MOVCA,@A+DPTR
MOVDIS_BUF+05H,A
MOVA,#7
MOVCA,@A+DPTR
MOVDIS_BUF+06H,A
MOVA,#8
MOVCA,@A+DPTR
MOVDIS_BUF+07H,A
DISPLAY:MOVDIS_DIGIT,#0FEH;初始从第一个数码管开始扫描
MOVDIS_INDEX,#0
SETBTR0;启动定时器0,开始动态扫描显示
MAIN_LP:NOP
;主程序循环,可增加其它代码以改变50H-57H中的值以改变显示内容
SJMPMAIN_LP
;=====================================================
INTT0:
;定时器0中断服程序,用于数码管的动态扫描
PUSHACC
PUSHPSW
MOVP2,#0FFH;先关闭所有数码管
MOVA,#DIS_BUF;获得显示缓冲区基地址
ADDA,DIS_INDEX;获得偏移量
MOVR0,A;R0=基地址+偏移量
MOVA,@R0;获得显示代码
MOVP0,A;显示代码传送到P0口
MOVP2,DIS_DIGIT;
MOVA,DIS_DIGIT
;位选通值左移,下次中断时选通下一位数码管
RLA
MOVDIS_DIGIT,A
INCDIS_INDEX
;DIS_INDEX加1,下次中断时显示下一位
ANLDIS_INDEX,#0x07
;当DIS_INDEX等于8(00001000B)时,清0
POPPSW
POPACC
RETI
DIS_CODE:DB28h,7eh,0a2h,62h,74h,61h,21h,7ah
DB20h,60h,30h,25h,0a9h,26h,0a1h,0b1h
;0-9和ABCDEF的数码管显示代码
END
Ⅸ 单片机汇编语言数码管显示数字。。。。
MAIN:
;------------------
LOOP:
ACALLSHOW1
ACALLDELAY
ACALLSHOW6
ACALLDELAY
SJMPLOOP
;------------------
SHOW1:
MOVP0,#06H
SETBP2.6
CLRP2.6
MOVP0,#0FEH
SETBP2.7
CLRP2.7
RET
;------------------
SHOW6:
MOVP0,#7DH
SETBP2.6
CLRP2.6
MOVP0,#0FDH
SETBP2.7
CLRP2.7
RET
;------------------
DELAY:
DEL1:
NOP
NOP
DJNZR7,DEL1
RET
;------------------
END
Ⅹ AT89C51单片机怎么用汇编语言让4个数码管同时显示1234
1、首先我们先打开keil。