AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?
ORG 0000H ; 附仿真图 仿真通过
MOV 31H,#0aH
MOV 32H,#0bH
MOV 33H,#0cH
MOV 34H,#0dH
ACALL D0
JMP $-2
D0: MOV R0,#31H
MOV R2,#11111110B
MOV DPTR,#TAB
D1: MOV R3, #250
DJNZ R3, $
ORL P3,#00001111B
MOV A,@R0
MOVC A,@A+DPTR
MOV P1, A
D2: MOV A, R2
MOV P3, A
RL A
MOV R2,A
INC R0
JB ACC.4,D1
RET
TAB: DB 3FH,06H,5BH,4FH
DB 66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
DB 40H
END
可以用proteus仿真来实现,用四位一体的共阴数码管。仿真图和显示效果如下图。
汇编程序
1、首先我们先打开keil。
2、接着,我们要定义好库函数,void main(){while(1)//不断循环显示{dispaly();}}void dispaly(){P0=smg[1];//选择显示数字几,P1=0x7f;//控制是否点亮数码管。
3、接着,我们加上一条循环语句。delay(5);//显示5毫秒P0=0XFF;//消影P0=smg[2];P1=0xbf;delay(5);P0=0XFF;P0=smg[3]。
4、最后,我们把先前定义的延时语句delayms写好。
5、最后,点击这里进行编译,生成一个hex文件。
6、如果这里无错误警告的话,就说明我们的程序写对了,那我们就可以点亮动态数码管了。
ORG 00H
AJMP MAIN
ORG 30H
MAIN: LCALL DISP
MOV 20H,#1
MOV 21H,#2
MOV 22H,#3
MOV 23H,#4
AJMP MAIN
DISP: MOV A,20H
ACALL SEG7
MOV P0,A
SETB P2.0
ACALL DLY
CLR P2.0
MOV A,21H
ACALL SEG7
MOV P0,A
SETB P2.1
ACALL DLY
CLR P2.1
MOV A,22H
ACALL SEG7
MOV P0,A
SETB P2.2
ACALL DLY
CLR P2.2
MOV A,23H
ACALL SEG7
MOV P0,A
SETB P2.3
ACALL DLY
CLR P2.3
RET
DLY: MOV R7,#2
D1: MOV R6,#40
DJNZ R6,$
DJNZ R7,D1
RET
SEG7: INC A
MOVC A,@A+PC
RET
DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END
扩展资料:
注意事项
1、至少包括4个功能:时间清零,启动计时,暂定计时,继续计时。
2、计时最小单位0.1 秒,最大计时时间999.9秒,
3、用数码管显示时间,同时要求按下任何一个功能键必须有声音提示。
4、使用方法: 设有启动键K1和暂停/清零键K2。按k1启动计时,按k2则暂停计时,再按k2则清零。
5、数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起。
另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
ORG 00H
AJMP MAIN
ORG 30H
MAIN: LCALL DISP
MOV 20H,#1
MOV 21H,#2
MOV 22H,#3
MOV 23H,#4
AJMP MAIN
DISP: MOV A,20H
ACALL SEG7
MOV P0,A
SETB P2.0
ACALL DLY
CLR P2.0
MOV A,21H
ACALL SEG7
MOV P0,A
SETB P2.1
ACALL DLY
CLR P2.1
MOV A,22H
ACALL SEG7
MOV P0,A
SETB P2.2
ACALL DLY
CLR P2.2
MOV A,23H
ACALL SEG7
MOV P0,A
SETB P2.3
ACALL DLY
CLR P2.3
RET
DLY: MOV R7,#2
D1: MOV R6,#40
DJNZ R6,$
DJNZ R7,D1
RET
SEG7: INC A
MOVC A,@A+PC
RET
DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END
自己要学会仿制写程序,懂了原理之后就容易理解了,我说一下原理吧:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
通常的办法是扫描显示,这样的话,用12个IO口就可以实现了,8位段码加上4位位码。程序如下:
DAT EQU 30H
SCANLED EQU 34H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#0F4H
MOV TL0,#048H
MOV P2,#00H
MOV SCANLED,#0
MOV 30H,#1
MOV 31H,#2
MOV 30H,#3
MOV 31H,#4
SETB EA
SETB ET0
SETB TR0
SJMP $
;--------------------
T0ISR:
CLR TR0
MOV TH0,#0F4H
MOV TL0,#048H
SETB TR0
MOV DPTR,#LEDTAB
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T001
MOV P2,#01H
SJMP T0DIS
T001:
DEC A
JNZ T002
MOV P2,#02H
SJMP T0DIS
T002:
DEC A
JNZ T003
MOV P2,#04H
SJMP T0DIS
T003:
MOV P2,#08H
T0DIS:
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
ANL A,#03H
MOV SCANLED,A
POP ACC
RETI
;--------------------
LEDTAB:
DB 0C0H ;"0" 00H
DB 0F9H ;"1" 01H
DB 0A4H ;"2" 02H
DB 0B0H ;"3" 03H
DB 99H ;"4" 04H
DB 92H ;"5" 05H
DB 82H ;"6" 06H
DB 0F8H ;"7" 07H
DB 80H ;"8" 08H
DB 90H ;"9" 09H
;--------------------
END
51单片机的引脚结构和功能
T89C2051是精简版的51单片机,精简掉了P0口和P2口,只有20引脚,但其内部集成了一个很实用的模拟比较器,特别适合开发精简的51应用系统,毕竟很多时候我们开发简单的产品时用不了全部32个I\/O口,用AT89C2051更合适,芯片体积更小,而且AT89C2051的工作电压最低为2.7V,因此可以用来开发两节5号电池供电...
89C51单片机定时器初值怎么计算
在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12\/晶振频率。X为定时器初值。则 X=2^n-T\/T1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8 ...
stc89c52单片机和51单片机的区别
1、种类不同:51系列单片机是指51内核,stc89c5X基本都是51内核的种类。2、大小不同:最后一个数字表示E2prom的大小,E2prom=X*4K,c51就是4K,c52就是8k。3、配件不同:52还多了一个定时器,所以可以说52是51(这个51是指stc89c51,不是51内核)的增强型。如下图,可以很清晰的看出两者之间...
用stc-isp给单片机烧写程序,选项中单倍速双倍速的意义?
标准的51要12个时钟脉冲才能运行一条最短的指令,如NOP stc89C5X在设计时进行了优化,改成了只要6个时钟脉冲完成一条最基本的指令,选择12T\/单倍速时,内部会对时钟进行二分频,实际频率降低一半,以兼容AT89C51之类的芯片.选择6T\/双倍速时,不分频,速度比常规51快一倍.选择不同的对程序只是执行时间不同...
t89c51,87c51和stc89c52单片机的dip引脚分布图封装相同吗
封装相同。
用单片机做电子琴,复音(合音)怎么实现?
48按键行列式键盘矩阵构成MIDI电子琴的键盘扫描输入端,由于89C51的P0口内部没有上拉电阻,故这里采用电阻R14——R21将列线拉至高电平,与六条行线组合完成48个琴键的扫描识别,在图1中,单片机与键盘矩阵间的双箭头线表示单片机在扫描键盘矩阵时,P0口和P2口分别作为输入\/输出口使用。人机接口电路则利用...
MCS-51系列单片机的发展史
在单片机的增强型中,主要分为低档、中档和高档芯片。低档芯片如P87LPC76X系列、P89LPC900系列,中档芯片包括8XC5X系列、P8XC5XX2系列、P89C6XX2系列等,高档芯片如89C51RX系列、Atmel公司的T89C51RX系列等,具有功能齐全、存储器容量大、使用灵活、电磁兼容性好等特点,能够满足绝大部分应用需求。随...
基于CH341T的单片机下载原理图有疑问。
可以,STC的所有单片机都是用串口来下载程序。其他的支持串口烧录的单片机也可以用它这个图来下。 但像AT89S51\/52就不行了。这个图不行可以试下用PL2303芯片USB转RS232方案,比CH340便宜很多,才2块一片。
51单片机与52单片机有什么区别
13,ROM:用以存放程序、一些原始数据和表格;14,I\/O口:四个8位并行I\/O口,既可用作输入,也可用作输出 15,T\/C:两个定时\/记数器,既可以工作在定时模式,也可以工作在记数模式;16,五个中断源的中断控制系统;17,一个全双工UART(通用异步接收发送器)的串行I\/O口,用于实现单片机之间或...
单片机有哪些类型
单片机就是微处理器(simple chip machine),比电脑CPU速度慢,功耗低,使用方便,不用带风扇,满足一般用法。1,8位8051内核:89C51\/89C52\/89C53\/89C54\/89C58;还有新的带ISP的后缀89C51RD,RC系列。2,16位系列:atmel的AVR单片机,TI的MSP430系列,ST的STM32系列。3,32位ARM7,ARM9系列:920T...