凌阳单片机课程设计驱动数码管.doc

上传人:laozhun 文档编号:4147199 上传时间:2023-04-07 格式:DOC 页数:12 大小:750.50KB
返回 下载 相关 举报
凌阳单片机课程设计驱动数码管.doc_第1页
第1页 / 共12页
凌阳单片机课程设计驱动数码管.doc_第2页
第2页 / 共12页
凌阳单片机课程设计驱动数码管.doc_第3页
第3页 / 共12页
凌阳单片机课程设计驱动数码管.doc_第4页
第4页 / 共12页
凌阳单片机课程设计驱动数码管.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《凌阳单片机课程设计驱动数码管.doc》由会员分享,可在线阅读,更多相关《凌阳单片机课程设计驱动数码管.doc(12页珍藏版)》请在三一办公上搜索。

1、目录第1章研究背景及设计目的要求11.1 研究背景11.2 设计目的要求1第2章设计的方案及基本原理22.1设计方案22.2基本原理2第3章 程序设计53.1主程序流程图53.2程序代码5第4章 调试结果及分析64.1调试运行及结果64.2调试结果分析7第5章 心得与体会8参考文献9附 录10第1章 研究背景及设计目的要求1.1 研究背景RAMROM定时计数器CPU中断系统串行口并行口振荡电路 X1 X2 P0 P1 P2 P3 TXD RXD INT0 INT1T0 T1随着电子科技的逐步发展,单片机领域发展逐步趋向集成化,微型化,本设计利用凌阳单片机控制6个LED数码管的显示,完成本课程设

2、计需要熟悉凌阳单片机的工作原理,了解该款16位单片机的内部结构如图1-1所示,以及它功能上的特性:体积小、集成度高、可靠性好且易于扩展。nSP家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减了各功能部件之间的连线,提高了其可靠性和抗干扰能力。图1-1 凌阳单片机内部结构图数码管是一种半导体发光器件,其基本单元是发光二极管。数码管分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,按能显示多少个“8”可分为1位、2位、4位等数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两

3、类。其驱动方式具体原理将在后续介绍。1.2 设计目的要求1.熟悉SPCE061A控制LED数码管显示的方法。 2.进一步熟悉nSP汇编语言和C语言程序设计。 3.最终实现设计效果由六个LED数码管移位循环显示09,即: “012345” , “123456” , “234567” , “890123” ,“901234”。第2章 设计的方案及基本原理2.1设计方案运用 Windows 系统和 nSP IDE 仿真环境的 PC 机一台以及61板一套、LED键盘模组一套、10 针排线两根来控制LED,通过程序的设置使LED显示程序中的数字,即显示“0”“1”“2”“3”“4”“5”“6”“7”“8

4、”“9”。2.2基本原理数码管由7个发光二极管组成,行成一个日字形,它们可以共阴极,也可以共阳极.通过解码电路得到的数码接通相应的发光二极而形成相应的字,这就是它的工作原理基本的半导体数码管是由7个条状的发光二极管(LED)按图2-1(a)所示排列而成的,可实现数字“09”及少量字符的显示。另外为了显示小数点,增加了1个点状的发光二极管,因此数码管就由8个LED组成,我们分别把这些发光二极管命名为“a,b,c,d,e,f,g,dp”,排列顺序如下图2-1。-+-+5 4 3 2 1 6 7 8 9 10abcdefg+(a)管脚排列(c)共阴极(一)(b)共阳极图2-1 管脚排列及内部结构LE

5、D显示器中每个发光二极管要通过5mA20mA电流才能达到正常亮度,如图2-2LED原理图。SPCE061A的输入电流可达到12mA,输出可达5mA,实际上不用驱动电路即可达到正常亮度,为了可靠性设计可采用晶体管构成驱动电路。这样,由于视觉暂留现象,我们看到的便是6只显示器同时在显示。VDDSLEEPLEDLEDR12 330R13 1KVSS图2-2 LED原理图当需要某一位数码管显示数字时,只需要先选中这位数码管的位信号,再给显示数字的段码。比如当在第一个数码管上显示一个“6” 时,如图 2-3,先选中第一位数码管的位信号(实验箱上标号是“1”),即先给和“1”相连接的 I/O口送1;再把段

6、码设置为0x007d,即在 a、c、d、e、f、g各段引出的端口检测到高电平,就可以显示一个“6”出来。abcdefgdp图2-3 数码管显示“6”AAABBBCCECDFGGADFD_DPHHGFFEEDDAHVDD要实现每个数码管分别显示不同数字的效果,例如,要显示“123456”,则需要不断地快速刷新数码管的显示状态,即先使第一个数码管显示数字“1”,其他数码管熄灭,然后熄灭第一个数码管,第二个数码管显示数字“2”,以此类推。其中晶体管共集电极接法由图2-4给出。这样,利用人眼的视觉残留效应,就产生了“123456”同时显示出来的效果。图2-4晶体管共集电极接法数码管动态显示接口是单片机

7、中应用最为广泛的一种显示方式之一, 动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,如图2-5所示连接方法。另外为每个数码管的公共极COM 增加位选通控制电路,位选通由各自独立的 I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足

8、够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。IOA0IOA1IOA2IOA3IOA4IOA5IOA6IOA7IOB15IOB14IOB13IOB12IOB3IOB2IOB1abcdefgDP123456DD6位LED显示电路模块SPCE061ADD图2-5 SPCE061A和6位LED显示电路模块的连接按照上面数码管的显示原理,当要在第四个数码管上显示一个“E”时,先要通过 IOB12 端口给“4”端口送一个 1,选中第四个数码管;由图 4-1 可以看出,显示“E”时,需要 a、d、e、f、g段被点亮,所以给

