微机课设:汇编语言七段数码管动态显示固定两位数字(学号)8255

微机课设:汇编语言七段数码管动态显示固定两位数字(学号)8255,第1张

数码管连接电路如图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为高电平时相应的笔段会亮,电路中P10~P17分别接数码管的abcdefgdp,得到0~9这10个数字的码型如表1所示。图2 数码管的笔段分布图引脚P07P06P05P04P03P02P01P00数字 码型笔段dpgfedcb a0011111 10 3FH0000011 01 06H0101101 12 5BH0100111 13 4FH0110011 04 66H0110110 15 6DH0111110 16 7DH0000011 17 07H0111111 18 7FH0110111 19 6FH1000000 0小数点80H只要把上面的相关数,改成学好就可以了。

程序如下:

ORG  0000H

LJMP MAIN

ORG  0100H

MAIN:

MOV  DPTR,#TAB           ;表首址送DPTR

MOV  R1, #0

MOV  R2, #0

M1:

MOV  R0, #50

LOOP:

CALL DIS

DJNZ R0, LOOP

MOV  A,  R3

ADD  A,  #1

DA   A

CJNE A, #60H, SSS

CLR  A

SSS:

MOV  R3, A               ;计数值

MOV  B,  #16

DIV  AB

MOV  R2, A

MOV  R1, B

SJMP M1

;-------------------------------------------------------

DIS:                             ;显示程序

MOV  A,  R2              ;显示十位

MOVC A,  @A+DPTR

CLR  P21

MOV  P1, A

SETB P20                ;十位的位选

CALL DLY

MOV  A,  R1              ;个位显示

MOVC A,  @A+DPTR

CLR  P20                ;关闭十位的显示

MOV  P1, A

SETB P21                ;个位的位选

CALL DLY

RET

;-------------------------------------------------------

TAB:    DB  0xc0,0xf9,0xa4,0xb0,0x99  ;共阳极0~9

DB  0x92,0x82,0xf8,0x80,0x90

DLY:    MOV  R6, #14H            ;10ms延时

D1:     MOV  R7, #0F8H

DJNZ R7, $

DJNZ R6, D1

RET

;-------------------------------------------------------

#include<stc89c51RCh>

#define uchar unsigned char

#define uint unsigned int

int counter=0;

sbit w0=P2^7;

sbit w1=P2^6;

sbit w2=P2^5;

sbit w3=P2^4;

uchar code table[]={ 0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71

};

void delay_nms(uint z) //延时子

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void DisplayShumaguan(uchar shuzi)

{

w0=1;

w1=0;

w2=0;

w3=0;

P0=table[shuzi];

delay_nms(40);

w0=0;

w1=1;

w2=0;

w3=0;

P0=table[(shuzi+1)];

delay_nms(40);

w0=0;

w1=0;

w2=1;

w3=0;

P0=table[(shuzi+2)];

delay_nms(40);

w0=0;

w1=0;

w2=0;

w3=1;

P0=table[(shuzi+3)];

delay_nms(40);

}

void main()

{

uchar ii[4]={1,2,3,4};

while(1)

{

DisplayShumaguan(ii);

}

}

写那么长干嘛,p1口接数码管扫描。p0口接8段字符显示,已测试正常。

ORG 0000H

STAER: MOV DPTR,#K1

MOV 41H,#00H

MOV 42H,#00H

MOV R2,#0FFH

A2: ACALL A1;调用显示子程序

DJNZ R2,A2

MOV R2,#0FFH

INC 41H

MOV A,41H

CJNE A,#0AH,A2

MOV 41H,#00H

INC 42H

MOV A,42H

CJNE A,#0AH,A2

LJMP STAER;满100就清零重新开始

A1: MOV P0,#0FFH

MOV P1,#0FEH;取个位数的7段代码

MOV A,41H

MOVC A,@A+DPTR

MOV P0,A ;送出个位的7段代码

ACALL LOOP

MOV P0,#0FFH

MOV P1,#0FDH

MOV A,42H

MOVC A,@A+DPTR

ACALL LOOP

RET

LOOP: MOV R3,#100;1毫秒延时按12MHZ计算

D1: MOV R4,#10

D2: DJNZ R4,D2

DJNZ R3,D1

RET

K1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

;实验板上的7段数码管0~9数字的共阴显示代码

END

注释比程序还麻烦,自己看了

以上就是关于微机课设:汇编语言七段数码管动态显示固定两位数字(学号)8255全部的内容,包括:微机课设:汇编语言七段数码管动态显示固定两位数字(学号)8255、动态数码管 汇编 60进制、求一个51单片机汇编程序,让四个数码管动态显示1 2 3 4,不是静态轮流显示,简单点有代表性,注释好,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9299702.html

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

发表评论

登录后才能评论

评论列表(0条)

保存