51单片机常用接口_第1页
51单片机常用接口_第2页
51单片机常用接口_第3页
51单片机常用接口_第4页
51单片机常用接口_第5页
已阅读5页,还剩84页未读, 继续免费阅读

下载本文档

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

文档简介

第8章51单片机常用接口主要内容:本章介绍组成51单片机应用系统的常见外部接口电路,主要包含存储器扩展,I/O口扩展,数码管接口和键盘接口。重点:数码管、键盘和51单片机接口12章节8.151单片机的最小系统8.2存储器扩展8.3输入/输出口扩展8.4LED显示器与51单片机接口8.5键盘与51单片机的接口8.6行程开关、晶闸管、继电器与51单片机的接口8.1MCS-51单片机的最小系统

所谓最小系统,是指一个真正可用的单片机最小配置系统。对于单片机内部资源已能满足系统需要的,可直接采用最小系统。MCS-51单片机根据片内有无程序存储器最小系统分两种情况。8.1.18051/8751的最小系统5该最小系统的特点如下:(1) 由于片外没有扩展存储器和外设,P0、P1、P2、P3都可以作为用户I/O接口使用。(2) 片内数据存储器有128B,地址空间为00H~7FH,没有片外数据存储器。(3) 内部有4KB的程序存储器,地址空间为0000H~0FFFH,没有片外程序存储器,应接高电平。(4) 可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。8.1.28031的最小系统7该最小系统的特点如下:(1) 由于P0、P2在扩展程序存储器时作为地址线和数据线,不能作为I/O线,因此,只有P1、P3作为用户I/O接口使用。(2) 片内数据存储器同样有128B,地址空间为00H~7FH,没有片外数据存储器。(3) 内部无程序存储器,片外扩展了程序存储器,其地址空间随芯片容量不同而不一样。图8.2中使用的是2764芯片,容量为8KB,地址空间为0000H~1FFFH。由于片内没有程序存储器,只能使用片外程序存储器,

只能接低电平。(4) 同样可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。8.2存储器扩展8.2.1半导体存储器概述1.只读存储器〔ROM-ReadOnlyMemory〕第一类:MROM-掩膜型ROM

第二类:PROM-可编程ROM

第三类:EPROM-可擦除的PROM

第四类:E2PROM-电擦除的PROM

第五类:FlashMemory-快擦型存储器

2.随机读写存储器〔RAM-RandomAccessMemory〕第一类:静态RAM-SRAM〔StaticRAM〕第二类:动态RAM-DRAM〔DynamicRAM〕第三类:非易失性RAM-NVRAM〔NonVolativeRAM〕3.典型ROM芯片276410D7~D0:8根数据线A12~A0:13根地址线:片选信号:输出允许信号:编程控制信号Vpp:编程电压Vcc:工作电压,接+5V电源;GND:地引脚:4.典型RAM芯片626412I/O0~I/O7:8根输入输出数据线A12~A0:13根地址线:片选信号:输出允许信号,低电平有效。:写允许信号,低电平有效。CE2:片选信号2Vcc:工作电压,接+5V电源;GND:地引脚:8.2.2存储器扩展的一般方法单片机三总线与存储器芯片的三总线对应连接1.数据线的连接单片机的数据总线(P0.0~P0.7)

存储器芯片的数据线D0~D72.控制线的连接ROM:输出允许控制线单片机

数据存储器RAM:单片机存储器芯片

3.地址线的连接存储器芯片单片机地址总线(A0~A13)地址(A0~A13)

剩余地址总线译码片选信号线

