数码管显示实验.docx
《数码管显示实验.docx》由会员分享,可在线阅读,更多相关《数码管显示实验.docx(19页珍藏版)》请在冰豆网上搜索。
数码管显示实验
数码管显示实验原理及分析报告
学院计算机工程学院
专业计算机应用
年级班别09计算机科学与技术2班
学号2009404010202
学生姓名黄正
指导教师李永
日期2011年12月25日
单片机数码管显示课程设计
目录
1引言1
2设计任务和要求1
2.1设计目的1
2.2设计意义1
3总原理图及主要模块的流程图1
3.1总原理图及元器件清单1
3.2主要流程图1
4性能测试与分析3
5结论与心得4
致谢4
参考文献4
单片机数码管显示课程设计
1引言
从上世纪70年代第一批单片机问世,短短二三十年时间,单片机技术已经成为计算机技术的一个重要分支,广泛运用到工业控制、仪器、仪表、消费产品,汽车、办公自动化和通信等领域。
因此,单片机技术已经成为电子、测控、自动化、通信等许多工科专业学生的必备技能。
我用AT89C51芯片来设计一个简单的数码管显示。
此设计给出了源代码,通过仿真测试,其性能指标达到了设计要求。
关键词:
单片机,AT89C51,数码管
2设计任务和要求
2.1设计目的
1.学习基本理论在实践中综合运用的初步经验,掌握模拟电路设计的基本方法、设计步骤,培养综合设计与调试能力。
2.了解AT89C51这个芯片的使用和性能指标测试方法。
3.培养实践技能,提高分析和解决实际问题的能力。
4.了解数码管动态显示的原理及了解74LS164扩展端口的方法。
2.2设计意义
为了更好地熟悉和掌握单片机的基本功能和编程,掌握数码管动态扫描显示原理及实现方法。
自我动态扫描显示电路驱动程序的编写方法。
通过课程设计,达到理论与实际应用相结合,提高学生对微机硬件结构的软件设计方法的理解,使学生能够根据实际应用,初步实现硬件及软件的设计,对硬件开发有更深层的认识,为今后打软硬件开发,打下坚实的基础。
3总原理图及及主要模块的流程图
3.1本实验仪提供了8段码数码管LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,采用动态方式显示。
8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。
6位位码由8155的PA0口输出,经uA2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H,时钟位输出地址为0e102H,位选通输出地址为0e101H。
本实验涉及到了8155I0/RAM扩展芯片的工作原理以及74LS164器件的工作原理。
3.2七段数码管的字型代码表如下表:
显示字形
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5bh
a
fb
g
ec
d
。
dp
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1
6fh
A
1
1
1
0
1
1
1
77h
B
1
1
1
1
1
0
0
7ch
C
0
1
1
1
0
0
1
39h
D
1
0
1
1
1
1
0
5eh
E
1
1
1
1
0
0
1
79h
F
1
1
1
0
0
0
1
71h
3.2课程设计电路图如下
1.数码管电路图如下
2.8155键显模块
3.2主要流程图
1.主程序的流程图
4实验步骤:
1、将KEIL仿真器上40芯排线一端和实验箱上51CPU板上的40芯排针连接起来,将仿真器连接的USB或串口线与PC机对应的USB或串口连接起来,打开实验箱电源。
2、进入KEIL软件界面,点击项目/打开项目
在C:
\KEIL\UV2\3000TC51配套实验例程中选择实验一,内有ASM和C51两种程序,进入ASM文件夹打开LED项目文件
进入如图所示界面
点击“调试/启动/停止调试”,进入调试界面,点击“调试/运行”可看到8段数码管交替显示0—F
5程序调试过程及运行结果
通过用Uvision按编译运行没错误后执行但不调试看到每一步执行结果运行状态的各个内存外存数据变化情况
调试菜单如图所示
寄存器状图
6结论与心得
这周的实习真的有点郁闷,程序里面的好多内容不懂,自我感觉是单片机我们所学的内容还不足以编出这两个撑血,但是只好硬着头皮去看去理解。
但在学习过程中也充满了乐趣,当看懂了一个程序里的一些语句,画出了要求的设计图,那我的喜悦那种成就感就油然而生。
这次实习让我受益匪浅,无论从知识上还是其他的各个方面。
上课的时候的学习从没有真正的用心弄下单片机。
知识从理论的角度去理解枯燥乏味的代码,但在实习中见过甚至使用了单片机极其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。
在这次课程设计中又让我体会到了合作和团结的力量。
当遇到不会的或者是设计不出来的地方,我们就会在区里讨论或者是同学之间互相帮助。
团结就是力量。
无论在现在的学习中还是在以后的工作中团结都是至关重要的,有了团结才有更多的理念,更多的思维,更多的情感。
通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。
使之不断地战胜别人,超越前人。
同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
单片机是一门实践性强的课程。
老师和一些工作的朋友都曾说过。
如果学号一门单片机,就凭这个技术这门艺术找个好工作也不成问题。
尽管我们在课堂学到的内同有限,但在以后的学习中单片机还需要好好的深入研究和学习,学号了单片机也就多了一项生存的本钱,最后感谢老师对我们的精心指导和帮助谢谢同学们的对我的帮助
这个设计过程中,我遇到过许多次失败的考验,就比如,我在软件上仿真软件上能实现其功能,但是把它写进开发板就无法运行,我不停地找原因。
最后我找到了答案,这样我明白,做设计不但是软件可以运行,用在硬件上一样是那么重要的。
我做的这个设计主要是用AT89C51这个芯片来实现,这个芯片具有很多优点,程序简单易读,结构清楚,最重要的是成本低。
很适合我们学生用来学生。
在做这个设计的过程中,我也了解到了自己的不足,在日后的学习中,我还需加倍努力学习。
设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。
这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作
参考文献)
[1]梁炳东.单片机原理与应用。
北京:
人民邮电出版社,2009
[2]
[3]
致谢
在此次课程设计中,我遇到不懂的问题,老师和同学都帮我,让我把问题顺利地得到解决,最后完成此次课程设计报告。
从中我学到了很多东西,在此,谢谢我的老师和同学,感谢你们在我遇到难题的时候帮我解答。
6程序汇编代码如下
主程序和子程序都存放在AT89C51单片机中。
主程序的功能是:
显示数字。
子程序的功能有:
延时。
程序代码:
OUTBITequ0e101h;位控制口
CLK164equ0e102h;段控制口(接164时钟位)
DAT164equ0e102h;段控制口(接164数据位)
INequ0e103h;键盘读入口
LEDBufequ60h;显示缓冲
Numequ70h;显示的数据
DelayTequ75h;
org0000h
ljmpStart
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
Delay:
;延时子程序
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
DisplayLED:
movr0,#LEDBuf
movr1,#6;共6个八段管
movr2,#00100000b;从左边开始显示
Loop:
movdptr,#OUTBIT
mova,#00h
movx@dptr,a;关所有八段管
mova,@r0
movB,#8;送164
DLP:
rlca
movr3,a
movacc.0,c
ANLA,#0FDH
movdptr,#DAT164
movx@dptr,a
movdptr,#CLK164
orla,#02h
movx@dptr,a
anla,#0fDh
movx@dptr,a
mova,r3
djnzB,DLP
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
movr6,#1
callDelaymova,r2;显示下一位
rra
movr2,a
incr0
djnzr1,Loop
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
ret
Start:
movdptr,#0e100h
mova,#03h
movx@dptr,a
movsp,#40h
movNum,#0
MLoop:
incNum
mova,Num
movb,a
movr0,#LEDBuf
FillBuf:
mova,b
anla,#0fh
movdptr,#LEDMap
movca,@a+dptr;数字转换成显示码
mov@r0,a;显示在码填入显示缓冲
incr0
incb
cjner0,#LEDBuf+6,FillBuf
movDelayT,#30
DispAgain:
callDisplayLED;显示
djnzDelayT,DispAgain
ljmpMLoop
END