《单片机技术应用》-项目7_第1页
《单片机技术应用》-项目7_第2页
《单片机技术应用》-项目7_第3页
《单片机技术应用》-项目7_第4页
《单片机技术应用》-项目7_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务一静态计数数码显示一、任务描述单片机上电,当按键按下时,单片机计数,同时将记下的按键次数用P0口输出,经数据缓冲驱动后进行显示。数据显示方式为静态显示,显示的位数是1位(即只能显示0~9,A、B、…、F,要求按键按下的次数不能超过16,否则显示不正确)。二、基础知识1.七段LED数码管七段LED数码管是由8只发光二极管组成的用于显示字段的数码型显示器件。LED数码管在使用的过程中具有显示清晰、组成灵活、成本低廉等特点,经常使用于家用电器和工业控制上。下一页返回任务一静态计数数码显示2.单位数码管静态显示硬件电路及测试程序该任务利用接于P3.2引脚的按键S7作为外部计数输入端,采用LED数码管L5作为计数显示输出。字形译码要采用软件方式,数码管8个字段连接缓冲器8个输出口,输入口接单片机P0口,数码管COM端由P2.5输出控制,单片机控制P2.5始终输出为0,则数码管显示采用静态显示方式。按照电路图焊接电路板,检测电路焊接无误后,再通过测试程序检测电路。测试程序:ORG0000H;开始CLRP2.5上一页下一页返回任务一静态计数数码显示START:MOVP0,#0FFH;数码管所有字段灭LCALLDELAY;调用延时子程序MOVP0,#00H;数码管显示所有字段LCALLDELAY;调用延时子程序AJMPSTART;转到开始DELAY:MOVR7,#100;延时子程序DL1:MOVR6,#50DL2:MOVR5,#20DJNZR5,$上一页下一页返回任务一静态计数数码显示DJNZR6,DL2DJNZR7,DL1RET;子程序调用返回END;程序结束测试程序编译后下载到单片机中运行,结果是LED数码管按一定的时间间隔亮、灭运行。若测试结果中某段显示不正确,需检查硬件电路或器件的好坏。三、数码管静态显示数据的控制程序设计1.编程思路初始化部分,定义外部中断0触发方式、设置数码管初始状态、初始化显示单元和计数单元。上一页下一页返回任务一静态计数数码显示在主程序中不断检测计数次数和显示的数据可否一致,一致则继续循环,不一致则送显示数据显示然后再循环。按键的计数处理部分在外部中断0处理程序中,按键S7按下一次,CPU中断一次,计数一次。程序中还利用“CLRP2.5”指令使P2.5始终保持低电平,则控制PNP型三极管饱和导通,使LED数码管COM端始终接高电平,数码管静态显示。在字形译码时,采用软件查表的方式将要显示的次数转换成字形码,再由P0口输出,经缓冲器驱动显示。2.程序清单1位数码管静态显示程序DISPLAY1.ASMORG0000H;开始上一页下一页返回任务一静态计数数码显示LJMPSTARTORG0003H;INT0中断服务程序入口地址LJMPINT_COUNTSTART:CLREA;关闭CPU中断CLRP2.5;控制P2.5输出0,使数码管的COM始终接VCCMOV60H,#00H;显示内容初始化MOV61H,#00H;计数次数初始化MOVP0,#0C0H;初始,数码管显示数据“0”SETBIT0;定义INT0为边沿触发方式SETBEX0;开外部中断0上一页下一页返回任务一静态计数数码显示SETBEA;开CPU中断MAIN:MOVA,61HCJNEA,60H,DISP;显示的数据与计数值不同则送显示AJMPMAINDISP:MOV60H,AMOVDPTR,#TABLEMOVA,60HMOVCA,@A+DPTR;查表,找出要显示的字形码MOVP0,A上一页下一页返回任务一静态计数数码显示LJMPMAINTABLE:DB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8H,80H,90HDB88H,83H,0C6H,0A1H,86H,8EHINT_COUNT:CLREX0PUSHA;A压入堆栈,保护A中数据INC61H;按键次数加一MOVA,61H上一页下一页返回任务一静态计数数码显示CLRCSUBBA,#10HJCINT_ENDMOV61H,#00H;比较当按键次数大于15次(0FH次)时清零,重新计数INT_END:POPA;A出栈SETBEX0RETI;中断返回END上一页下一页返回任务一静态计数数码显示3.程序分析该程序执行的结果是:单片机上电,当没有按键按下时,数码管显示0,当按键S7按下时,数码显示按键按下的次数,次数显示范围是0~9,A(10),B(11),C(12),D(13),E(14),F(15)。(1)ORG0000H:表示程序从0000H地址开始执行;ORG0003H:表示外部中断0中断时,CPU程序指针跳入的地址,即该中断服务程序入口地址。(2)MAIN:MOVA,61HCJNEA,60H,DISP上一页下一页返回任务一静态计数数码显示AJMPMAIN61H中存放按键S7按下的次数,60H为数码管要显示的数据。该项目主程序很简单,就是比较按键按下的次数和显示数据是否一致,不一致则送显示,一致则继续循环。(3)MOVDPTR,#TABLEMOVA,60HMOVCA,@A+DPTR利用软件查表的方式完成显示数据和字形码之间的转换。上一页下一页返回任务一静态计数数码显示假设按键按下的次数是6,在60H内存单元中存着,将次数送入累加器A,则A中数据为“6”,DPTR中的内容是TABLE的首地址,则@A+DPTR指向的地址是TABLE+6,由表可得地址TABLE+6中的数据为82H,正好是“6”的字形码,从表中取出放在累加器A中,然后输出到接口上即可驱动数码显示,执行的指令是“MOVP0,A”。(4)CLRCSUBBA,#10HJCINT_END上一页下一页返回任务一静态计数数码显示SUBB指令完成的功能是带借位的减法,并且该指令执行完后影响状态寄存器PSW中C的状态:执行减法时有借位则C为1,无借位时C为0。JC指令功能是判断状态寄存器PSW中C的状态,若为1时则跳转,为0时则向下顺序执行指令。这些指令完成的功能是判断累加器A中值是否大于15,若不大于(C=1)则跳转到INT_END,大于(C=0)则顺序执行指令。上一页返回任务二动态计数数码显示一、任务描述单片机内部定时/计数器0进行定时产生时钟信号小时、分钟和秒,用单片机P0口输出驱动6位数码管进行动态显示时钟信息,其中小时占两位数码管,分钟占两位数码管,秒占两位数码管。通过本任务掌握数码的动态显示方法,了解单片机产生时钟信号的原理。二、基础知识1.6位数码管动态显示控制硬件电路及测试程序硬件原理图如图7−2所示。由图可知,6位数码管的各个不同的字段并不是用P0口直接驱动的,而是在数码管和单片机接口之间加数据缓冲器,起到缓冲和驱动的作用。下一页返回任务二动态计数数码显示6位数码管的COM端分别受P2.0、P2.1、P2.2、P2.3、P2.4、P2.5控制。按照原理图焊接线路板,并检测电路焊接无误后,再通过测试程序检测电路。测试程序如下:FLAG1BIT38H;内存位地址27H.0,显示L0数码管标志FLAG2BIT39H;内存位地址27H.1,显示L1数码管标志FLAG3BIT3AH;内存位地址27H.2,显示L2数码管标志FLAG4BIT3BH;内存位地址27H.3,显示L3数码管标志FLAG5BIT3CH;内存位地址27H.4,显示L4数码管标志FLAG6BIT3DH;内存位地址27H.5,显示L5数码管标志LED_CONEQU60H;数码管要显示的字段上一页下一页返回任务二动态计数数码显示ORG0000H;开始LJMPSTARTORG001BHLJMPINT_T1ORG0030HSTART:MOVTMOD,#00010000B;设置定时器1工作方式MOVTH1,#0F2H;设置定时器初始值为F2FBHMOVTL1,#0FBHSETBTR1;启动定时器1上一页下一页返回任务二动态计数数码显示SETBEA;开中断SETBET1;允许定时器1中断