译码有两种方法:局部译码法和全译码法。那么:A15=0时,该芯片的地址是~,即1000H~17FFH。A15=1时,该芯片的地址是~,即9000H~97FFH。164.扩展存储器所需芯片数目确实定假设所选存储器芯片的字长与单片机的字长一致,那么只需扩展容量。所需芯片数目按下式确定:假设所选存储器芯片字长与单片机字长不一致,那么不仅需要扩展容量,还需要字扩展。所需芯片数目按下式确定:8.2.3程序存储器扩展1.单片程序存储器的扩展其8个重叠的地址范围为:(1)0000000000000000~,即0000H~1FFFH;~,即2000H~3FFFH;~,即4000H~5FFFH;~,即6000H~7FFFH;~,即8000H~9FFFH;~,即A000H~BFFFH;~,即C000H~DFFFH;~,即E000H~FFFFH。2.多片程序存储器的扩展其两片的地址空间分别为:第一片:00000000000000000~,即0000H~1FFFH; ~,即2000H~3FFFH; ~,即4000H~5FFFH; ~,即6000H~7FFFH。第二片~,即8000H~9FFFH; ~,即A000H~BFFFH; ~,即C000H~DFFFH; ~,即E000H~FFFFH。其地址空间分别是:00000000000000000~,即0000H~1FFFH;~,即2000H~3FFFH;~,即4000H~5FFFH;~,即6000H~7FFFH。8.2.4数据存储器扩展假设P2.7为低电平0,那么两片6264芯片的地址空间为:第一片:~,即4000H~5FFFH;第二片:~,即2000H~3FFFH。假设P2.7为高电平1,那么两片6264芯片的地址空间为:第一片:~,即C000H~DFFFH;第二片:~,即A000H~BFFFH。8.3输入/输出口扩展8.3.1简单I/O接口扩展通常通过数据缓冲器、锁存器来扩展简单I/O接口。例如,74LS373、74LS244、74LS273、74LS245等芯片都可以作简单I/O扩展。74LS373引脚与内部结构图74LS244引脚与内部结构图用74LS373和74LS244扩展的并行I/O接口如果要通过L0~L7发光二极管显示K0~K7开关的状态,那么相应的汇编程序为:汇编语言程序

ORG0000H LJMPSTART ORG0030HSTART: MOVDPTR,#7FFFH MOVXA,@DPTR ;读74LS244扩展的输入口

MOVX@DPTR,A ;输出到74LS373扩展的输出口

SJMPSTART END27C语言程序:#include<reg51.h>#include<absacc.h>//定义绝对地址访问#defineucharunsignedcharvoidmain(void){uchar

i;while(1) {

i=XBYTE[0x7fff]; //读74LS244扩展的输入口

XBYTE[0x7fff]=i; //输出到74LS373扩展的输出口

}}8.3.2可编程I/O接口扩展(8255A)1.8255A的结构与功能3个可编程的并行I/O端口:PA口、PB口和PC口。A口有3种工作方式:无条件I/O方式、选通I/O方式和双向选通I/O方式。B口有两种工作方式:无条件I/O方式和选通I/O方式。A1A0I/O操作00001读A口寄存器内容到数据总线00101读B口寄存器内容到数据总线01001读C口寄存器内容到数据总线00010数据总线上内容写到A口寄存器00110数据总线上内容写到B口寄存器01010数据总线上内容写到C口寄存器01110数据总线上内容写到控制口寄存器2.8255A的引脚信号31引脚信号线。D7~D0:三态双向数据线,与单片机的数据总线相连,用来传送数据信息。:片选信号线,低电平有效,用于选中8255A芯片。:读信号线,低电平有效,用于控制从8255A端口存放器读出信息。:写信号线,低电平有效,用于控制向8255A端口存放器写入信息。A1,A0:地址线,用来选择8255A的内部端口。PA7~PA0:A口的8根I/O信号线,用于与外部设备连接。PB7~PB0:B口的8根I/O信号线,用于与外部设备连接。PC7~PC0:C口的8根I/O信号线,用于与外部设备连接。RESET:复位信号线。VCC:+5V电源线。GND:地信号线。3.8255A的控制字1) 工作方式控制字2) C口按位置位/复位控制字4.8255A的工作方式1) 方式0(1) 具有两个8位端口(A、B)和两个4位端口(C口的高4位和C口的低4位)。(2) 任何一个端口都可以设定为输入或者输出。(3) 每一个端口输出时锁存,而输入时不锁存。特点:方式0输入/输出时没有专门的应答信号,通常用于无条件传送。2) 方式1A口和B口作为数据I/O口,C口用作I/O的应答信号。(1) 方式1输入。:外设送给8255A的“输入选通〞信号IBF:8255A送给外设的“输入缓冲器满〞信号INTR:8255A发送给CPU的“中断请求〞信号INTE:8255A内部为控制中断而设置的“中断允许〞信号(2) 方式1输出。:8255A送给外设的“输出缓冲器满〞信号:外设送给8255A的“应答〞信号INTR:8255A送给CPU的“中断请求〞信号INTE:8255A内部为控制中断而设置的“中断允许〞信号3) 方式25.8255A与MCS-51单片机的接口1) 硬件接口8255A的A口、B口、C口和控制口的地址分别是7F00H、7F01H、7F02H和7F03H〔高8位地址线未用的取1,低8位地址线未用的取0〕。2) 软件编程A口接开关K0~K7,B口接发光二极管L0~L7,要求从A口读入开关状态通过B口显示出来。8255A的工作方式控制字为10000010B〔82H〕

