目录
一、作业三要求
用Proteus设计单片机控制1只数码管,循环显示0~9。循环显示间隔可手动按钮调整。每当到9时,发出声音提示。(定时器与数码管)
二、关于数码管和蜂鸣器
2.1数码管
2.1.1共阳极数码管
下图为共阳极数码管的原理图,由于共阳极和共阴极数码管的原理图不同,所以在Proteus中选择数码管时需要注意。
显示数字0时a,b,c,d,e亮,g和dp暗,所以abcdef为低电平0,g和dp为高电平1,所以0的七段码为11000000B为C0H;显示数字1时bc亮,adefg暗,所以bc为低电平0,adefg和dp为高电平1,所以1的七段码为11111001B为F9H......以此类推得到下表(共阳极数码管0-9的七段码)
共阳极查表
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H ;七段数码管共阳极数码表
DB 92H,82H,0F8H,80H,90H
2.1.2共阳极数码管电路接法
2.1.3共阴极数码管
共阴极查表
TAB:DB 3FH,06H,5BH,4FH,66H ;七段数码管共阴极数码表
DB 6DH,7DH,07H,7FH,6FH
2.1.4共阳极数码管电路接法
2.2蜂鸣器
我个人参考的帖子,写的很详细
https://blog.csdn.net/weixin_41980642/article/details/106626133
三、完成过程分析与实现
电路图连接
程序实现
ORG 0000H
LJMP MAIN
ORG 000BH
BUFF BIT P2^6
BUTO BIT P1^1
MAIN:
CLR BUFF
MOV R7,#255
MOV R6,#255
MOV R5,#255
MOV R4,#255
MOV R1,#00H
MOV R0,#00H
MOV A,R1
MOV TMOD ,#022H ;#0010 0010
MOV TH0 ,#8AH
MOV TL0 ,#0CFH
MOV TH1 ,#15H
MOV TL1 ,#9FH
JNB BUTO,LOOP2 ;BUTO为1序执行,1->开关断开,0->开关闭合
LOOP:
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表
MOV P0,A ;P0口输出,显示数字
TIME1:
SETB TR1
JNB TR1 ,$ ;TR0为1顺序执行
CLR TR1
MOV TH1 ,#8AH
MOV TL1 ,#0CFH
DJNZ R7,TIME1
DJNZ R5,TIME1
JNB BUTO,LOOP2 ;BUTO为1顺序执行
INC R1
MOV A,R1 ;A加1
CJNE A,#10,LOOP ;判断A是否到达10
CPL BUFF
ACALL DELAY
AJMP MAIN ;当A达到10跳回主函数,重新赋值为0
LOOP2:
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表
MOV P0,A ;P0口输出,显示数字
TIME2:
MOV TH0 ,#15H
MOV TL0 ,#9FH
SETB TR0
JNB TR0 ,$ ;TR0为1顺序执行
CLR TR0
MOV TH0 ,#8AH
MOV TL0 ,#0CFH
DJNZ R6,TIME2
DJNZ R4,TIME2
JB BUTO,MAIN ;BUTO为0顺序执行 0->闭合
INC R0
MOV A,R0 ;A加1
CJNE A,#10,LOOP2 ;判断A是否到达10
CPL BUFF
ACALL DELAY
AJMP MAIN
ORG 0200H
TAB:DB 3FH,06H,5BH,4FH,66H ;七段数码管共阴极数码表
DB 6DH,7DH,07H,7FH,6FH
DELAY: MOV R3,#256
DEL1: MOV R2,#256
DEL2: NOP
NOP
NOP
DJNZ R2,DEL2
DJNZ R3,DEL1
RET
END
总结
作业三的程序和作业二的程序很相像,最大的不同点在于作业三需要学会查表指令以及蜂鸣器的使用,所以在作业三中没有对实现过程做过多的阐述。