MOV27H,#00000001B;FLAG1为1MAIN:MOVLED_CON,#0H;全亮字段CALLCON_DISPCALLDELAYCALLDELAYMOVLED_CON,#0FFHCALLCON_DISP上一页下一页返回任务二动态计数数码显示CALLDELAYCALLDELAYAJMPMAIN;转到MAINCON_DISP:MOVR1,#6;LED_CON送到50H~55H中等待显示MOVR0,#50HMOVA,LED_CONDISP1:MOV@R0,AINCR0DJNZR1,DISP1上一页下一页返回任务二动态计数数码显示RETDELAY:MOVR7,#100;延时子程序DL1:MOVR6,#50DL2:MOVR5,#20DJNZR5,$DJNZR6,DL2DJNZR7,DL1RET;子程序调用返回INT_T1:MOVTH1,#0F2H;设置定时器初始值为F2FBH上一页下一页返回任务二动态计数数码显示MOVTL1,#0FBHJBFLAG1,INT_LED1JBFLAG2,INT_LED2JBFLAG3,INT_LED3JBFLAG4,INT_LED4JBFLAG5,INT_LED5JBFLAG6,INT_LED6INT_END:RETIINT_LED1:MOVP0,#0FFH上一页下一页返回任务二动态计数数码显示SETBP2.5MOVP0,50HCLRP2.0CLRFLAG1SETBFLAG2AJMPINT_ENDINT_LED2:MOVP0,#0FFHSETBP2.0MOVP0,51H上一页下一页返回任务二动态计数数码显示CLRP2.1CLRFLAG2SETBFLAG3AJMPINT_ENDINT_LED3:MOVP0,#0FFHSETBP2.1MOVP0,52HCLRP2.2CLRFLAG3上一页下一页返回任务二动态计数数码显示SETBFLAG4AJMPINT_ENDINT_LED4:MOVP0,#0FFHSETBP2.2MOVP0,53HCLRP2.3CLRFLAG4SETBFLAG5AJMPINT_END上一页下一页返回任务二动态计数数码显示INT_LED5:MOVP0,#0FFHSETBP2.3MOVP0,54HCLRP2.4CLRFLAG5SETBFLAG6AJMPINT_ENDINT_LED6:MOVP0,0FFHSETBP2.4上一页下一页返回任务二动态计数数码显示MOVP0,55HCLRP2.5CLRFLAG6SETBFLAG1AJMPINT_ENDEND;程序结束2.测试程序分析测试程序编译后下载到单片机中运行,结果是6位LED数码管按一定的时间间隔全亮(显示“8”)、全灭运行。若测试结果不是,需检查硬件电路或器件好坏。上一页下一页返回任务二动态计数数码显示下面简单讲解一下该程序动态显示6位数码的设计思路和编程思路:6位数码管轮流显示,设置6个标志位(FLAG1~FLAG6),标志位若为1,表示显示该位数码管,为0表示不该显示该位。利用人眼的视觉滞留效应,设置在1秒钟内所有的位循环显示300次,则显示1次的周期是1s/300=3.3ms,利用51单片机内部定时/计数器1,定义中断时间为3.3ms,中断时判断所有显示位的标志位,并跳入标志位为1的位,关闭上一位的显示,送出显示数据,打开该位的显示,同时清该位数码管的标志位,置需要显示的下一位的标志位。上一页下一页返回任务二动态计数数码显示要使定时器T1中断时间为40ms,定时器T1的初始值计算过程如下:因为设置定时器T1的工作方式为方式1,设初始值为X,则中断时间为(216−X)×12/fosc=40(ms)取fosc=12MHz求解方程得出X=063C0H。三、数码管动态显示数据的控制程序设计1.编程思路利用51单片机内部定时/计数器0进行定时,产生时钟信号秒、分钟、小时,并分别用2位数码管进行显示,即秒占用2位,分钟占用2位,小时占用2位共6位数码管进行显示。上一页下一页返回任务二动态计数数码显示设置50H~55H共6个字节单元存放要显示数据的字形码,40H~45H共6个字节单元存放要显示的十进制数,56H、57H、58H三个单元分别装二进制秒、分钟、小时数据。6位数码管的动态显示的设计思路及编程思路同测试程序。2.程序清单FLAG1BIT38H;内存位地址27H.0FLAG2BIT39H;内存位地址27H.1FLAG3BIT3AH;内存位地址27H.2FLAG4BIT3BH;内存位地址27H.3FLAG5BIT3CH;内存位地址27H.4上一页下一页返回任务二动态计数数码显示FLAG6BIT3DH;内存位地址27H.5SECEQU56HMINEQU57HHOUREQU58HMSECEQU59HORG0000H;开始LJMPSTARTORG000BH;定时器T0中断入口地址LJMPINT_T0上一页下一页返回任务二动态计数数码显示ORG001BH;定时器1中断入口地址LJMPINT_T1ORG0030HSTART:MOVTMOD,#00010001B;设置定时器T0和定时器T1的工作方式MOVTH1,#0F2H;设置定时器T1的初始值MOVTL1,#0FBHMOVTH0,#3CH;设置定时器T0的初始值MOVTL0,#0B0H上一页下一页返回任务二动态计数数码显示SETBTR0;启动定时器T0SETBTR1;启动定时器T1MOVR0,#20H;内存20H~59H共58个字节单元清零MOVR1,#58START1:MOV@R0,#00HINCR0DJNZR1,START1MOV27H,#00000001B;设置数码管从L1位开始显示MOVMSEC,#20上一页下一页返回任务二动态计数数码显示SETBEA;开中断SETBET0;允许定时器T0中断SETBET1;允许定时器T1中断MAIN:MOVA,SEC;二进制秒数转化成十进制秒数MOVR0,#40HCALLBIN_DEXMOVA,MIN;二进制分钟数转化成十进制分钟数MOVR0,#42HCALLBIN_DEX上一页下一页返回任务二动态计数数码显示MOVA,HOUR;二进制小时数转化成十进制小时数MOVR0,#44HCALLBIN_DEXMOVR2,#6;查表,十进制数转化成字形码MOVR1,#40HMOVR0,#50HMOVDPTR,#TABLEMIAN1:MOVA,@R1MOVCA,@A+DPTR上一页下一页返回任务二动态计数数码显示MOV@R0,AINCR1INCR0DJNER2,MAIN1JMPMAINBIN_DEX:MOVB,#10DIVABMOV@R0,BINCR0上一页下一页返回任务二动态计数数码显示MOV@R0,ARETINT_T1:MOVTH1,#0F2H;设置定时器T1的初始值MOVTL1,#0FBHJBFLAG1,INT_LED1;定时器T1中断中处理数码管显示JBFLAG2,INT_LED2JBFLAG3,INT_LED3JBFLAG4,INT_LED4JBFLAG5,INT_LED5上一页下一页返回任务二动态计数数码显示JBFLAG6,INT_LED6INT_END:RETIINT_LED1:MOVP0,#0FFH;显示L1数码管处理程序MOVP2,#0FFHMOVP0,50HCLRP2.0CLRFLAG1;显示后更换显示标志位,以便下一周期显示下一位SETBFLAG2AJMPINT_END上一页下一页返回任务二动态计数数码显示INT_LED2:MOVP0,#0FFH;显示L2数码管处理程序MOVP2,#0FFHMOVP0,51HCLRP2.1CLRFLAG2SETBFLAG3AJMPINT_ENDINT_LED3:MOVP0,#0FFH;显示L3数码管处理程序MOVP2,#0FFH上一页下一页返回任务二动态计数数码显示MOVP0,52HCLRP2.2CLRFLAG3SETBFLAG4AJMPINT_ENDINT_LED4:MOVP0,#0FFH;显示L4数码管处理程序MOVP2,#0FFHMOVP0,53HCLRP2.3上一页下一页返回任务二动态计数数码显示CLRFLAG4SETBFLAG5AJMPINT_ENDINT_LED5:MOVP0,#0FFH;显示L5数码管处理程序MOVP2,#0FFHMOVP0,54HCLRP2.4CLRFLAG5SETBFLAG6上一页下一页返回任务二动态计数数码显示AJMPINT_ENDINT_LED6:MOVP0,#0FFH;显示L6数码管处理程序MOVP2,#0FFHMOVP0,55HCLRP2.5CLRFLAG6SETBFLAG1;循环到数码管L1标志位AJMPINT_ENDINT_T0:PUSHPSW;定时器T0定时中断产生时钟信号上一页下一页返回任务二动态计数数码显示PUSHACCMOVTH0,#3CH;设置定时器T0的初始值MOVTL0,#0B0HDJNEMSEC,INT_T0_ENDMOVMSEC,#20INCSECMOVA,SECCLRCSUBBA,#60上一页下一页返回任务二动态计数数码显示JCINT_T0_ENDINCMINMOVSEC,#0MOVA,MINCLRCSUBBA,#60JCINT_T0_ENDINCHOURMOVMIN,#0上一页下一页返回任务二动态计数数码显示MOVA,HOURCLRCSUBBA,#24JCINT_T0_ENDMOVHOUR,#0INT_T0_END:POPACCPOPPSWRETITABLE:DB0C0H,0F9H,0A4H,0B0H上一页下一页返回任务二动态计数数码显示DB99H,92H,82H,0F8H,80H,90HEND;程序结束3.程序分析该程序执行的结果是:单片机上电,6位数码管显示时间,前两位显示小时,中间两位显示分钟,后两位显示秒。当60秒到时分钟数自动加1,秒数清零;当60分钟到时,小时数自动加1,分钟数清零;当24小时到时,小时数自动清零。上一页返回任务三串行LED显示电路设计一、任务描述在单片机系统设计中,LED显示方式由于具有使用方便、价格低廉等优点而得到广泛应用。在采用并行显示方式时,显示电路的段码与位控码要占用单片机的较多口线,不能满足大型控制系统的要求。采用串行显示方式则只需占用2~3根口线,节约单片机大量的I/O线,且使用效果很好。本任务利用74HC595A实现多位LED串行显示。二、电路设计1.74HC595A工作原理74HC595具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器有相互独立的时钟。下一页返回任务三串行LED显示电路设计74HC595A内部含有8位移位寄存器和8位D锁存器,其引脚及内部结构如图7−3所示。串行移位寄存器接收外部输入的串行数据,一方面可进行串行数据输出,同时向锁存器提供8位并行输入数据,并具有异步复位功能;8位锁存器可三态输出并行数据。该芯片具有串行输入、并行输出两个独立的时钟信号。表7−2为该芯片的逻辑功能表。输入数据在串行移位时钟SRCLK的上升沿,由串行输入端SER输入到芯片内部的串行移位寄存器中,同时由SQH端串行输出;在锁存时钟信号RCL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论