40汇编程序段:

ORG0000H LJMPSTART ORG0030HSTART:MOVA,#82H ;8255A初始化,B口方式0输入,A口方式0输出

MOVDPTR,#7F03H ;8255A控制口地址

MOVX@DPTR,A L1: MOVDPTR,#7F01H ;8255A的B口地址

MOVXA,@DPTR ;从B口输入

MOVDPTR,#7F00H ;8255A的A口地址

MOVX@DPTR,A ;从A口输出

SJMPL1 END41C语言程序:#include<reg51.h>#include<absacc.h>//定义绝对地址访问#defineuchar unsignedcharvoidmain(void){

uchar

i;XBYTE[0x7f03]=0x82; //8255A初始化,B口方式0输入,A口方式0输出

while(1) {

i=XBYTE[0x7f01]; //从B口输入

XBYTE[0x7f00]=i; //从A口输出

}}外观共阴连接共阳连接显示的根本原理:1.公共端有效〔选通LED显示器〕 2.另一端送相应的编码〔字段码〕8.4MCS-51单片机与LED显示器接口8.4.1LED显示器的根本结构与原理8段发光管控制端与字节的关系。3FH06H5BH显示字符共阴极字段码共阳极字段码显示字符共阴极字段码共阳极字段码03FHC0HC39HC6H106HF9HD5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8HY6EH91H87FH80HL38HC7H96FH90H8.FFH00HA77H88H“灭”00FFHB7CH83H………………8.4.2LED数码管显示器使用的主要问题1.译码方式译码方式是指由显示字符转换得到对应的字段码的方式。对于LED数码管显示器,通常的译码方式有硬件译码方式和软件译码方式两种。共阴极一位十六进制数——7字段码转换芯片MC144951〕硬件译码方式472〕软件译码方式用MOVCA,@A+DPTR构造的查表程序:ORG0200HCONVERT:MOVDPTR,#TAB;DPTR指向表首地址MOVA,R2 ;转换的数放于AMOVCA,@A+DPTR;查表指令转换MOVR2,ARETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,67H,77H,7CH,39H,5EH,79H,71H;显示码表软件译码方式就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码。译码程序通常为查表程序,软件开销较大,但硬件线路简单。2.LED数码管的显示方式----静态显示和动态显示1〕静态显示方式公共端直接接地(共阴极)或接电源(共阳极)每个数码管的段选线与一组I/O接口线相连。特点:每个数码管一直显示。2〕动态显示方式每个数码管的公共端由一根I/O线控制。所有数码管的段选线与一组I/O接口线并连在一起。特点:显示为逐个显示。段码线位码线8.4.3LED显示器与单片机的接口1.硬件译码静态显示相应的汇编指令如下:MOVP1,#00100001B ;在第一个数码管显示“1〞MOVP1,#00010010B ;在第二个数码管显示“2〞2.软件译码动态显示A口、B口、C口和控制口的地址分别为7F00H、7F01H、7F02H和7F03H〔高8位地址线未用的取1,低8位地址线未用的取0〕图8.27软件译码动态显示电路的程序如下(设8个数码管的从左到右显示缓冲区为片内RAM的50H~57H单元)。汇编语言程序:ORG0000HLJMPMAINORG0100HMAIN:MOVA,#0 ;显示缓冲区50H~57H单元初始化为0~7 MOVR2,#8 MOVR0,#50HLOOP:MOV@R0,A INCR0 INCA DJNZR2,LOOPLOOP1:LCALLDISPLAY ;调用显示子程序

