单片机数码管动态显示实验报告.docx

上传人:b****8 文档编号:28884256 上传时间:2023-07-20 格式:DOCX 页数:15 大小:19.81KB
下载 相关 举报
单片机数码管动态显示实验报告.docx_第1页
第1页 / 共15页
单片机数码管动态显示实验报告.docx_第2页
第2页 / 共15页
单片机数码管动态显示实验报告.docx_第3页
第3页 / 共15页
单片机数码管动态显示实验报告.docx_第4页
第4页 / 共15页
单片机数码管动态显示实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机数码管动态显示实验报告.docx

《单片机数码管动态显示实验报告.docx》由会员分享,可在线阅读,更多相关《单片机数码管动态显示实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

单片机数码管动态显示实验报告.docx

单片机数码管动态显示实验报告

单片机数码管动态显示实验报告

单片机数码管动态显示实验程序(汇编)

单片机数码管动态显示实验程序

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---显于缓冲区基地址

{

th0=0xfc;

tl0=0x17;

p2=0xff;//先关闭所有数码管

p0=dis_buf[dis_index];//显示代码传送到p0口

p2=dis_digit;//

dis_digit=_crol_(dis_digit,1);//位选通值左移,下次中断时选通下一位数码管dis_index++;//

dis_index&=0x07;//8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描}汇编程序:

code_segsegmentcode

data_segsegmentdata

rsegdata_seg

dis_digit:

ds1

dis_index:

ds1

dis_buf:

ds8

stack:

ds20

;======================================================

=====

csegat00000h;reset向量

ljmpmain

csegat0000bh;定时器0中断向量

ljmptimer0

;======================================================

=====

rsegcode_seg

org0080h

main:

movsp,#(stack-1);初始化堆栈指针

movp0,#0ffh;初始化i/o口

movp2,#0ffh

movtmod,#01h;初始化timer0

movth0,#0fch

movtl0,#017h

movie,#082h

movdptr,#dis_code;设定显示初值

mova,#1

movca,@a+dptr

movdis_buf,a

mova,#2

movca,@a+dptr

movdis_buf+01h,a

mova,#3

movca,@a+dptr

movdis_buf+02h,a

mova,#4

movca,@a+dptr

movdis_buf+03h,amova,#5

movca,@a+dptr

movdis_buf+04h,a

mova,#6

movca,@a+dptr

movdis_buf+05h,a

mova,#7

movca,@a+dptr

movdis_buf+06h,a

mova,#8

movca,@a+dptr

movdis_buf+07h,a

movdis_digit,#0feh;初始从第一个数码管开始扫描

movdis_index,a

setbtr0;启动定时器0,开始动态扫描显示

main_lp:

;主程序循环,增加其它代码

sjmpmain_lp

;======================================================

=====

using0

timer0:

;定时器0中断服程序,用于数码管的动态扫描

;dis_index---显示索引,用于标识当前显示的数码管和缓冲区的偏移量

;dis_digit---位选通值,传送到p2口用于选通当前数码管的数值,如等于0xfe时,;选通p2.0口数码管

;dis_buf---显于缓冲区基地址

pushacc

pushpsw

pushar0

movth0,#0fch

movtl0,#017h

movp2,#0ffh;先关闭所有数码管

mova,#dis_buf;获得显示缓冲区基地址

adda,dis_index;获得偏移量

movr0,a;r0=基地址+偏移量

mova,@r0;获得显示代码

movp0,a;显示代码传送到p0口

movp2,dis_digit;

mova,dis_digit;位选通值左移,下次中断时选通下一位数码管

rla篇三:

数码管动态显示实验报告

实验四数码管动态显示实验一

一、实验要求

1.在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路

2.在电路中增加四个7段数码管(共阳/共阴自选),将p1口作数据输出口与7段数码管数据引脚相连,p2.0~p2.3引脚输出选控制信号

3.在keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4

二、实验目的

1.

2.

3.

4.巩固proteus软件和keil软件的使用方法学习端口输入输出的高级应用掌握7段数码

管的连接方式和动态显示法掌握查表程序和延时等子程序的设计

三(实验说明

本实验是将单片机的p1口做为输出口,将四个数码管的七段引脚分别接到p1.0至p1.7。

由于电路中采用共阳极的数码管,所以当p1端口相应的引脚为0时,对应的数码管段点亮。

程序中预设了数字0-9的段码。

由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。

因此定义了scan函数,接到单片机的p2.0至p2.3

在实验中,预设的数字段码表存放在数组tab中,由于段码表是固定的,因此存储类型可设为code。

在proteus软件中按照要求画出电路,再利用keil软件按需要实现的功能编写c程序,生成hex文件,把hex文件导到proteus软件中进行仿真。

为了能够更好的验证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89c51的一个机器周期包含12个时钟脉冲,而我们采用的是12mhz晶振,每一个时钟脉冲的

时间是1/12us,所以一个机器周期为1us。

在keil程序中,子函数的实现是用voiddelay_ms(intx),其中x为1时是代表1ms。

四、硬件原理图及程序设计

(一)硬件原理图设计

电路中p1.0到p1.7为数码管七段端口的控制口,排阻rp1阻值为220ω,p2.0到p2.3为数码管的扫描信号。

at89c51单片机的9脚(rst)为复位引脚,当rst为高电平的时间达到2个机器周期时系统就会被复位;31引脚(ea)为存取外部存储器使能引脚,当ea为高电平是使用单片机内部存储器,当ea为低电平时单片机则使用外部存储器。

18、19引脚是接晶振脚。

而接地和电源端在软件中已经接好,所以不用在引线。

如下图所示:

(二)流程图与程序设计(三)程序设源代码

#includereg51.h//定义8051寄存器头文件#defineseg7pp1

//定义扫描信号的位置#definescanpp2//定义数码管的位置

charcodetab[10]={0xc0,0xf9,0xa4,0xb0,0x99,//数字0~4的码值

0x92,0x83,0xf8,0x80,0x98};//数字5~9的码值

chardisp[4]={1,2,3,4};//定义要显示的数值

voiddelay_ms(intx);//声明延时函数

charscan[4]={0xfe,0xfd,0xfb,0xf7};//定义扫描

chari,j;//定义变量i,j

main()//主函数的开始

{

while

(1)//无限循环

{for(i=0;i4;i++)//从

{j=disp[3-i];//取出显示的数值

scanp=scan[i];//扫描的顺序

seg7p=tab[j];//将tab的数值赋给数码管delay_ms(4);//延时

4ms

}

}

}

voiddelay_ms(intx)

{inti,j;

for(i=0;ix;i++)

for(j=0;j120;j++);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1