;键盘控制的数字显示。
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站开发套件 * ;* E-mail:sxj1974@163.com (51c51 test web) 51单片机学习网,自学单片机的网站 * ;* Create by :石学军 www.51c51.com www.8951.com 更多例程请登陆网站 * ;***************************************************************************
任务:键盘显示数字 org 0000h;(1) ljmp start;(2) org 0030h;(3) start: mov p2,#0ffh;(4) CLR P2.6 ;选中最右边的七段码。;(5) mov p3,#0ffh ;初始化,P3口全部置高电平;(6) l1: jnb p3.2,l2 ;(7) jnb p3.3,l3 ; ;(8) jnb p3.4,l4 ; ;(9) jnb p3.5,l5 ;检测按键;(10) ljmp l1 ;循环检测;(11) l2: mov p0,#28H ;显示'0';(12) ljmp l1;(13) l3: mov p0,#7EH ;显示'1';(14) ljmp l1;(15) l4: mov p0,#0A2H ;显示'2';(16) ljmp l1;(17) l5: mov p0,#62H ;显示'3';(18) ljmp l1;(19) end;(20) 这个程序的任务是键盘显示数字,也就是分别按倚天版的4个小键盘,右边的数码管轮流分别显示数字0,1,2,3,为了便于程序的讲解,我们把每一句分别编号, 实际输入程序时,就不用写后面的号码了。第1,2,3行是单片机的初始化,一般的程序都是这样开头的, 作用是跳开00-30h的地址单元,因为这些单元是分配给特殊寄存器使用的。第6行把p3送0ffh,作用是把这些端口p3.0-p3.7置高电平, 因为倚天版的键盘接在p3口,只有当端口为高电平时, 我们按下键盘,那么这个端口被短路到地,端口被强行变为0。根据这个大家自行分析第4句的意思。第5行clr p2.6,就是选中最右边的数码管。 板上一共有6个数码管,分别是p2.1,p2.2,p2.3p2.4p2.5p2.6. 程序运行到这里, 如果我们往数码管送数,那么数码管就应当亮了,这里我见插入了一段简单的键盘检测程序:我们来看第7行,jnb p3.2,l2 ,意思是如果p3.2为0,那么执行l2。倚天版的p3.2接了一个小开关到地,此时就有两种情况,如果键盘没有按下:程序继续向下跑第8行,继续检测p3.3有没有按下,直到第11行: ljmp l1 又跳转到第7行,继续检测。所以如果一直没有键盘按下,那么这个程序将一直在第7,8,9,10,11行反复循环。 如果某键盘已经按下,(假设为p3.2)此时被强行拉低为0,此时第7行的jnb p3.2,l2 就会使程序跳转到l2(第12行): mov p0,#28H,这里就把28h这个数送到p0口,数码管就显示 “0”了。然后继续第13行 ljmp l1 ,程序又跳转到第7行,继续检测键盘.如果这个键不松开 那么程序将反复执行7,12,13,数码管就始终显示一个“0”剩下的几个键的程序流程与这个类似 大家可自行分析 |