1、项目三:一位数字、符号的显示,项目目标 项目任务 项目分析 项目预备知识 项目实施,项目目标通过单片机控制1位数码管显示不同的数字和符号,学会使用MCS-51单片机芯片的P0口进行输出控制,并掌握数码管的编码方法,学习汇编程序的分析方法,并能熟练运用MOVC等基本指令。,项目任务要求应用AT89C51芯片,控制一位数码管显示数字0-9、英文字母A-F及特定符号。设计单片机控制电路并编程实现。项目分析将单片机的P0口与1位数码管进行有序连接,利用P0口输出数据的变化,控制七段LED数码管各段的亮灭,从而显示不同的数字、字母和符号。,项目实施,一、硬件电路设计二、 控制程序的编写三、程序仿真与调试
2、,1、16位数传指令(MOV DPTR,#data16) 汇编指令 指令功能MOV DPTR,#data16 将16位立即数送入DPTR寄存器中 这是51单片机指令系统中唯一的一条16位数传送指令,指令中的数据指针DPTR可以看作两个8位的寄存器DPH、DPL,该指令功能是把16位立即数#data16送入DPTR中,其中高8位(D15-D8)送DPH,低8位(D7-D0)送DPL。这条指令用于将程序存储器或数据存储器的地址送入DPTR,以实现对程序存储器或数据存储器的访问。例如,指令“MOV DPTR,#236AH”,是将立即数236AH传送到DPTR中,指令执行后,(DPH)=23H,(DP
3、L)=6AH。,项目预备知识:汇编指令学习,2、程序存储器的读指令(MOVC)汇编指令 指令功能MOVC A,A+DPTR 将(A)+(DPTR)计算得到的16位数作为程序存储器的单元地址,将此地址单元中的内容取出送入A中MOVC A,A+PC 将(A)+(PC)计算得到的16位数作为程序存储器的单元地将此地址单元中的内容取出送入A中,注意:读ROM要用MOVC指令。,例如 已知A=30H,DPTR=3000H,程序存储器单元(3030H)=50H,执行 MOVC A, A+DPTR 后,A=50H。,这两条指令的功能都是把程序存储器某单元的内容传送到累加器A。对程序存储器的访问只能采用变址寻
4、址方式。指令执行后不改变基址寄存器的内容。这两条指令通常也被称为查表指令,常用此指令来查找一个已存放在ROM中的表格。这些表格数据往往用伪指令 DB,DW 等定义在程序中。,MOV A,#3MOV DPTR,#1000HMOVC A,A+DPTR1000H: DB 3FH,06H,5BH, 4FH DB 66H,6DH, 7DH,07H DB 7FH, 6FH,77H,7CH DB 39H,5EH 79H,71H DB 73H,3EH,31H,6EH END,例 如,MOV A,#3MOV DPTR,#TABMOVC A,A+DPTRTAB: DB 3FH,06H,5BH, 4FH DB 66
5、H,6DH, 7DH,07H DB 7FH, 6FH,77H,7CH DB 39H,5EH 79H,71H DB 73H,3EH,31H,6EH END,MOV和MOVC指令都属于送数指令,都可以实现赋值和数据传送功能,但不同的是:MOV指令传送的数据在片内数据存储器内部进行,既可以用此指令向片内数据存储器的单元或某些位“写”数据,又可以将片内数据存储器的单元或某些位的内容“读”出去,数据的传送是“双向”的;MOVC指令是将程序存储器的单元中的数据“读”到片内数据存储器中进行相关的操作,由于程序存储器存储的程序只能由烧写器或下载线写入,因此MOVC指令是“单向”的。另外,MOV指令操作的数据即
6、可以是特定的,也可以是随机的;但是MOVC指令读取的数据是根据程序的执行需要事先设定好的,不然的话,程序执行的结果就会出错。,注MOV指令与MOVC指令的使用特点:,3、控制转移指令(SJMP)汇编指令 指令功能SJMP rel 将程序跳转到(PC)+2+rel处执行本条指令给出的是8位的rel,因此可转移的范围只有256b,即当前PC的+127b128b。若写作“SJMP ”,则重复执行本条指令,进入“原地踏步”状态,进入程序等待。,4、伪指令(DB定义字节伪指令)格式: 标号: DB 字节形式的数据表定义字节伪指令DB,把字节形式的数据表中的数据,依次存放到以标号为起始地址的程序存储器的存
7、储单元中,数据表中的数可以是一个8位二进制数,或者是用逗号分开的一组8位二进制数,数据的给出形式可以是二进制、十六进制、十进制和ASCII码等多种形式表示。,DB 8位二进制数表功能: 把 8 位二进制数表依次存入从标号开始的连续的存储单元中。 格式中, 标号区段可有可无, DB指令之后的 8 位二进制数表是字节常数或用逗号隔开的字节串, 也可以是用引号括起来的ASCII码字符串 (一个ASCII字符相当于一个字节)。,ORG 2000HDB 38H, 7FH, 80H,45H, edHORG伪指令指定了首地址为1000H, 而DB伪指令是将其后的二进制数表38H, 7FH, 80H依次存放在
8、1000H, 1001H, 1002H 3 个连续单元之中。,例:,(一)设计思路利用AT89C51单片机芯片的P0口控制1位数码管进行数字、字母和符号的显示。常见的七段LED数码管,是发光二极管的集成电路,根据发光二极管的连接方式不同,可分为共阳极型和共阴极型。控制数码管显示数字或字符,只要在发光二极管两端施加合适的电压,对应段即可点亮。将数码管的8个控制引脚与单片机的P0口进行对应连接,结合单片机P0口的输出信号,可以实现数码管的控制。,一、硬件电路设计,(二)电路设计 1、P0口结构,左图给出了P0口中一位的位结构示意图。P0口中的每一位都可以作为准双向通用I/O口使用,用于传送数据和地
9、址信息。在系统需要扩展存储器时,P0口还可以作地址/数据线分时复用,使用时应注意:(1)、P0作为一般端口时,V1就永远的截止,V2根据输出数据0导通和1截止。(2)、 P0作为地址数据总线时,V1和V2是一起工作的,构成推挽结构。(3)、在某个时刻,P0口输出的是作为总线的地址数据信号还是作为普通I/O口的电平信号,是依靠多路开关MUX来切换的。,P0.0P0.7:双向I/O (内置场效应管上拉)访问外部程序存储器时分时作为双向8位数据口和 输出低8位地址复用口;不接外部程序存储器时可作为 8位准双向I/O口使用。,引脚P0.X,2,1,D,Q,CK,/Q,读引脚,读锁存器,写锁存器,内部总
10、线,地址/数据,控制,3,4,Vcc,2,1,D,Q,CK,/Q,读引脚 =1,读锁存器=0,写锁存器,内部总线,地址/数据,控制,引脚P0.X,3,4,控制=0 时,此脚作输入口(事先必须对它写“1”),0,0,1,0,0,截止,截止,=0,Vcc,(1)P0.0P0.7做输入口,事先必须先写1,然后再读引脚的状态。,2,1,D,Q,CK,/Q,读引脚 =0,读锁存器=0,写锁存器,内部总线,地址/数据,控制,引脚P0.X,3,4,控制=0 时,此脚作输出口(外接上拉电阻),0,0,1,0,0,截止,截止,=0,Vcc,(2)P0.0P0.7作为输出口,引脚应外接上拉电阻。,Vcc,R(外接
11、),输出=1,2,1,D,Q,CK,/Q,读引脚 =0,读锁存器=0,写锁存器,内部总线,地址/数据,控制=1,引脚P0.X,3,4,控制=1时,此脚作地址/数据复用口:(1)输出地址/数据 =0 时,1,0,1,1,=0,导通,截止,=0,Vcc,(3)P0.0P0.7作为双向8位数据口和输出低8位地址复用口,【 输出0】,(4)P0.0P0.7作为双向8位数据口和输出低8位地址复用口,2,1,D,Q,CK,/Q,读引脚 =0,读锁存器=0,写锁存器,内部总线,引脚P0.X,3,4,控制=1时,此脚作地址/数据复用口:(2)输出地址/数据 =1 时,1,1,0,0,=1,截止,导通,=1,地
12、址/数据,控制=1,Vcc,【输出1】,2、数码管控制电路,七段LED数码管由七个发光二极管做成条状,按图c所示排列而成,除显示数字的七段之外还有一个小数点dp,实为八段显示。根据LED的连接方式不同,分为共阴极和共阳极两种。对于共阴极连接,如图a所示,只有当公共端(COM)接低电平,阳极接高电平时对应的字段才点亮;而对于共阳极连接,如图b所示,只有当公共端(COM)接高电平,阴极接低电平时对应的段才点亮。公共端(COM)作为数码管的选通控制,称为位选码。,要使七段数码管显示数字,必须提供段选码。段选码又称字形码,是指ag七个电平的取值组合。例如,采用共阴极连接,若要显示“7”的字型,则a、b
13、、c端接高电平,而d、e、f、g端接低电平,因此有a=b=c=1, d=e=f=g=0。段选码即可以用软件方法得到,也可以用硬件译码电路的方法得到。本设计选用共阴极的七段数码管,与单片机芯片的连结采用a图的方式。,根据以上分析,得到共阴极数码管的段码表如表所示。表中共阳极数码管的段码读者可以自己填写完成。,综合以上的分析,得到下图所示电路原理图。,(三)材料表 从原理图可以得到实现本项目所需的元器件。,(一)绘制程序流程图 本项目中要显示的数字或符号的段码在编写程序时给出,故使用查表程序结构形式实现。,二、控制程序的编写,(二)编制汇编源程序,程序执行过程,ORG 0000HLJMP MAIN
14、3ORG 0300H MAIN3: MOV A,#3MOV DPTR,#TABMOVC A,A+DPTRMOV P0,ASJMP $ORG 0E00HTAB: DB 3FH,06H,5BH, 4FH DB 66H,6DH, 7DH,07H DB 7FH, 6FH,77H,7CH DB 39H,5EH 79H,71H DB 73H,3EH,31H,6EH END,三 、程序PROTUES仿真与调试,一、计算题: 1、将下列十进制数转换成二进制数: (A)24 (B)96 (C)127 (D)256 (E)1024 2、把下列十六进制数转换为二进制数和十进制数: (1)10AH (2)EFH (3)40DC3H (4)0FFH 二、编程及简答: 1、仔细观察7段数码管共阴极与共阳极段码的区别,能发现什么规律? 2、设计一程序,使LED显示器依次显示37之间的数字,时间间隔为1秒。3、对ROM执行数据传送的指令是单向的还是双向的?,项 目 测 试,