9、IOA0、IOA3、IOA4、IOA5、IOA6 端口各送一个 1,则在 a、d、e、f、g 端口各能检测到一个高电平,就可以点亮 a、d、e、f、g 段,显示一个“E” 。第3章 程序设计3.1主程序流程图程序运行具体过程,开始时单片机进行初始化,将属性寄存器,方向寄存器数据寄存器清零,并设置系统时钟自身开始计数。当初始计数小于等于99循环递归自身过程,当DIG99时计数器开始自加时,以此控制位置变量POS使其在自累加的时候控制数码管显示位数,小于6时循环累加到达6即清零重新开始计数这样完成了数码管位数的显示控制。图3-1主程序流程图。开始TimerCnt=TimerCnt+1DIG=0DI

10、G=99TimerCnt=0TimerCnt1000POS=1POS=6调用 LedDispDig函数在Pos 位置显示数字 DigDig=Dig+1Pos=Pos+1图3-1 主流程图3.2程序代码主程序代码如附录所示第4章 调试结果及分析4.1调试运行及结果打开凌阳单片机运行环境,将预存写好的程序输入到编辑栏内,打开单片机主电源,避免冷启动使单片机出现漂移,经检查无误后进行运行主程序,同时观察程序运行状况避免死循环导致死机现象。调试结果如图4-1使数码管显示“123456”和图4-2是数码管显示“012345”所示。图4-1数码管显示“123456”图4-2数码管显示“012345”4.2

11、 调试结果分析程序运行过程中出现了诸多情况,在确定主程序正确无误的情况下,出现报错,可能是在输入程序时忘记了注释和主程序的区分,误将主程序作为注释,致使程序运行丢失了必要语句从而发生机械中断。在运行程序过程中,出现了LED显示不规则数码的现象,原因是未将LED所有管脚与I/O口进行短接,漏接了若干个管脚造成输出与程序设计上的不匹配。当程序准确无误时发现显示数码过程中LED数码管始终闪烁不定,原因是在设计过程中单片机驱动LED频率过低造成人眼能观察到他的刷新过程,类似细节问题应该在编辑程序的时候给予足够的重视。如果要测试定时中断频率,只要在中断中对这个测试口取反,即可通过示波器观测中断频率;要测

12、试主程序运行周期,只要把取反指令放在主程序循环圈中,即可;要测试一次复杂计算(或其它动作)需要消耗多少时间,我们只需在计算之前把测试口变为高电平,等到计算结束后立即把输出口恢复到低电平,这段高电平的时间长度,即为计算消耗时间;两个动作之间的延时时间,我们也可以按照上一条方法一样,在两个动作发生前把测试口分别取一次反。第5章 心得与体会通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不

13、考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际,避免只会纸上谈兵。首先,学习单片机要有一定的基础:电子技术方面要有数字电路和模拟电路等方面的理论基础,特别是数字电路;编程语言要求汇编语言或C语言。要想成为单片机高手,建议首先学习汇编语言,尽管汇编语言属于低级语言,编程效率低,但是较C语言具有目标代码简短,占用内存少,执行速度快等优点,更重要的是能使我们尽快熟悉单片机的内部结构,并能对其进行精确的控制。为期一个星期的课程设计已经结束,在这一星期的学习、设计、搜索

14、资料过程中我感触颇深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了常用元件的识别和测试;熟悉了常用的仪器仪表;了解了电路的连接、测试方法;以及如何提高电路的性能等等。这个课程设计课我还不是很熟悉,第一次做难免会感到陌生,而且对很多基本的东西都不是很清楚,在一定程度上影响了我们的课程设计的质量,希望能在以后的时间里认真学习好这些基础的东西。我对这个课程设计课有着深刻的体会:要想做好这个课程设计,就必须认认真真地去做,不要怕麻烦,遇到不懂的问题就要主动去问同学或者老师。参考文献1胡宴如.模拟电子技术M.北京高等教育出版社,2000.3.2彭介华.电子技术课程设计指导M.北京高等教育出

15、版社,1997.3罗亚非.凌阳16位单片机应用基础M北京航空航天大学出版社,2005.4邱关源.电路M.北京高等教育出版社,2006.5.5阎石.数字电子技术基础M.北京高等教育出版社,2006.5.6参考网址附 录主程序如下所示:.include hardware.inc.define LED_SEG 0x00ff.define LED_DIG 0x3f00.ram.var Pos,Dig,TimerCnt.dataDigCode:.dw 0x3F,0x06,0x5B,0x4F,0x66.dw 0x6D,0x7D,0x07,0x7F,0x6F.code.public LedDispDigLe

16、dDispDig:push r1,r2 to spr1=1P_Watchdog_Clear=r1r1=P_IOB_DirP_IOB_Dir=r1r1=P_IOB_Attribr1|=LED_DIG+LED_SEG P_IOB_Attrib=r1r1=0x0080r2=PosL_SetIOBHigh:r1=r1 LSL 1r2-=1jnzL_SetIOBHighP_IOB_Data=r1r1=Digr2=DigCoder2+=r1r1=r2r2=P_IOB_Bufferr2|=r1P_IOB_Data=r2pop r1,r2 from spretf.public _mainr1=0L_MainLoop:r2=1000L_TimerLoop:Dig=r1r3=1Pos=r3L_DigLoop:call LedDispDigr3=Digr3+=1cmp r3,9jna L_DigNextr3=0L_DigNext:Dig=r3r3=Pos r3+=1Pos=r3cmp r3,6jna L_DigLoopr2-=1jnz L_TimerLoopr1+=1cmp r1,9jna L_MainLoopr1=0jmp L_MainLoopretf

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号