单片机实验八、数码管实验

目录

一.实验目的:

二.实验内容:

三.实验步骤:

四.实验程序

五、实验结果

六、实验小结


一.实验目的:

1.掌握51单片机前后台程序结构及编程方法;

2.了解数码管段码和位码的控制。

二.实验内容:

通过手动按键K3,使得数码管0位从“0”-“f”显示

通过手动按键K4,使得数码管1位从“0”-“f”显示

三.实验步骤:

1.理解共阴极数码管工作原理。

2.理解3-8译码器工作原理.

3.查询按键小兜并使得内存单元加1。

4.依次显示数码管0,1位上变化的数据。

四.实验程序

ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_K3;使机器执行下一条指令时无条件转移到addr16处执行程序,对应题目要求按动K3数码管0位显示次数(16进制)
ORG 0013H
LJMP INT_K4;同上,对应题目要求按动K4数码管1位显示次数(16进制)

ORG 0030H

MAIN:

SETB EA;EA置1,打开总中断
SETB IE0;允许定时器0中断   
SETB IE1;允许外部中断

CLR IT0 ;令中断0为电平触发,这个方式需要有延时程序。否则,单片机处理速度快,按一下按键,已经处理了很多个低电平中断了
CLR IT1;外部中断1以低电平方式触发   

SETB EX0;外部中断INT0的中断允许EX0=1打开外部中断
SETB EX1;打开定时器1的中断

MOV DPTR,#TAB;将表的首地址赋值给数据指针DPTR
MOV R5,#0;将寄存器R5清零
MOV R6,#0;将寄存器R6清零

L1:;本实验应用了3-8译码器的原理,本句指令为3-8评码器输出Y1
ACALL LOOP;调用循环,显示F后要求重新为0,不是进位变成1,需要用循环查表,此处为调用循环指令
LJMP L1;转移至L1

INT_K3:
ACALL LOOP
JNB P3.2,INT_K3;控制数码管0位
INC R5;R5内容加一
CJNE R5,#16,EIXT;判断R5是否为16,如果是的
MOV R5,#0;将R5清零(不进位)
RETI;中断返回指令

INT_K4:
ACALL LOOP
JNB P3.3,INT_K4;控制数码管1位
INC R6;R6内容加一
CJNE R6,#16,EIXT;判断R6是否为16,如果是的
MOV R6,#0;将R6清零(不进位
RETI;中断返回指令

LOOP:
MOV P2,#11111111B;将二进制数11111111B传送到P2锁存器中     
MOV A,R5;
MOVC A,@A+DPTR;将形成的新地址中的数取出给A
MOV P0,A

ACALL DELAY;调用延时

MOV A,#11111011B
MOV P2,A;将二进制数11111011B传送到P2锁存器中  
MOV A,R6
MOVC A,@A+DPTR;将形成的新地址中的数取出给A
MOV P0,A

ACALL DELAY;调用延时

RET

EIXT:

RETI

DELAY:

MOV R1,#10

DELY1: MOV R2,#10

DJNZ R2,$;R2内容减一,非0跳转

DJNZ R1,DELY1;

RET


TAB:

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;端口控制状态值
END

五、实验结果

 

 

 

 

六、实验小结

 红外线对数码管有影响,红外源从数码管旁经过一次,即使没有按键,数码管的数值也会加一,所以当按动一次数值加多了的话,可以尝试一下将红外源远离单片机。要求不要有进位,即显示F后不可以为1,所以应用了循环查表。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值