资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,8个共阴极的数码管,动态显示0-7,ORG 0000H,MOV R0,#00H ;给R0赋值0,MOV DPTR,#TAB;把TAB 表的首地址给DPTR,MOV R4,#0FEH;;给R4赋值0FE,MOV A,R4;;A为0FE 也就是1111 1110,PUSH ACC;;将A入栈,DLO:MOV A,R0,MOVC A,A+DPTR;;查TAB表,MOV P0,A;把查的值给数码管的8个段,POP ACC;将之前的A出栈,MOV P1,A;将A的值给P1 也就是给P1 1111 1110 是那个为0的管亮,LCALL QF;调用取反子程序,PUSH ACC;将A入栈,INC R0;R0值加1,LCALL DELAY;调用延时程序,CJNE R0,#08H,DLO;判断是否查完一便表 没查完再跳到DLO,MOV R4,#0FEH;查完了重新给A赋值,MOV A,R4,PUSH ACC;再将A入栈,MOV R0,#00H;给R0清0,SJMP DLO;跳到DLO再显示,DELAY:MOV R1,#18,LP1:MOV R2,#200,LP2:MOV R3,#126,DJNZ R3,$,DJNZ R2,LP2,DJNZ R1,LP1,RET,TAB:DB 3fH,06H,5bH,4fH,66H,6dH,7dh,07h,QF:,RL A;左移,RET,END,0-99的显示,Org 0,Ljmp main,Org 0100h,Main:MOV R0,#00H ;给R0赋值0,MOV DPTR,#TAB;,MOV R3,#0;;给R3赋值0,M1:MOV R4,#0;;给R4赋值0,GW:MOV R2,#10,YS:MOV A,R4;;A为0,MOVC A,A+DPTR,MOV P0,A ;显示,个,位的数据,CLR P1.1,LCALL DL,MOV P0,#0,SETB P1.1,MOV A,R3,MOVC A,A+DPTR,MOV P0,A ;显示十位的数据,CLR P1.0,LCALL DL,MOV P0,#0,SETB P1.0,DJNZ R2,YS,INC R4,CJNE R4,#10,GW,INC R3,CJNE R3,#10,M1,SJMP MAIN,DL:MOV R7,#10,D1:MOV R6,#200,D2:DJNZ R6,d2,DJNZ R7,d1,RET,TAB:DB 3fH,06H,05bH,4fH,66H,6dH,7dH,07H,7fH,6fH,a_bit equ 20h;数码管个位数存放内存位置,b_bit equ 21h;数码管十位数存放内存位置,temp equ 22h;计数器数值存放内存位置,org 0,star:mov temp,#0;初始化计数器,从0开始,stlop:acall display;调用显示子程序,inc temp;对计数器加1,mov a,temp,cjne a,#100,next;判断计数器是否满100?,mov temp,#0;满100就清零重新开始,next:ljmp stlop;不满就循环执行,;显示子程序,display:mov a,temp;将temp中的十六进制数转换成10进制,mov b,#10;10进制/10=10进制,div ab,mov b_bit,a;十位在a,mov a_bit,b;个位在b,mov dptr,#numtab;指定查表启始地址,mov r0,#4,dpl1:mov r1,#250;,dplop:mov a,a_bit;取个位数,MOVC A,A+DPTR;查个位数的7段代码,mov p0,a;送出个位的7段代码,clr p1.7;开个位显示,acall d1ms;显示162微秒,setb p1.7;关闭个位显示,防止鬼影,mov a,b_bit;取十位数,MOVC A,A+DPTR;查十位数的7段代码,mov p0,a;送出十位的7段代码,clr p1.6;开十位显示,acall d1ms;显示162微秒,setb p1.6;关闭十位显示,防止鬼影,djnz r1,dplop;循环执行250次,djnz r0,dpl1;循环执行250X4=1000次,Ret,;2+2X80=162微秒,延时按12MHZ计算,D1MS:MOV R7,#80,DJNZ R7,$,RET,共阴数码管的显示代码,numtab:DB 3fH,06H,05bH,4fH,66H,6dH,7dH,07H,7fH,6fH,键盘接口,键盘是单片机应用系统中使用最广泛的一种,数据输入设备。键盘是一组按键的组合。键通常是一种常开型按钮开关,常态下键的两个触点处于断开状态,按下键时它们才闭合(短路)。,第三章 电子时钟设计,非编码键盘,按组成结构又可分为,独立式键盘,和,矩阵式键盘,。,独立式键盘的工作过程与矩阵式键盘类似,无论是硬件结构还是软件设计都比较简单,。,通常,按键按照接口原理键盘有,编码,和,非编码,两种。编码键盘通过硬件电路产生被按按键的键码和一个选通脉冲。选通脉冲可作为,CPU,的中断请求信号。这种键盘使用方便,所需程序简单,但硬件电路复杂,常不被单片机采用。,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。,一个完善的键盘控制程序应具备以下功能:,(1)检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。,(2)有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。,(3)准确输出按键值(或键号),以满足跳转指令要求。,S1,S4,S3,S2,P1.4,P1.5,P1.6,P1.7,89S52,+5V,图,3,.1,独立式键盘接口,特点:,每个按键占用一条,I/O,线,当按键数量较多时,,I/O,口利用率不高,但程序编制简单。适用于所需按键较少的场合。,特点:,电路连接复杂,但提高了,I/O,口利用率,软件编程较复杂。适用于需使用大量按键的场合。,89s52,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7,+5V,图,3,.2,矩阵式键盘接口,独立式按键的软件结构,独立式按键软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。,矩阵式键盘的结构及原理,矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,其结构如下图所示。,由图可知,一个44的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。,矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。,K9,9,K10,A,K15,F,P10,P11,P12,P13,P14,P15,P16,P17,EA/VP,31,X1,19,X2,18,RESET,9,RD,17,WR,16,INT0,12,INT1,13,T0,14,T1,15,P10,1,P11,2,P12,3,P13,4,P14,5,P15,6,P16,7,P17,8,P00,39,P01,38,P02,37,P03,36,P04,35,P05,34,P06,33,P07,32,P20,21,P21,22,P22,23,P23,24,P24,25,P25,26,P26,27,P27,28,PSEN,29,ALE/P,30,TXD,11,RXD,10,VCC,40,GND,20,U1,89S52,P10,P11,P12,P13,P14,P15,P16,P17,K0,0,K1,1,K2,2,K3,3,K5,5,K6,6,K7,7,K8,8,K4,4,K11,B,K12,C,K13,D,K14,E,扫描法 和线反转法,89s52,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7,+5V,图,3,.,3,矩阵式键盘接口,0123,ee debe7e,4567,edddbd7d,89AB,ebdbbb7b,CDEF,e7d7b777,键盘控制流程,单片机对矩阵式键盘接口处理的一般过程如图所示。,键扫描,消抖,求键码,等待释放,键扫描,消除抖动,有键按下?,键扫描,确有键按下?,求键值,按键处理,键释放?,Y,Y,Y,N,N,等待键释放,N,开始,返回,按键处理,图3,.,4,键盘处理流程框图,1.,键扫描,键扫描就是要判断有无键按下,当扫描到有键按下时再进行下一步处理,否则退出键盘处理程序。独立式键盘扫描只需读取,IO,口状态,而矩阵式键盘描通常有两种实现方法:,逐行扫描法,和线反转法。,(1),逐行扫描法。依次从第一至最末行线上发出低电平信号,如果该行线所连接的键没有按下的话,则列线所接的端口得到的是全“,1”,信号,如果有键按下的话,则得到非全“,1”,信号。,89C51,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7,+5V,0,1,1,1,1 1 1 1,1,0,1,1,1 1 1 0,1,1,0,1,1 1 1 1,1,1,1,0,1 1 1 1,设第,2,行第,4,列键按下,行线输出,列线输入,0 1 1 1,1 1 1 1,1 0 1 1,1 1 1 0,1 1 0 1,1 1 1 1,1 1 1 0,1 1 1 1,(,2,)线反转法。,线反转法也是识别闭合键的一种常用方法,该法比行扫描速度快,但在硬件上要求行线与列线外接上拉电阻。,先将行线作为输出线,列线作为输入线,行线输出全,“,0,”,信号,读入列线的值,那么在闭合键所在的列线上的值必为,0,;然后从列线输出全,“,0,”,信号,再读取行线的输入值,闭合键所在的行线值必为,0,。这样,当一个键被按下时,必定可读到一对唯一的行列值。再由这一对行列值可以求出闭合键所在的位置。,0,0,0,0,1 1 1 0,0 0 0 0,1,0,1,1,89C51,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7,+5V,设第,2,行第,4,列键按下,列值:,1110,行值:,1011,由于按键按下时的机械动作,在按键被按下或松开的瞬间,其输出电压会产生波动,称为键的抖动,。,键按下,前沿抖动,后沿抖动,2.,消抖,为确保每按一次键单片机只进行一次处理,使键盘可靠地工作,必须消除按键抖动。消抖方法有,硬件,消抖,和,软件,延时两种。,图3,.5,键闭合及断开时的抖动,+5V,&,&,Q,Q,(,1,)硬件消抖法:,就是在键盘中附加去抖动电路,从根上消除抖动产生的可能性。右,图所示电路实际上是由,R-S,触发器构成的单脉冲电路。当按钮开关按下时,Q,端输出低电平,当开关松开时,Q,端恢复高电平,即输出一个负脉冲,以此消除抖动。,图3,.6,硬件去抖动电路,(,2,)软件消抖法:键按下的时间与操作者的按键动作有关,约为十分之几到几秒不等。而键抖动时间与按键的机械特性有关,一般为,5,10ms,不等。软件消抖法即是采用延时(一般延时,10,20ms,)的方法,以避开按键的抖动,即在按键已稳定地闭合或断开时才读出其状态。,100ms,10ms,10ms,键抖动时间,图3,.7,软件消抖法,延时区间示意图,3.,计算键码,键码是每个按键
展开阅读全文