文档详情

项目2 8位流水灯的单片机

第***
实名认证
店铺
PPT
329KB
约26页
文档ID:54458716
项目2   8位流水灯的单片机_第1页
1/26

项目2 8位流水灯的单片机控制,,项目目标,通过单片机控制8个发光二极管的顺序点亮,学会使用MCS-51单片机芯片的P1口进行输出控制,进一步学习汇编程序的分析方法,并能熟练运用RR、RL等基本指令项目任务,要求应用AT89C51芯片,控制8个发光二极管的有序亮灭,呈现流水灯的效果设计单片机控制电路并编程实现此功能项目分析,利用单片机P1口连接8个发光二极管,利用各引脚输出电位的变化,控制发光二极管的亮灭P1口各引脚的电位变化可以通过指令来控制,为了清楚地分辨发光二极管的点亮和熄灭,在P1口输出信号由一种状态向另一种状态变化时,编写延时程序实现一定的时间间隔项目实施,一、硬件电路设计 二、控制程序的编写三、程序仿真与调试,一、硬件电路设计,(一)设计思路在AT89C51单片机芯片及基本外围电路组成的单片机最小系统基础上,利用P1口的8个引脚控制8个发光二极管由于发光二极管具有普通二极管的共性----单向导电性,因此只要在其两极间加上合适的正向电压,发光二极管即可点亮;将电压撤除或加反向电压,发光二极管即熄灭根据发光二极管的特性,结合单片机P1口的输出信号,即可实现流水灯的控制效果二)电路设计 1、P1口结构,左图是P1口中某一位的位结构电路图。

P1口为8位准双向口,每一位均可独立定义为输入或输出口,当作为输出口时,1写入锁存器,,T2截止,内部上拉电阻将电位拉至“1“,此时该口输出为1;当0写入锁存器, ,T2导通,输出则为0作为输入口时,锁存器置1,,T2截止,此时该位既可以把外部电路拉成低电平,也可由内部上拉电阻拉成高电平,所以P1口称为准双向口2、发光二极管的连接,发光二极管的连接方法:若将它们的阴极连接在一起,阳极信号受控制,即构成共阴极接法,如图a所示;若将它们的阳极连接在一起,阴极信号受控制,则构成共阳极接法,如图b所示由于P1口引脚输出高电位时电压大约是5V,为保证发光二极管的可靠工作,必须在发光二极管和单片机输出引脚间连接一只限流电阻 本项目选用硅型普通发光二极管,限流电阻取220Ω3、8只发光二极管的控制电路,(三)材料表 从原理图可以得到实现本项目所需的元器件元器件的选择应该合理,以满足功能要求为原则,否则会造成资源的浪费二、 控制程序的编写,(一)绘制程序流程图 本控制使用简单程序设计中的顺序结构形式实现,程序结构流程图如右图二)程序编写,ORG 0000H MOV P1,#0BFHLJMP MAIN LCALL YSORG 0030H MOV P1,#7FH MAIN:MOV P1,#0FEH LCALL YSLCALL YS LJMP MAIN MOV P1,#0FDH ORG 0100HLCALL YS YS:MOV R7,#2MOV P1,#0FBH L1:MOV R6,#0FFHLCALL YS L2:MOV R5,#0FFHMOV P1,#0F7H L3:DJNZ R5,L3LCALL YS DJNZ R6,L2MOV P1,#0EFH DJNZ R7,L1LCALL YS RETMOV P1,#0DFH ENDLCALL YS,,,,,,,,,,,,,,,,,,(三)汇编指令学习,1、对累加器A的逻辑操作指令: 在MCS-51单片机的指令系统中,累加器A是一个最常用的8位寄存器,为了使用方便,特别设计了7条对累加器A进行逻辑操作的指令,包括清零、取反、移位和高低半字节互换,且操作结果依然保存在累加器A中。

