资源描述
*,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,一、键盘,矩阵式键盘,判别是否有键按下:,JugeKeyPressed,:,CLRA,MOVP1,#0FFH,ANLP1,#00001111B ;,列线低电平,判断行线是否有低电平,MOVA,P1,ORLA,#11110000B,CPLA;A=0,说明无键按下,,A0,说明有键按下,RET,消抖判键:,JugekeyBoard,:LCALL,JugeKeyPressed,JZ,JugeKeyEnd,;,如果,A,不为,0,,有键按下,LCALLDelay10ms;,去抖动,LCALL,JugeKeyPressed,;,再次判断有无键按下,JZ,JugeKeyEnd,SETB,KeyPressed,;,设置键盘按下标志,JugeKeyEnd,:RET,识别键值:,JugeWhichKey,:,MOV ScanTimes,#04H,MOVA,#11101111B ;P1.4,置低不影响其他列,ScanLoop,:,ORLP1,#11111111B,ANLP1,A;,判断,P1.4,对应列是否有键按下,MOV,WhichCol,,,A,MOVA,P1,MOV,InputedKey,A,;,存储输入键值,ORLA,#11110000B,CPLA;,若,P1.4,对应列有键按下,则,a0,JZ,ScanNextRow,;P1.4,列没有键按下,继续下一列,LJMP,Keycode,ScanNextRow,:,MOV,A,WhichCol,RLA,MOV,WhichCol,A,;,逐列置低电平,DJNZ,ScanTimes,ScanLoop,CLR,KeyPressed,;,四列循环完毕后认为没有键按下,LJMP,JugeKeyOver,按键,键值,按键,键值,S1,7E,S9,7B,S2,BE,S10,BB,S3,DE,S11,DB,S4,EE,S12,EB,S5,7D,S13,77,S6,BD,S14,B7,S7,DD,S15,D7,S8,ED,S16,E7,Keycode:MOV,A,InputedKey,CJNEA,#7EH,Not01,MOVInputedKey,#01H,LJMP,JugeKeyOver,Not01:CJNEA,#0BEH,Not02,MOVInputedKey,#02H,LJMP,JugeKeyOver,Not02:CJNEA,#0DEH,Not03,MOVInputedKey,#03H,LJMP,JugeKeyOver,Not03:CJNE A,#0EEH,NotOrder,SETB,OrderKeyPressed,LJMP,JugeKeyOver,NotOrder,:CJNEA,#7DH,Not04,MOVInputedKey,#04H,LJMP,JugeKeyOver,Not04:CJNEA,#0BDH,Not05,MOVInputedKey,#05H,LJMP,JugeKeyOver,Not05:CJNEA,#0DDH,Not06,MOVInputedKey,#06H,LJMP,JugeKeyOver,Not06:CJNEA,#0EDH,NotFun,SETB,FunKeyPressed,LJMP,JugeKeyOver,NotFun,:CJNEA,#7BH,Not07,MOVInputedKey,#07H,LJMP,JugeKeyOver,Not07:CJNEA,#0BBH,Not08,MOVInputedKey,#08H,LJMP,JugeKeyOver,Not08:CJNEA,#0DBH,Not09,MOVInputedKey,#09H,LJMP,JugeKeyOver,Not09:CJNE A,#0EBH,NotEnter,SETB,EnterKeyPressed,JMP,JugeKeyOver,NotEnter:CJNE,A,#77H,Not00,MOVInputedKey,#00H,LJMP,JugeKeyOver,Not00:CJNEA,#0B7H,NotUp,SETB,UpKeypressed,LJMP,JugeKeyOver,NotUp,:CJNEA,#0D7H,NotDown,SETB,DownKeyPressed,LJMP,JugeKeyOver,NotDown,:CJNEA,#0E7H,InputFail,SETB,ExitKeyPressed,LJMP,JugeKeyOver,InputFail,:SETB,KeyFail,;,InputedKey,值有错误,设出错标志,LJMP,JugeKeyOver,JugeKeyOver,:RET,二、显示器,例,若硬件连接图如上所示,要显示数据的,BCD,码存放在,30H,37H,存储单元中,试给出循环显示,30H,37H,单元数据的程序。,解:显示程序如下:,Datatemp,EQU39H;,显示数据的,BCD,码,Addrtemp,EQU3AH;,显示数据的位数,ORG0000H,LJMPMAIN,ORG0030H,MAIN:MOVR0,#30H;,将数据首地址赋给,R0,MOVR2,#07H;,显示的位数存放在,R2,中,MOVAddrtemp,#00H;,选中最后一位,LED,Dis,:MOVA,R0;,取出显示数据的,BCD,码,MOV,Datatemp,A,LCALLDisplay,LCALLDelay,INC,Addrtemp,;,选择下一个,LED,INCR0,DJNZR2,Dis,LJMPMAIN,Display:MOV,A,Datatemp,ANLA,#0FH,SWAPA,CLRC,ADD,A,Addrtemp,SWAPA,MOVP1,A,RET,延时程序子程序:,DELAY:MOVR6,#04H,DL_3MS_0:MOVR7,#0F9H,DL_3MS_1:NOP,DJNZR7,DL_3MS_1,DJNZR6,DL_3MS_0,RET,三、数模转换,IN0,IN7,:,8,路模拟量输入端。,D0,D7,:,8,位数字量输出端。,START,:启动输入控制端口。,ALE,:地址锁存控制信号端口。,EOC,:转换结束信号,高电平表示转换结束,CLOCK,:时钟信号输入端。,OE,:输出允许控制信号,高电平有效。,A,、,B,、,C,:转换通道地址选择。,Vref,+,:参考电压的正端。,Vref,-,:参考电压的负端。,VCC,:电源的正极。,ORG,0000H,AJMP,START,ORG0013H;,开外部中断,1,AJMPINT1,ORG0030H,START:,SETBEA;CPU,开中断,SETBEX1;,外部中断,1,开中断,SETBDPTR,#0F000H;,选择通道,0,MOVA,#00H,MOVXDPTR,,,A;,启动,A/D,转换,SJMP$,;-,中断服务子程序,-,INT1:MOVXA,DPTR;,产生读信号来读取结果存放在,A,中,RETI;,中断返回,
展开阅读全文