七段数码管显示实验文档格式.docx
- 文档编号:18503865
- 上传时间:2022-12-18
- 格式:DOCX
- 页数:18
- 大小:133.45KB
七段数码管显示实验文档格式.docx
《七段数码管显示实验文档格式.docx》由会员分享,可在线阅读,更多相关《七段数码管显示实验文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
39H
1
06H
7
07H
d
5EH
2
5BH
8
7FH
E
79H
3
4FH
9
6FH
F
71H
4
66H
A
77H
灭
00H
5
6DH
b
7CH
实际上试验中使用的是共阳极数码管,这里就不一一列出
2、动态显示
按图4.9-2(b)连接线路,通过交替选中LED1和LEDO循环显示两位十进制数。
七段数码管段码连接不变,位码驱动输入端S1、SO接8255AC口
的PC1、PC0通过C口的这两位交替输出1和0,以便交替选中LED1和LEDQ从而实现两位十进制数的交替显示。
请编程实现在两个LED数码管上循环显
示0099,程序流程图如图4.9-3(b)所示。
开始
将腔昭设为A口输出
——二
十位数的段码至A口
图4.9-3
三、实验电路图第一部分电路图:
BEVEH-5S3
-F钩内耳疝井B4“"
a'
・・・・・・■・・-、・-・"
a1
第二部分电路图:
KYXJM-^£
Gib1:
*上斗<
|||>
*
00-IB-08
SHCFQiDP
I
m・
莘駐-塞匸一…-"
r需ET屠匡氐
ME-SIMWMM站
Ippjf一¥
r«
HM
[WmiM
VMMI#9^411■IWt
FAM'
PXhi-9甲?
W-1m*
ffc
四、实验设备
START:
MOVR4,#00H
FLASH:
MOVR2,#01H
MOVR0,#30H
MOVDPTR,#TABFLA
LOPFLA:
MOVA,R2
MOVP2,A
MOVA,@R0
MOVCA,@A+DPTR
MOVP1,A
MOVR3,#0
DJNZR3,$
MOVP1,#0FFH
RLA
MOVR2,A
INCR0
CJNERO,#38H,GOON
GOON:
CJNEA,#01H,LOPFLA
INCR4
CJNER4,#7FH,GOON1
微型计算机、单片机仿真器、实验仪、示波器(各一台);
实验连线(若干)。
五、实验内容
*由于汇编语言程序中已经做了相应的注释,C语言的编程原理与之相同处不再做重复注释,仅作个别注释,请
见谅。
1.编程在8位数码管上面显示“12345678”8个数字,每经过1秒8个数字循环左移一位显示。
依次为:
1234578、23456781、34567812.……
汇编语言程序代码:
ORG0000H
;
把字形表首地址给外部寻址寄存器
输出位型
在程序段中查表得到字形
输出字形
循环等待延时
关显示
位型左移一位
下一个字形
若已经显示一遍则初始化
MOV
A,30H
显示表左移更新
30H,31H
31H,32H
32H,33H
33H,34H
34H,35H
35H,36H
36H,37H
37H,A
R4,#00H
GOON1:
AJMPFLASH
TABFLA:
;
字形表
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H,88H
DB83H,0C6H,0A1H,86H,8EH
END
C语言程序代码:
#include<
reg51.h>
dataunsignedchardisadd_at_0x30;
constunsignedcharLED_TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
dataunsignedcharj;
voiddelay()
{
unsignedchari=0xFF;
while(i--)
{voidchange_s()
unsignedchar*k;
unsignedcharm;
k=&
disadd;
m=*k;
*k=*(k+1);
*(k+1)=*(k+2);
*(k+2)=*(k+3);
*(k+3)=*(k+4);
*(k+4)=*(k+5);
*(k+5)=*(k+6);
*(k+6)=*(k+7);
*(k+7)=m;
j=0x00;
}
main()
unsignedchari;
unsignedchardisbit;
unsignedchar*disnum,*n;
SP=0x40;
n=&
*(n)=0x01;
*(n+1)=0x02;
*(n+2)=0x03;
*(n+3)=0x04;
*(n+4)=0x05;
*(n+5)=0x06;
*(n+6)=0x07;
*(n+7)=0x08;
while
(1)
disbit=0x01;
disnum=&
//显示表移位
//计数值初始化
//显示设置初值为
for(i=0;
i<
8;
i++)
P2=0x00;
P仁LED_TAB[*disnum];
P2=disbit;
delay();
disbit=disbit<
<
1;
disnum++;
j++;
if(j==0x3f)
change_s();
//调用显示表移位子程序
2.用8255的PA口作为段码输出口,编写程序,利用定时器T0作为时间基准控制电子钟走时,电子钟的格式为:
X>
—XX-XX
分钟一秒钟一百分秒
COM_ADDXDATA0F003H
PA_ADDXDATA0F000H
PB_ADDXDATA0F001H
PC_ADDXDATA0F002H
CRG0000H
AJMPSTART
CRG000BH
AJMPT0INT
CRG0030H
MOVSP,#60H;
设置堆栈
MOVTMOD,#01H;
设置定时器T0的控制字
TH0,#0F0H
设置定时器计数初值
TL0,#07FH
R7,#00H
显示寄存器置初值
R6,#00H
R5,#00H
R3,#00H
R2,#00H
32H,#16
设置显示分隔符
MOV35H,#16
SETBETO;
允许中断(TO内部中断)
SETBEA
SETBTRO;
开始计数
CONTINUE:
37H,R7
进位判断,R7表示百分之一秒(之
后的以此类推)
36H,R6
CJNE
R6,#0AH,NOREACH
INC
R5
34H,R5
R5,#0AH,NOREACH
R4
33H,R4
R4,#06H,NOREACH
R3
31H,R3
R3,#0AH,NOREACH
MOV31H,R3
INCR2
MOV30H,R2
CJNER2,#06H,NOREACH
MOVR2,#00H
NOREACH:
ACALLDISPLAYAJMPCONTINUE
;
中断子程序
TOINT:
INCR7推)
CJNER7,#0AH,NOREACH_S
MOVR7,#00H
INCR6
NOREACH_S:
MOVTH0,#0F0H
MOVTL0,#07FH
RETI
数码管显示子程序
DISPLAY:
MOVR1,#01H
MOVDPTR,#COM_ADD
MOVA,#80H
MOVX@DPTR,ALOPFLA:
MOVDPTR,#PB_ADD
MOVA,R1
MOVX@DPTR,A
调用显示子程序
R7表示百分之一秒(之后的以此类
计数完一次后再次置计数初值
位型输出指针
A,@R0
DPTR,#PA_ADD
A,#00H
WAIT:
DEC
A,#00H,WAIT
等待延时
A,#0FFH
A,R1
RL
R1,A
R0
A,#01H,LOPFLA
右已经显示遍则初始化
RET
DB0BFH
#defineTIMEINT0x01
#defineTIMEH0xf0
#defineTIMEL0x7f
xdataunsignedcharcon_address_at_0xf003;
xdataunsignedcharpa_at_0xf000;
xdataunsignedcharpb_at_0xf001;
xdataunsignedcharpc_at_0xf002;
constunsignedcharLED_TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E,0xBF};
dataunsignedcharr2,r3,r4,r5,r6,r7;
局变量
//显示变量设置为全
voidtimerO(void)interrupt1using1
r7++;
if(r7==0x0A)
r7=0x00;
r6++;
TH0=TIMEH;
TL0=TIMEL;
voiddisplay()
unsignedchar*disnum;
disbit=OxO1;
//中断子程序
//显示子程序
pb=0x00;
pa=LED_TAB[*disnum];
pb=disbit;
delay();
disbit=disbit<
disnum++;
unsignedchar*n;
con_address=0x80;
TMOD=TIMEINT;
TLO=TIMEL;
n=&
r7=0x00;
r6=0x00;
r5=0x00;
r4=0x00;
r3=0x00;
r2=0x00;
*(n+2)=16;
*(n+5)=16;
ET0=1;
EA=1;
TR0=1;
//显示进位判断
*(n+7)=r7;
*(n+6)=r6;
if(r6==0x0A)
r6=0x00;
*(n+6)=r6;
r5++;
*(n+4)=r5;
if(r5==0x0A)
r5=0x00;
r4++;
*(n+3)=r4;
if(r4==0x06)
r4=0x00;
r3++;
*(n+1)=r3;
if(r3==0x0A){
r3=0x00;
r2++;
*n=r2;
if(r6==0x06){
r2=0x00;
*n=r2;
display。
六、实验小结
通过本次试验,我基本上掌握了数码管显示的程序流程,学会编写一些程序调用相应的相应的子程序,显示所需内容,了解了动态扫描显示的程序执行过程,结合定时器的设置和中断的返回,来实现最基本的百分秒显示,从而完
成时钟显示,由此,结合前面所学的知识,巩固了数码管显示的知识,增强了我的程序调试能力,为下一步的学习打下了坚实基础。
以上程序都记过实验或是仿真器验证,现象正常,若有错误之处,请老师指正,谢谢。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数码管 显示 实验