SJMPLOOP1 SJMP$;显示子程序DISPLAY:MOVA,#10000000B;8255初始化 MOVDPTR,#7F03H ;使DPTR指向8255控制存放器端口 MOVX@DPTR,A MOVR0,#57H ;动态显示初始化,使R0指向缓冲区首地址 MOVR3,#7FH ;首位位选字送R3 MOVA,R3LD0:MOVDPTR,#7F01H ;使DPTR指向PB口 MOVX@DPTR,A ;从PB口送出位选字 MOVDPTR,#7F00H ;使DPTR指向PA口 MOVA,@R0 ;读要显示数 ADDA,#0DH ;调整距离段选码表首的偏移量 MOVCA,@A+PC ;查表取得段选码 MOVX@DPTR,A ;段选码从PA口输出 ACALLDL1 ;调用1ms延时子程序 DECR0 ;指向缓冲区下一单元 MOVA,R3 ;位选码送累加器A JNBACC.0,LD1 ;判断8位是否显示完毕,显示完返回 RRA ;未显示完,把位选字变为下一位选字 MOVR3,A ;修改后的位选字送R3 AJMPLD0 ;循环实现按位序依次显示LD1:RETTAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;字段码表 DB7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1: MOVR7,#02H ;延时子程序DL: MOVR6,#0FFHDL0: DJNZR6,DL0 DJNZR7,DL RET END软件译码动态显示C语言程序如下:#include<reg51.h>#include<absacc.h> //定义绝对地址访问#defineucharunsignedchar#defineuintunsignedintvoiddelay(uint); //声明延时函数voiddisplay(void); //声明显示函数uchar

disbuffer[8]={0,1,2,3,4,5,6,7};

//定义显示缓冲区voidmain(void){XBYTE[0x7f03]=0x80;//8255A初始化while(1){display(); //设显示函数}}//***********显示函数***********voiddisplay(void) //定义显示函数{uchar

codevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0~F的字段码表uchar

chocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//位选码表uchar

