《单片机应用技术》课件-项目4 数码管显示器的实现_第1页
《单片机应用技术》课件-项目4 数码管显示器的实现_第2页
《单片机应用技术》课件-项目4 数码管显示器的实现_第3页
《单片机应用技术》课件-项目4 数码管显示器的实现_第4页
《单片机应用技术》课件-项目4 数码管显示器的实现_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

单片机技术与实现

项目四数码管显示器的实现项目四数码管显示器的实现任务一

数码管显示器与键盘控制电路的制作任务二

1位、2位数码管显示的实现任务三

4人抢答器的设计拓展知识

LED动态显示方式数码管用于单片机数码管显示是单片机系统重要的信息显示方式,常与按键一起组成“人机对话”,学习数码管显示及按键的编程实现方法是单片机开发重要的基本功。认识数码管数码管是单片机应用系统中最常用的显示器件之一,为人机对话提供了一个直观的显示窗口,通过数码管显示数字0~9及字母A~F。数码管的规格大小不同,颜色以红色、绿色、黄色、蓝色居多。数码管的结构右图为数码管的笔画示意图,其内部由8个发光二极管组成,故又称为八段LED数码管。发光二级管的连接方式不同,数码管可分为共阴极数码管和共阳极数码管两种。共阴极接法共阳极接法数码管的显示原理七段数码显示器内部由8只LED组成,其中7只LED组成显示数字的七段数码;1只显示小数点。当需要显示0~9其中1个数字时,把对应这个数字的LED段点亮。共阳数码管数字编码共阴数码管数字编码?独立式按键与矩阵式键盘按键是完成单片机系统人机对话的重要手段,如计算机键盘,手机拨号键及其他电子设备的控制按钮各种电子设备的键盘独立式键盘原理在独立式键盘电路中,K1~K8独立按键的1脚全部连接到地(低电平)、2脚分别连接到集成电阻的1~8脚,集成电阻的9~19脚全部连接到电源+5V电压(高电平)。在没有按键接通时,集成电阻的1~8脚全部为电源+5V电压(高电平),当某一只按键接通时,与该按键相连的电阻脚被连接到地(低电平)。因此,可以利用集成电阻的1~8脚电压变化状态(高低电平变化状态)来判断是哪一只按键被按下接通。独立式按键电路的结构按键去抖的方法:利用延时时间,一般设定10~20ms的延时程序。按键抖动:单片机系统中的按键一般是机械触点,当按键从闭合到断开或从断开到闭合的过程中,会有抖动,也即有一个似通非通的不确定状态。矩阵式键盘识别原理:把第一列按键2脚连接到地(低电平),当按下1号键时,在第一行按键1脚被连接到地(低电平)。由于第二、三列按键2脚没有接地(低电平),因此,判断识别出是1号键被按下。其它键号的判断识别以此类推。矩阵式键盘接口电路举例说明如下:设“1”号键被按下,分以下三步操作。①使P1.4~P1.7输出低电平,P1.0~P1.3为输入,读取P1.0—P1.3值为0111B。②使P1.0~P1.3输出低电平,P1.4~P1.7为输入,读取P1.4—P1.7值为0111B。③合并上述两个键值,得11101110B,即EEH,此即为“1”号键的键值。矩阵式键盘电路的行列编码未使用第三列第二列第一列第四行第三行第二行第一行1号键111011104号键111011017号键11101011*号键111001112号键110111105号键110111018号键110110110号键110101113号键101111106号键101111019号键10111011#号键10110111任务一电路?汇编语言指令(一)数据传送指令1、direct寄存器里面的数据传送(复制)到累加器A

指令书写格式:MOVA,direct

指令执行时间:1μs(12MHz时钟)例1MOV30H,#0C0H

;先在30H寄存器存入数据C0H。MOVA,30H

;把30H寄存器里面的数据传送(复制)到累加器A,累加器A里面的数据=C0H。

