单片机数码管动态显示实验报告.docx
《单片机数码管动态显示实验报告.docx》由会员分享,可在线阅读,更多相关《单片机数码管动态显示实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
单片机数码管动态显示实验报告
单片机数码管动态显示实验报告
单片机数码管动态显示实验程序(汇编)
单片机数码管动态显示实验程序
org00h
ajmphead
org0030h
head:
movsp,#0070h
numequp0;p0口连接数码管
reset:
movdptr,#tab
movr0,#4
sh:
acallshow_tab
calldptr_add
djnzr0,sh
movr0,#4
sjmpreset
dptr_add:
incdptr
incdptr
incdptr
incdptr
ret
tab:
db
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,
0A1H,86H,8EH
;;;;;;;;;;;;;;;;;;;;;函数的功能是用来动态显示dptr上的四个数据;;;;;;;;;;;;;;;;;;;;;;show_tab:
clra
movr2,#0
movr3,#148
movp2,#238
loop:
movca,@a+dptr
movnum,a
acalldelay_5ms
incr2
mova,r2;调用片选函数前注意A的变化acallselect_mov
cjner2,#4,loop
movr2,#0
clra
djnzR3,loop
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
select_mov:
;p2的初值238
push0e0h
mova,p2
rla
movp2,a
pop0e0h
ret
delay_5ms:
movr6,#5
signed_5ms:
calldelay_1ms
djnzr6,signed_5ms
ret
篇二:
单片机动态数码显示设计实验报告
微机原理与接口技术
实验报告
实验题目:
指导老师:
班级:
计算机科学与技术系
姓名:
动态数码显示设计
2014年12月3日
实验十三动态数码显示设计
一、实验目的
1.掌握动态数码显示技术的设计方法。
2.掌握扫描在程序设计中的应用。
二、设计原理
如图13.1所示,在单片机的P1端口接动态数码管的字形码笔段,在单片机的P2端口接动态数码管的数位选择端。
在单片机P3.0管脚处接一个开关,当开关连接高电平时,态数码管上显示“12345”字样;当开关连接低电平时,态数码管上显示“HELLO”字样。
三、参考电路
图13.1动态数码显示电路原理图
四、电路硬件说明
(1)在“单片机系统”区域中,把单片机的P1.0,P1.7端口连接到“动态数码显示”区域中的a,h端口上。
(2)在“单片机系统”区域中,把单片机的P2.0,P2.7端口通过8联拨动拨码开关JP1连接到“动态数码显示”区域中的S1,S8端口上。
(3)在“单片机系统”区域中,把单片机的P3.0端口通过8联拨动拨码开关JP2连接到拨动开关区域中的SW1端口上。
五、程序设计内容
(1)动态扫描方法:
动态接口采用各数码管循环轮流显示的方法,当循环显示频率
较高时,利用人眼的暂留特性,看不出显示的闪烁现象,这种显
示需要一个接口完成字形码的输出(字形选择),另一接口完成各
数码管的轮流点亮(数位选择)。
(2)在进行数码显示的时候,要对显示单元开辟8个显示缓冲
区,在每个显示缓冲区装有显示的不同数据即可。
(3)对于显示不同字形码的数据采用查表方法来完成。
六、程序流程图(如图13.2所示
)
图13.2动态数码显示程序流程图
七、汇编源程序
START:
PANDUAN:
SW:
Q1:
XIANSHI:
NEXT:
;;;;;;;;;;入口地址;;;;;;;;;;ORG0000HLJMPSTARTORG0003HRETIORG000BHRETIORG0013HRETIORG001BHRETIORG
0023HRETIORG002BHRETI;;;;;;;;;;主程序入口;;;;;;;;;;ORG0100HLCALLPANDUANLCALLXIANSHILJMPSTART;;;;;;;;;;判断开关的状
态;;;;;;;;;;JBP3.0,SWLCALLDELAY10MSJBP3.0,SWMOV
DPTR,#TABLE2SJMPQ1JNBP3.0,PANDUANMOV
DPTR,#TABLE1RET;;;;;;;;;;显示程序;;;;;;;;;;MOVR0,#00HMOVR1,#7FHMOVA,R0MOVCA,@A+DPTRMOVP0,AMOVA,R1MOVP2,ALCALLDELAYINCR0RRAMOVR1,ACJNER1,#0FBH,NEXT
DELAY10MS:
D1:
DELAY:
LOOP:
TABLE1:
TABLE2:
RET;;;;;;;;;;10ms
延时程序;;;;;;;;;;MOVR6,#20MOVR7,#248DJNZR7,$DJNZR6,D1RET;;;;;;;;;;200ms延时程序;;;;;;;;;;MOV
R5,#20LCALLDELAY10MSDJNZR5,LOOPRET;;;;;;;;;;共阴字母
码表;;;;;;;;;;DB76H,79H,38H,38H,3FH;;;;;;;;;;共阴数码表;;;;;;;;;;;
DB06H,5BH,4FH,66H,6DH;;;;;;;;;;结束标志;;;;;;;;;;;;;END
八、C语言源程序
#includeAT89X51.H
unsignedcharcodetable1[]={0x06,0x5b,0x4f,0x66,0x6d};unsignedcharcodetable2[]={0x76,0x79,0x38,0x38,0x3f};void
main(void)
{unsignedchari,j,k,m;
while
(1)
{j=0x7f;
for(i=0;i5;i++)//运行5次取出表中的5个数//{if(P3_0==0)//如
果开关为0,则显示12345//{P0=table1[i];}//送P1口显示//
else//如果开关为1,显示HELLO//{P0=table2[i];}//送P1口显示
//
P2=j;//显示码送入P2口//
j=0x7f;//重赋初值//
k=j(i+1);//右移i+1位//
m=j(7-i);//左移7-i位//
j=k|m;
for(k=4;k0;k--)//每隔一段时间显示一次//for(m=248;m0;m--);
}
}
}
篇三:
数码管实验报告
篇一:
实验八数码管led实验报告
苏州大学实验报告
院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期
实验名称:
数码管led实验
一(实验目的
理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管lg5641ah与mcu的接线图。
二(实验内容
理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,mcu的排8段数码管显示mcu复位后的开始到现在的运行时间。
由于只有四个数码管,所以只显示mcu运行到
目前为止的分钟和秒,当计时达到一个小时,就重新从00:
00开始计时。
另外,也可以通过pc方的串口通信程序,指定计时的开始值。
三(实验过程
(一)原理图
图8-2数码管外形
dp
abc
efgdp
图8-1数码管
(二)接线图
图8-3mcu与4连排8段数码管的连接第1页
(三)基本原理
8段数码管一般由8个发光二极管(llight-emittingdiode,led)组成,每一个位段就是一个发光二极管。
一个8段数码管分别由a、b、c、d、e、f、g位段,外加上一个小数点的位段h(或记为dp)组成。
根据公共端所接电平的高低,可分为共阳极和共阴极两种。
有时数码管不需要小数点,只有7个位段,称7段数码管。
共阴极8段数
码管的信号端高电平有效,只要在各个位段上加上相应的信号即可使相应的位段发光,比如:
要使a段发光,则在发光。
四(编程
(一)流程图
图8-4数码管led显示流程图(及其中断子程序)
(二)所用寄存器名称及其各个位
程序中没有使用与led显示相关的控制和状态寄存器,仅仅使
用了通用i/o口a口和b口。
(三)主要代码段
1第2页第3页
2(c
第4页
第5页
篇二:
数码管实验报告
单片机实验报告
一、实验名称
数码管动态扫描显示01234567(实验五)
二、实验目的
(1)掌握数码管显示数字的原理。
(2)通过不同的编程实现灵活运用数码管。
三、实验原理
四、相关原理图
五、实验内容
数码管显示12345678
c程序:
#includereg51.h
#includeintrins.h
unsignedchardatadis_digit;
unsignedcharcodedis_code[11]={0x28,0x7e,0xa2,0x62,0x74,
0x61,0x21,0x7a,0x20,0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表
unsignedchardatadis_buf[8];//显示缓冲区
unsignedchardatadis_index;
charcodesst516[3]_at_0x003b;
voidmain()
{
p0=0xff;
p2=0xff;
tmod=0x01;
th0=0xfc;
tl0=0x17;
ie=0x82;
dis_buf[0]=dis_code[0x1];
dis_buf[1]=dis_code[0x2];
dis_buf[2]=dis_code[0x3];
dis_buf[3]=dis_code[0x4];
dis_buf[4]=dis_code[0x5];
dis_buf[5]=dis_code[0x6];
dis_buf[6]=dis_code[0x7];
dis_buf[7]=dis_code[0x8];
dis_digit=0xfe;
dis_index=0;
tr0=1;
while
(1);}
voidtimer0()interrupt1
//定时器0中断服务程序,用于数码管的动态扫描
//dis_index---显示索引,用于标识当前显示的数码管和缓冲区的偏移量
//dis_digit---位选通值,传送到p2口用于选通当前数码管的数值,如等于0xfe时,//选通p2.0口数码管
//dis_buf---显于缓冲区基地址
{