i,p,temp;for(i=0;i<8;i++){temp=chocode[i];//取当前的位选码XBYTE[0x7f01]=temp;//送出位选码p=disbuffer[i];//取当前显示的字符temp=codevalue[p];//查得显示字符的字段码XBYTE[0x7f00]=temp;//送出字段码delay(20);//延时1ms}}//************延时函数************voiddelay(uinti) //延时函数{uintj;for(j=0;j<i;j++){}}8.5MCS-51单片机与键盘的接口8.5.1键盘概述1.键盘的根本原理2.抖动的消除硬件消抖软件消抖59硬件消抖软件消抖利用延时程序消除抖动。3.键盘的分类分两类:独立式键盘和行列键盘。处理简单,直接判并口线。每个键占用一根并口线,键位多时占用并口线多。用于键位较少的情况。特点:独立式键盘行列键盘—矩阵键盘。矩阵键盘的结构图键位分布在行列交叉点上。占用并口线少,键位越多越明显。特点:1〕键位的编码矩阵键盘的处理:键位的编码和键位的识别。(a)二进制组合编码(b)顺序排列编码编码=行首码+列号。行线编码和列线编码组合2〕键位的识别两步:第一步是首先检测键盘上是否有键按下;第二步是识别哪一个键按下。(1) 检测键盘上是否有键按下的处理方法(2) 识别键盘中哪一个键按下的处理方法逐列扫描全扫描8.4.2独立式键盘与单片机的接口65汇编语言程序:ORG 0000H LJMP KEYORG 0100HKEY: MOV P1,#0FFHKEY0: JB P1.0,KEY1 ;如果K0没有按下检测K1 LCALL DEL10MS ;延时消抖 JB P1.0,KEY1 ;再检测,判断是否为干扰 CLR P2.0 ;K0按下,实现K0的相应程序KEY1: JB P1.1,KEY2 ;如果K1没有按下检测K2 LCALL DEL10MS ;延时消抖 JB P1.1,KEY2 ;再检测,判断是否为干扰 CLR P2.1 ;K1按下,实现K1的相应程序KEY2: JB P1.2,KEY3 ;如果K2没有按下检测K3 LCALL DEL10MS ;延时消抖 JB P1.2,KEY3 ;再检测,判断是否为干扰 CLR P2.2 ;K2按下,实现K2的相应程序66KEY3: JB P1.3,KEYEND ;如果K3没有按下结束,返回主程序 LCALL DEL10MS ;延时消抖 JB P1.3,KEYEND ;再检测,判断是否为干扰 CLR P2.3 ;K3按下,实现K3的相应程序KEYEND:LJMP KEYDEL10MS:MOV R7,#20 ;延时10ms程序DEL500U:MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL500U RET END67C语言程序:#include<reg51.h>#defineucharunsignedcharsbitK0=P1^0; //定义位变量sbitK1=P1^1;sbitK2=P1^2;sbitK3=P1^3;sbitD0=P2^0;sbitD1=P2^1;sbitD2=P2^2;sbitD3=P2^3;68voiddelay(uchark) //定义延时函数{uchari,j;for(i=0;i<k;i++) for(j=0;j<250;j++);}voidmain(void){if(K0==0){delay(10);if(K0==0)D0=0;}//K0按下,进行的相应处理if(K1==0){delay(10);if(K1==0)D1=0;}//K1按下,进行的相应处理if(K2==0){delay(10);if(K2==0)D2=0;}//K2按下,进行的相应处理if(K3==0){delay(10);if(K3==0)D3=0;}//K3按下,进行的相应处理}8.4.3矩阵式键盘与单片机的接口图8.34是PROTEUS中通过8255A芯片扩展并行口连接2

8的矩阵式键盘的电路图。8255A的PA口接8根列线,PC口低2位接行线,PA口为输出,PC口低2位为输入。70处理过程如下:首先,通8255A的PA口送全扫描字00H,使所有的列为低电平,读入PC口低2位,判断是否有键按下。其次,如果有键按下,再通过PA口依次送列扫描字,将列线逐列置成低电平,读入PC口行线状态,判断按下的键是在哪一列的哪一行上面,然后通过行首码加列号得到前按键的编码。该矩阵式键盘的扫描子程序流程图如右图。

该矩阵式键盘的扫描子程序流程图为了便于测试键盘是否正确,还添加了8个LED数码管,通过数码管显示按下的键,按下的键在8个数码管的最右边显示,而原来的内容依次左移。8255A的A口、B口、C口和控制口的地址可分别取为7F00H、7F01H、7F02H和7F03H〔高8位地址线未用的取1,低8位地址线未用的取0〕。8255A在主程序中初始化。设定为A口方式0输出,B口方式0输出,C口的低4位方式0输入。72汇编语言程序: ORG0000H LJMPMAIN ORG0100HMAIN:MOVA,#0 ;显示缓冲区57H~50H单元初始化为7~0 MOVR2,#8 MOVR0,#50HLOOP:MOV@R0,A INCR0 INCA DJNZR2,LOOP MOVA,#10000001B ;8255初始化,A口方式0输出,B口方式0输出,C口低4位输入 MOVDPTR,#7F03H ;使DPTR指向8255控制存放器端口 MOVX@DPTR,ALOOP1:ACALLKEYSUB ;调用键盘子程序 CJNER2,#0FFH,NEXT SJMP NEXT173NEXT:MOV50H,51H ;显示缓冲区左移 MOV 51H,52H MOV 52H,53H MOV53H,54H MOV54H,55H MOV55H,56H MOV56H,57H MOV 57H,R2 NEXT1:ACALLDISPLAY ;调用显示子程序 SJMPLOOP1 SJMP$74;无键按下,R2返回FFH,有键按下,R2返回键码KEYSUB:ACALLKS1 ;调用判断有无键按下子程序 JNZLK1;有键按下时,(A)≠0转消抖延时 AJMPNOKEY ;无键按下返回LK1:ACALLTM6 ;调用10ms延时子程序 ACALLKS1 ;查有无键按下,假设真有键按下 JNZLK2;键(A)≠0逐列扫描NOKEY:MOVR2,#0FFH;不是真有键按下,R2中放无键代码FFH AJMPKEYOUT ;返回LK2:MOVR3,#0FEH ;初始列扫描字(0列)送入R3 MOVR4,#00H ;初始列(0列)号送入R4LK3:MOVDPTR,#7F00H ;DPTR指向8255PA口 MOVA,R3 ;列扫描字送至8255PA口 MOVX@DPTR,A INCDPTR ;DPTR指向8255PC口 INCDPTR MOVXA,@DPTR ;从8255PC口读入行状态 JBACC.0,LONE ;查第0行无键按下,转查第1行 MOVA,#00H ;第0行有键按下,行首键码#00H→A AJMPLKP ;转求键码75LONE:JBACC.1,KNEXT ;查第1行无键按下,转查第2行 MOVA,#08H ;第1行有键按下,行首键码#08H→ALKP:ADDA,R4 ;求键码,键码=行首键码+列号 MOVR2,A ;键码放入R2中LK4:ACALLKS1 ;等待键释放 JNZLK4 ;键未释放,等待KEYOUT:RET ;键扫描结束,出口状态R2:无键按下为FFH,有键按下为键码KNEXT:INCR4 ;准备扫描下一列,列号加1 MOVA,R3 ;取列扫描字送累加器A JNBACC.7,NOKEY ;判断8列扫描完否?

RLA ;扫描字左移一位,变为下一列扫描字 MOVR3,A;扫描字送入R3中保存 AJMPLK3;转下一列扫描76KS1:MOVDPTR,#7F00H ;DPTR指向8255PA口 MOVA,#00H ;全扫描字→A MOVX@DPTR,A;全扫描字送往8255PA口 INCDPTR;DPTR指向8255PC口 INCDPTR MOVXA,@DPTR ;读入PC口行状态 CPLA;变正逻辑,以高电平表示有键按下 ANLA,#03H;屏蔽高4位,只保存低4位行线值 RET;出口状态:(A)≠0时有键按下TM12ms: MOVR7,#20 ;延时10ms子程序TM: MOVR6,#250TM6:DJNZR6,TM6 DJNZR7,TM RET77;显示子程序,显示缓冲区57H~50H的内容在8个数码管上显示一次DISPLAY:MOVR0,#57H ;动态显示初始化,使R0指向缓冲区首地址

MOVR3,#7FH ;首位位选字送R3 MOVA,R3DP0:MOVDPTR,#7F01H ;使DPTR指向PB口

MOVX@DPTR,A ;从PB口送出位选字

MOVDPTR,#7F00H ;使DPTR指向PA口

MOVA,@R0 ;读要显示数

ADDA,#0DH ;调整距离段选码表首的偏移量

MOVCA,@A+PC ;查表取得段选码

MOVX@DPTR,A ;段选码从PA口输出

ACALLDL1 ;调用1ms延时子程序

DECR0 ;指向缓冲区下一单元

MOVA,R3 ;位选码送累加器A JNBACC.0,DP1 ;判断8位是否显示完毕,显示完返回

RRA ;未显示完,把位选字变为下一位选字

MOVR3,A ;修改后的位选字送R3 AJMPDP0 ;循环实现按位序依次显示DP1:RET78TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;字段码表

DB7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1:MOVR7,#2 ;延时子程序DL: MOVR6,#250DL0:DJNZR6,DL0 DJNZR7,DL RET END79C语言键盘扫描子程序:#include<reg51.h>#include<absacc.h> //定义绝对地址访问#defineucharunsignedchar#defineuintunsignedintvoiddelay(uint);//声明延时函数voiddisplay(void);//声明显示函数uchar

checkkey();uchar

keyscan(void);uchar

disbuffer[8]={0,1,2,3,4,5,6,7};//定义显示缓冲区80voidmain(void){ucharkey;XBYTE[0x7f03]=0x81;//8255A初始化while(1){key=keyscan();if(key!=0xff) {disbuffer[0]=disbuffer[1]; disbuffer[1]=disbuffer[2]; disbuffer[2]=disbuffer[3]; disbuffer[3]=disbuffer[4]; disbuffer[4]=disbuffer[5]; disbuffer[5]=disbuffer[6]; disbuffer[6]=disbuffer[7]; disbuffer[7]=key; }display();//设显示函数}}81//************延时函数************voiddelay(uinti)//延时函数{uintj;for(j=0;j<i;j++){}}//***********显示函数voiddisplay(void)//定义显示函数{ucharcodevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F的字段码表ucharchocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选码表uchari,p,temp;for(i=0;i<8;i++) { XBYTE[0x7f01]=0xff; p=disbuffer[i];//取当前显示的字符 temp=codevalue[p];//查得显示字符的字段码 XBYTE[0x7f00]=temp;//送出字段码 te

温馨提示

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

评论

0/150

提交评论