例2MOVP1,#0EEH;先在P1口存入数据EEH。MOVA,P1

;把P1口的数据传送(复制)到累加器A,累加器A里面的数据=EEH2、direct单元的数据传送(复制)到另一个direct单元

指令书写格式:MOVdirect,direct

指令执行时间:2μs(12MHz时钟)例3 MOV30H,31H;把31H单元的数据传送(复制)到30H单元,当31H单元里面的数据=EEH时,30H单元里面的数据=EEH。指令还有以下几种书写形式:MOVP0,31H;数据输出指令(可以产生随机输出数据)

MOV30H,P0;数据输入指令

MOVP0,P1;端口对端口的数据传送(复制)指令汇编语言指令3、direct寄存器里面的数据传送(复制)到Rn寄存器

指令书写格式:MOVRn,direct

指令执行时间:2μs(12MHz时钟)例4

MOVR0,30H;把30H寄存器的数据传送(复制)到R0寄存器,当30H寄存器的数据=01H时,R0寄存器的数据=01H。例5

MOVR0,P1;把P1口寄存器的数据传送(复制)到R0寄存器,当P1口的数据=30H时,R0寄存器的数据=30H。汇编语言指令4、@Ri间接寻址寄存器所指定的direct寄存器里面的数据传送(复制)到累加器A

指令书写格式:MOVA,@Ri

指令执行时间:2μs(12MHz时钟)例6MOV30H,#05H;先在30H寄存器存入数据05HMOVR1,#30H;然后把寄存器的地址号30H存入R1寄存器MOVA,@R1;当@R1指定了30H寄存器,那么30H寄存器里面的数据传送(复制)到累加器A,累加器A的数据=05H。汇编语言指令5、16位立即数据传送(复制)到DPTR寄存器

指令书写格式:MOVDPTR,#data16

指令执行时间:2μs(12MHz时钟)例7 MOVDPTR,#5FFH;把16位立即数据5FFH传送(复制)到DPTR寄存器,DPTR寄存器里面的数据=5FFH。注:DPTR寄存器是16位二进制数据寄存器,由于89C51单片机不能处理16位二进制数据,因此,使用了两个8位寄存器合并为一个16位二进制数据寄存器,两个8位寄存器分别是DPH寄存器和DPL寄存器。在程序中可以对DPTR寄存器的数据进行处理,也可以把它分为DPH和DPL两个寄存器单独处理。在例4-2-7中,DPTR寄存器里面的数据为5FFH,数据的高8位数05H存在DPH寄存器里面、数据的低8位数FFH存在DPL寄存器里面。◆(DPH)←#data(高8位:第8位~第15位存入DPH寄存器)◆(DPL)←#data(低8位:第0位~第7位存入DPL寄存器)汇编语言指令6、累加器A里面的数据与DPTR寄存器里面的数据相加之和,作为地址号码进行间接寻址,把数据表的数据传送(复制)到累加器A,也称为查表指令。指令书写格式:MOVCA,@A+DPTR指令执行时间:2μs(12MHz时钟)指令占用地址:3字节例8MOV

DPTR,#300H;先把数据表起始地址存入DPTR寄存器MOV

A,#01H

;然后把数据在数据表中的地址存入累加器AMOVCA,@A+DPTR

;数据在数据表中的地址号01H“加”数据表起始地址号300H等于301H,然后,读取数据表中301H地址的数据存入累加器A。汇编语言指令(二)算术运算指令1、direct寄存器里面的数据减1指令书写格式:DEC

30H指令执行时间:2μs(12MHz时钟)2、累加器A里面的数据加1指令书写格式:INC

A指令执行时间:2μs(12MHz时钟)例9MOV

A,#00H;先把数据00H存入累加器A。INC

A

