单片机用汇编写两个数码管显示0到99循环的程序

单片机用汇编写两个数码管显示0到99循环的程序,第1张

1、新建项目,做好准备。

2、数码管段选表。

3、延时函数。

4、uchar i变量i;wk = 1打开位选,P0 = 0xf71111 0111第4位数码管显示,wk = 0关闭位选。

5、while(1) //死循环效果{} 。

6、dk = 1 //打开段选,P0 = leddata[i],dk = 0 //关闭段选,delay(100)//延时效果。

7、选择效果,限制i值的循环范围。

1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;

DIS_DIGIT EQU   40H

位选通值, 传送到P2口用于选通当前数码管的数值,

 如等于0xfe时, 选通P2.0口数码管

DIS_INDEX DATA   41H

显示索引, 用于标识当前显示的数码管和缓冲区的偏移量

DIS_BUF DATA   50H

显于缓冲区起始地址

ORG  0000H

AJMP   MAIN

ORG   000BH

AJMP  INTT0

ORG   0100H

MAIN:MOV  P0,#0FFH 初始化I/O口

MOV  P2,#0FFH

MOV   TMOD, #02H定时器0在模式2下工作 

MOV   TL0, #38H 每200μs产生一次溢出

MOV   TH0, #38H自动重装初值

SETB   ET0 使能定时器0中断

SETB  TR0启动定时

SETB  EA 使能总中断

MOVDPTR, #DIS_CODE 设定显示初值为1-8

MOVA,#1初值为1,以后顺序加1

MOVC A,@A+DPTR

MOV  DIS_BUF,A

MOVA,#2

MOVCA,@A+DPTR

MOV  DIS_BUF+01H,A

MOVA,#3

MOVCA,@A+DPTR

MOV  DIS_BUF+02H,A

MOVA,#4

MOVCA,@A+DPTR

MOV  DIS_BUF+03H,A

MOVA,#5

MOVCA,@A+DPTR

MOV  DIS_BUF+04H,A

MOVA,#6

MOVCA,@A+DPTR

MOV  DIS_BUF+05H,A

MOVA,#7

MOVCA,@A+DPTR

MOV  DIS_BUF+06H,A

MOVA,#8

MOVCA,@A+DPTR

MOV  DIS_BUF+07H,A

DISPLAY:MOV  DIS_DIGIT,#0FEH 初始从第一个数码管开始扫描

MOV  DIS_INDEX,#0

SETB TR0 启动定时器0,开始动态扫描显示

MAIN_LP:NOP

 主程序循环,可增加其它代码以改变50H-57H中的值以改变显示内容

SJMP MAIN_LP

=====================================================

INTT0:

 定时器0中断服程序, 用于数码管的动态扫描

PUSH ACC

PUSH PSW

MOV  P2,#0FFH 先关闭所有数码管

MOV  A,#DIS_BUF 获得显示缓冲区基地址

ADD  A,DIS_INDEX 获得偏移量

MOV  R0,A R0 = 基地址 + 偏移量

MOV  A,@R0 获得显示代码

MOV  P0,A 显示代码传送到P0口

MOV  P2,DIS_DIGIT 

MOVA,DIS_DIGIT

 位选通值左移, 下次中断时选通下一位数码管

RL    A

MOVDIS_DIGIT,A

INCDIS_INDEX

 DIS_INDEX加1, 下次中断时显示下一位

ANLDIS_INDEX,#0x07

 当DIS_INDEX等于8(0000 1000B)时, 清0

POP  PSW

POP  ACC

RETI 

DIS_CODE: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah

DB 20h,60h,30h,25h,0a9h,26h,0a1h,0b1h

0-9和ABCDEF的数码管显示代码

 

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7773350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存