汇编指令 指令功能CLR A 将累加器A中的数据清零CPL A 将累加器A中的数据取反RL A 将累加器A中的数据依次循环左移一位RR A 将累加器A中的数据依次循环右移一位RLC A 将累加器A中的数据连同进位标志位CY一起依次循环左移一位RRC A 将累加器A中的数据连同进位标志位CY一起依次循环右移一位,2、延时程序,在项目一和项目二中,为了能清晰的分辨出发光二极管的变化,我们进行了延时程序的编写1)延时功能的实现方法 (1)利用RC的充放电时间来延时的硬件电路 (2)利用单片机内的定时器来实现(T0、T1是可编程的) (3)编程实现软件延时a、它是利用执行一组指令所花的时间和多次重复执行这组指令的次数乘积来实现,而循环次数的确定,则需要根据延时的时间进行计算,因此,延时时间确定关键在于确定循环计数器的设置值b、常用指令MOV Rn,#data ;1Tm NOP ;1TmDJNZ Rn,rel ;2Tm RET ;2Tm,2)通用延时程序结构,YS:MOV R7,#C1 ;1TmD1:MOV R6,#C2 ;1TmD2:MOV R5,#C3 ;1Tm LOOP:DJNZ R5,LOOP ;2Tm*C3DJNZ R6,D2 ;2TmDJNZ R7,D1 ;2TmRET ;2Tm 延时时间: T=1Tm+[1Tm+(1Tm+2Tm*C3+2Tm)*C2+2Tm]*C1+2Tm T的长短关键在于设置C3、C2、C1的值,,*C2,,*C1,3)例题:延时100ms子程序, 设fosc=6MHZ(Tm=2us),(1)设C3=250,则内循环时间2Tm*250=2*2*250=1000us (2)外循环要求执行时间为100 ms所以:1Tm+(1Tm+1000us+2Tm)*C2+2Tm=100msC2=99.7≈100 (3)程序YS:MOV R2,#100D1:MOV R3,#250 LOOP:DJNZ R3,LOOPDJNZ R2,D1RET,3、程序的编写技巧:,在本项目中,利用P1口实现8个发光二极管的流水灯控制,主要利用了送数指令,将要显示的现象对应的数据通过P1口送出。

在编写控制程序时,应首先将每个对应现象分析清楚,比如:要让L3亮,其余发光二极管灭,则P1口的数据应为11110111B;要让L7亮,则P1口的数据应为01111111B然后找到能实现此操作的指令即可下面使用我们在本项目中学习的移位指令编写程序如下:ORG 0000H ORG 0F00H LJMP MAIN2 DELAY:MOV R7 ,#10ORG 0200H D0:MOV R6 ,#100MAIN2:MOV A,#0FEH D1:MOV R5, #200XH:MOV P1,A D2:DJNZ R5,D2LCALL DELAY DJNZ R6,D1RL A DJNZ R7,D0LJMP XH RETEND,分析后可知,本段程序与项目中给出的参考程序功能相似,但是指令数量较少,所占存储器空间较小。

根据发光二极管的点亮次序,通过分析每次给P1口所送数据,发现不断变换的是数据中“0”的位置若点亮次序是从L0~L7,则“0”是自低位(右)向高位(左)移动的,符合指令“RL A”的功能同时还可以总结出,若应用“RR A”指令,则8个发光二极管的点亮次序是从L7~L0应用了移位指令后,程序更简洁易懂了,因此在今后的学习中,应注意类似情况的处理三、程序仿真与调试:,1、运行Keil软件 2、利用Keil进行文件编译 3、利用Keil进行软件仿真 4、程序的下载及运行 5、修改源程序进行调试 注:此部分可实际利用Keil 软件教学1、运行Keil软件运行Keil软件,将本项目中的汇编源程序以文件名MAIN2.ASM保存,添加到工程文件并进行软件仿真的设置2、利用Keil进行文件编译将已经存储完成的文件进行编译,若编译中检测到错误的符号,会将错误信息显示在“Build”卡项中,用鼠标双击错误提示,即可以在对应位置进行修改3、利用Keil进行软件仿真编译成功的程序在写入芯片前,可以先进行计算机软件仿真,通过观察分析存储器中相关数据的变化,分析源程序是否正确 4、程序的下载及运行利用编程器将汇编完成的文件下载到所用的芯片中,安装到焊接好的电路板上,通电后运行程序,观察8个发光二极管的亮灭变化,理解送数指令的意义(如左图所示)。

5、修改源程序,将送数指令改为移位指令,重复以上步骤,观察8个发光二极管的控制现象,理解RL、RR指令的功能知识点链接,,项目测试,一、填空题:1、同样的工作电压,( )发光二极管的亮度较高A) 高亮型 (B)普通型 2、已知(A)=27H,执行指令“RL A”后,累加器A中的内容是( )A) 28H (B) 93H (C)4FH3、本项目中要实现8个发光二极管初始时两端点亮的效果, 初值应为( )A) 77H (B) E7H (C) EEH (D) 7EH4、若本项目设计电路时,若要增加发光二极管的亮度,则所选电阻阻值( )A)增加 (B)减小 (C)不变,返回,二、编程及问答: 1、要使得本项目中发光二极管的闪烁速度加快,程序如何修改?若变慢呢? 2、试编写两段延时时间不同的子程序,并分别调用 3、汇编程序的书写格式和注意事项是什么?,。

下载提示
相似文档
正为您匹配相似的精品文档