;累加器A里面的数据加=00H+01H=01H。汇编语言指令(三)DB伪指令DB伪指令——用来按顺序定义数据表中数据的地址号。如:建立一个共阳极数码显示器0~9数字的二进制段编码表:例10

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,88H1位数码管显示的实现根据数码管的内部结构及显示原理,结合项目三中LED闪光灯的控制原理,只要在单片机的P0端口输出0~9中任意一个数字的编码,并反复执行操作,则数码管即可显示任意一位数字。1、设计程序流程图2位数码管显示的实现在1位数码管显示器实验中,若再并联一位数码管,由于单片机P0口输出的数字编码是一样的,所以我们发现两位数码管显示的数字是一样的,因此,为了让显示器的个位数和十位数能够独立显示各自的数字,必须在显示器显示个位数时关闭十位数显示,显示器显示十位数时关闭个位数显示,我们把这个过程称为扫描。要使显示器的个位数和十位数能够独立的显示各自的数字,就必须单独的控制它们的位引脚,在对显示器的个位数和十位数进行扫描时,由于单片机的扫描速度较快,我们无法看清楚显示器显示的数字,因此,每扫描1位显示器时,必须延时大约1000μs的时间。反复执行扫描操作,即可使两位数码管同时显示不同的数字。设计程序流程图所谓中断,就是打断正在进行的工作,转而去做另外一件事,然后回来继续完成原来做的事情。如学生在家做作业,此时听到电话铃声响起,学生暂停做作业去接电话,接完电话后继续做作业,这个过程就是中断以及中断处理的过程。做作业断点继续做作业主要任务接电话与来电话的人交谈执行主程序断点继续执行主程序主程序中断服务程序执行中断服务程序中断请求电话铃响中断响应中断返回中断过程示意中断系统(1)中断在单片机执行程序的过程中,由于突然发生某个事件,需要单片机暂时终止正在运行的程序,转移去及时处理该事件的问题,完成任务后,再返回到程序终止处(称为:断点)继续运行程序。(2)中断源能引起中断的信号源,可分为外部中断源和内部中断源。①外部中断0(P3.2脚):输入“低电平”或“脉冲下降沿”引起中断(进入中断的地址号为0003H)。②外部中断1(P3.3脚):输入“低电平”或“脉冲下降沿”引起中断(进入中断的地址号为0013H)。单片机中断的几个概念③定时/计数器T0(P3.4脚):内部计数寄存器的值等于“0”引起中断(进入中断的地址号为000BH)。④定时/计数器T1(P3.5脚),内部计数寄存器的值等于“0”引起中断(进入中断的地址号为001BH)。⑤串行通信口中断(进入中断的地址号为0023H)。◆接收数据RXD(P3.0脚):寄存器SCON的RI位的值等于“1”引起中断(模式0:每接收完成1组8位二进制数中断1次)。◆发送数据TXD(P3.1脚):寄存器SCON的TI位的值等于“1”引起中断(模式0:每发送完成1组8位二进制数中断1次)。中断源默认级别入口地址外部中断0最高0003H定时/计数器T0第2000BH外部中断1第30013H定时/计数器T1第4001BH串行口中断第50023H(3)中断服务程序产生中断时,对所发生的事件进行处理的程序。关中断保护现场中断服务关中断恢复现场开中断中断返回开中断断点地址由堆栈弹入PC硬件自动完成保护现场和恢复现场的过程中不允许中断,以免现场遭到破坏。保护和恢复现场之后的开中断是为了允许有更高级会的中断打断此中断服务程序。中断的完整过程中断控制系统中断控制是指单片机提供给程序员使用的控制中断的手段或方法。由编程人员对特殊功能寄存器TCON、SCON、IE、IP进行设定和管理,以便单片机实现人们需要的各种中断控制功能。(1)中断控制寄存器TCON的设置位数第7位第6位第5位第4位第3位第2位第1位第0位地址名TF1TR1TF0TR0IE1IT1IE0IT0地址号8FH8EH8DH8CH8BH8AH89H88HIE0:外部中断0请求标志位。IE1:外部中断1请求标志位。IT0:外部中断第0号的触发中断信号选择位,有两种触发中断的信号。◆设置:IT0=0时,单片机的P3.2脚出现低电平立即发生中断;IT0=1时,单片机的P3.2脚出现1个脉冲跳变信号(高变低的下降沿)立即发生中断。IT1:外部中断第1号的触发中断信号选择位,有两种触发中断的信号。位数第7位第6位第5位第4位第3位第2位第1位第0位地址名TF1TR1TF0TR0IE1IT1IE0IT0地址号8FH8EH8DH8CH8BH8AH89H88HTF0:使用T0定时器/计数器时,寄存器发生溢出的标志位(TF0=1表示寄存器已存满数据发生溢出,同时提出中断申请,执行中断服务程序。TF1:使用T1定时器/计数器时,寄存器发生溢出的标志位(TF1=1表示寄存器已存满数据发生溢出,同时提出中断申请,执行中断服务程序。◆16位寄存器的溢出值=65536(发生溢出)◆13位寄存器的溢出值=8192(发生溢出)◆8位寄存器的溢出值=256(发生溢出)TR0:T0定时器/计数器的启动或停止控制位◆TR0=1启动T0定时器/计数器工作;TR0=0停止T0定时器/计数器工作。TR1:T1定时器/计数器的启动或停止控制位◆TR1=1启动定时器/计数器T0工作;TR1=0停止T1定时器/计数器工作。①PS:串行口中断口优先级控制位,PS=1,串行口中断声明为高优先级中断,PS=0,串行口定义为低优先级中断。②PT1:定时器1优先级控制位。PT1=1,声明定时器1为高优先级中断,PT1=0定义定时器1为低优先级中断。③PX1:外中断1优先级控制位。PT1=1,声明外部中断1为高优先级中断,PX1=0定义外部中断1为低优先级中断。④PT0:定时器0优先级控制位。PT1=1,声明定时器0为高优先级中断,PT1=0定义定时器0为低优先级中断。⑤PX0:外中断0优先级控制位。PT1=1,声明外部中断0为高优先级中断,PX1=0定义外部中断0为低优先级中断。位数第7位第6位第5位第4位第3位第2位第1位第0位地址名

PSPT1PX1PT0PX0地址号

BCHBBHBAHB9HB8H(3)中断源优先级控制寄存器IP的设置51单片机中断系统结构EA在实时控制系统中,经常需要有实时时钟以实现定时、延时控制,也常需要有计数功能以实现对外界脉冲(事件)进行计数。定时/计数器是面向控制领域的单片机系统的一项极为重要的功能。AT89C51单片机有两个16位的定时器/计数器T0和T1,它们的内部结构是完全相同的,T0和T1分别使用两个独立的16位寄存器进行计数。(1)T0的16位寄存器:由TH0(高8位)和TL0(低8位)两个8位的特殊功能寄存器组成。(2)T1的16位寄存器:由TH1(高8位)和TL1(低8位)两个8位的特殊功能寄存器组成。(一)定时器/计数器的结构二、定时器/计数器(1)设置工作方式寄存器TMOD位数第7位第6位第5位第4位第3位第2位第1位第0位地址名GATEC/TM1M0GATEC/TM1M0

用高4位来设置T1的工作方式用低4位来设置T0的工作方式①GATE:设置定时/计数器是直接启动还是间接启动。◆设置GATE=0直接启动定时器。TR1=1启动T1定时器;TR1=0停止T1定时器TR0=1启动T0定时器;TR0=0停止T0定时器◆设置GATE=1通过外部中断源(P3.2脚)或(P3.3脚)为高电平时,间接启动定时器(只有当INT0=1和TR0=1才能启动T0定时器、只有当INT1=1和TR1=1才能启动T1定时器)。②C/T:设置选择使用定时器还是计数器。◆设置C/T=0选择使用定时器◆设置C/T=1选择使用计数器(二)定时器/计数器的参数设置③M1、M0:选择工作方式。定时器/计数器有4种工作方式,分别称为:方式0、方式1、方式2、方式3。M1M0工作方式定时器/计数器功能说明位数值00方式0使用13位寄存器213=819201方式1使用16位寄存器216=6553610方式2使用8位寄存器28=25611方式3T0的16位寄存器分成两个独立的8位寄存器使用28=256方式0和方式1的区别仅在于计数器的位数不同,方式0为13位,而方式1则为16位。工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。工作方式2就针对这个问题而设置,它具有自动重装载功能,即自动加载计数初值。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。在工作方式3模式下,定时/计数器0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以作计数器使用,也可以作为定时器使用。TH0只能作为简单的定时器使用。由于TL0既能作定时器也能作计数器使用,而TH0只能作定时器使用而不能作计数器使用,因此在方式3模式下,定时/计数器0可以构成二个定时器或者一个定时器和一个计数器。(三)定时器/计数器初始值的计算方法(1)定时功能的初值计算选择定时功能时,由内部供给计数脉冲,是对机器周期进行计数。假设用t表示定时时间,对应的初始值用χ表示,所用计数器位数为n,设系统时钟频率为fosc,则它们满足下列关系式:(2n-χ)×12/fosc=tχ=2n-fosc/12×t(2)计数功能的初值计算选择计数功能时,计数脉冲由外部T0或T1端引入,是对外部(事件)脉冲进行计数,因此计数值根据要求确定。N是所用计数器的位数,它由TMOD中M1和M0两位设置确定。其计数初值:χ=2n-计数值(四)定时器/计数器的赋值方法(1)工作方式0的赋值方法指令:MOV TH0,#(8192-计数值)/32指令:MOV TL0,#(8192-计数值)MOD32(2)工作方式1的赋值方法指令:MOV TH0,#(65536-需要定时的时间)/256指令:MOV TL0,#(65536-需要定时的时间)/256(3)工作方式2的赋值方法指令:MOV TH0,#(256-需要定时的时间)指令:MOV TL0,#(256-需要定时的时间)(4)工作方式3的赋值方法只有定时器/计数器T0可以工作在方式3,寄存器TH0只能用来作定时器(不能作计数器)因此,T0可以构成两个定时器或者一个定时器和一个计数器。赋值方法与工作在方式2相同,溢出值=256。汇编语言指令功能(一)堆栈寄存器在程序执行过程中,如果程序发生中断,必须使用堆栈寄存器来保护正在处理的数据,然后,才能去执行中断后的功能程序。(1)设置堆栈寄存器如果需要使用16个堆栈寄存器,可以在初始化程序中把堆栈寄存器起始地址号设置为6FH(70H~7FH共16个地址)。堆栈寄存器起始地址号设置指令: MOVSP,#6FH(2)在进入中断服务程序后,首先使用压栈指令来保护正在处理的数据,然后,才能执行中断功能程序。在退出中断服务程序前,使用弹栈指令来恢复数据,这个过程称为:保护现场和恢复现场。数据压栈指令:PUSHdirect;direct可以是累加器A,PSW等。数据弹栈指令:POP direct中断子程序返回指令:RETI(3)压栈和弹栈必须按照“先入后出”的原则。数据压栈和弹栈指令必须成对出现。位操作指令(1)位控制转移指令①寄存器位地址bit里面的数据等于“1”时,按照指令中给定的目的地址号转移;位地址bit里面的数据等于“0”时,顺序往下执行指令。指令书写格式:JBbit,rel(rel需要转移到达的目的地址号)指令执行时间:2μs(12MHz时钟)例2 JBP1.0,A1B1;判断P1口第0位的数据是否等“1”,等于“1”时,按照给定的目的地址号A1B1转移,等于“0”时,顺序往下执行指令。②寄存器的位地址bit里面的数据等于“0”时,按照指令中给定的目的地址号转移;位地址bit里面的数据等于“1”时,顺序往下执行指令。指令书写格式:JNBbit,rel(rel需要转移到达的目的地址号)指令执行时间:2μs(12MHz时钟)例3 JNBP1.0,A1B1;判断P1口第0位的数据是否等于“0”,等于“0”时,按照给定的目的地址号A1B1转移,等于“1”时,顺序往下执行指令。例4独立式按键扫描子程序:E1A1: JB P1.0,E1A2 ;判断是否"0号键" MOV 30H,#0 ;按键缓冲寄存器存入“0” JNB P1.0,$ ;判断是否放开按键

LCALL A1B0 ;调用显示子程序E1A2: JB P1.1,E1A3 ;判断是否"1号键" MOV 30H,#1 ;按键缓冲寄存器存入“1” JNB P1.1,$ ;判断是否放开按键

LCALL A1B0 ;调用显示子程序E1A3: RET(2)位置位指令①寄存器位地址的数据置“1”指令书写格式:SETB bit(bit是位地址号)指令执行时间:1μs(12MHz时钟)例5 SETB 00H;位寻址20H寄存器的第0位数据置“1”,如果原来的数据=0,执行指令后数据=1。②寄存器位地址的数据清“0”指令书写格式:CLR bit(bit是位地址号)指令执行时间:1μs(12MHz时钟)例6 CLR P2.0;P2口的P2.0位的数据数据清“0”,如果原来的数据=1,执行指令后数据=0。有条件的控制转移指令(1)累加器A里面的数据与立即数据进行比较,数据不相等时按照给定的目的地址号转移;数据相等时继续往下执行指令。指令书写格式:CJNEA,#data,rel(rel━是需要转移到达的目的地号)指令执行时间:2μs(12MHz时钟)◆A里面的数据≠#data发生转移◆A里面的数据=#data顺序执行程序例7 MOV A,#0 ;先把数据“0”存入累加器A A1A1: INC A ;累加器A里面的数据加1 CJNE A,#9,A1A1;累加器A里面的数据与数据“9”进行比较,当两个数据不相等时,指令会按照给定的目的地址号A1A1转移;当两个数据相等时,程序继续往下执行指令。(2)@Ri间接寻址寄存器所指定的direct寄存器里面的数据与立即数据进行比较,数据不相等时按照给定的目的地址号转移,数据相等时继续往下执行其它指令。指令书写格式:CJNE@Ri,#data,rel(rel━需要转移到达的目的地号)指令执行时间:2μs(12MHz时钟)◆@Ri指定的direct寄存器里面的数据≠#data发生转移◆@Ri指定的direct寄存器里面的数据=#data顺序执行程序例8 MOV 30H,#0 ;先把数据“0”存入30H寄存器 A1A1: INC 30H ;30H寄存器里面的数据加1 MOV R1,#30H ;指定30H寄存器 MOV @R1,#9,A1A1;@R1指定的30H寄存器里面的数据与数据“9”进行比较,当两个数据不相等时,按照给定的目的地址号A1A1转移;当两个数据相等时,程序继续往下执行指令。(四)算术运算指令(1)累加器A里面的数据除以B寄存器里面的数据指令书写格式:DIV AB指令执行时间:4μs(12MHz时钟)◆A←(A)÷(B)商数存入累加器A◆B←(A)÷(B)余数存入B寄存器(2)累加器A里面的数据“乘以”B寄存器里面的数据指令书写格式:MUL AB指令执行时间:8μs(6MHz时钟)注:指令规定,只有累加器A数据和B寄存器才能进行乘法运算,因此,在做乘法运算时,必须把需要运算的数据存入累加器A和B寄存器才能进行乘法运算。运算结果为16位二进制数存回累加器A和B寄存器:◆(A)←(A)×(B)乘积的低8位二进制数存入累加器A◆(B)←(A)×(B)乘积的高8

温馨提示

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

评论

0/150

提交评论