单片机实验课题.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
 一、八路LED跑马灯实验   现在让我们开始做第一个实验:八路发光二极管轮流点亮的实验,也就是通常所说的跑马灯实验,首先让我们来完成必须的硬件部分,我们需要焊接上8个发光二极管和8个限流电阻,可以参考下面的原理图和实物图像进行操作,需要注意的是LED是有极性的,引脚长的为正极,引脚短的为负极,负极和电阻一侧连接,如果接错那么相应的那一路可能在实验中不会点亮了,在焊接前要看仔细哦~~~   下面我们来完成软件编程设计,这里我们没有采用高深的编程技巧,而是用了最笨、最直接的向端口送数的办法来实现,一来程序比较简单,没必要玩深沉,而且初学者看起来直观易懂。   ORG 0000H   START:MOV P1,;最下面的LED点亮   LCALL DELAY;延时1秒   MOV P1,;最下面第二个的LED点亮   LCALL DELAY;延时1秒   MOV P1,;最下面第三个的LED点亮 (以下省略)   LCALL DELAY   MOV P1,   LCALL DELAY   MOV P1,   LCALL DELAY   MOV P1,   LCALL DELAY   MOV P1,   LCALL DELAY   MOV P1,   LCALL DELAY   MOV P1,;完成第一次循环点亮,延时约0.25秒   AJMP START;反复循环   ;延时子程序,12M晶振延时约250毫秒   DELAY:   MOV R4,#2   L3: MOV R2 ,#250   L1: MOV R3 ,#250   L2: DJNZ R3 ,L2   DJNZ R2 ,L1   DJNZ R4 ,L3   RET   END   如何精确计算延时子程序的执行时间?   汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要! 二、两位数码管循环显示00~99的实验   现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,   数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。   首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:      网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0口送出数字的显示代码,数码管就能正常显示数字。   因为要显示两位不同的数字,所以必须用动态扫描的方法来实现,就是先个位显示1毫秒,再十位显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到两位不同的数字稳定显示。   下面我们再介绍一种共阴数码管的单片机驱动方法,电路如下图:   网友可以看到:+5V通过1K的排阻直接给数码管的8个段位供电,P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,相应的位可以吸入电流。单片机的P0口输出的数据相当于将数码管不要显示的数字段对地短路,这样数码管就会显示需要的数字。   网友可以看到,共阴数码管的硬件更简单,所以在批量生产时,硬件开销小,节省PCB面积,减少焊接工作量,降低综合成本,所以采用共阴数码管更有利于批量生产,现在销售的试验板都是采用共阴数码管了。   以下是用AT89C51实验板的两位数码管显示00~99依次循环的汇编语言程序   a_bit equ 20h ;数码管个位数存放内存位置   b_bit equ 21h ;数码管十位数存放内存位置   temp equ 22h ;计数器数值存放内存位置   star: mov temp,#0 ;初始化计数器,从0开始   stlop: acall display;调用显示子程序   inc temp;对计数器加1   mov a,temp   cjne a,#100,next ;判断计数器是否满100?   mov temp,#0;满100就清零重新开始   next: ljmp stlop;不满就循环执行   ;显示子程序   display: mov a,temp ;将temp中的十六进制数转换成10进制   mov b,#10 ;10进制/10=10进制   div ab   mov b_bit,a ;十位在a   mov a_bit,b ;个位在b   mov dptr,#numtab ;指

文档评论(0)

舞林宝贝 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档