ORG 0000H0000 020030 LJMP MAINORG 0003H ;外部中断0入口0003 020060 LJMP PAN2ORG 0030HMAIN:0030 D2AF SETB EA ;打开中断总允许0032 D2A8 SETB EX0 ;打开外部中断0允许0034 7590F6 MOV P1,#0F6H ;给键盘赋初值0037 7C1E MOV R4,#30 ;设置t0延时次数,即任务中延;时1.5s的功能选择,因为定时器;最多计时65536us,所以需要多次计时累计0039 758C3C MOV TH0,#3CH ;t0赋初值003C 758AB0 MOV TL0,#0B0H003F 758901 MOV TMOD,#01H ;设置t0工作方式为方式10042 D288 SETB IT0 ;打开中断0;学号滚动显示程序0044 900172 XUEHAO: MOV DPTR,#XTAB0047 7A05 MOV R2,#5 ;从上到下滚动分四次,另加一次黑屏0049 7B06 XUEHAO2:MOV R3,#6 ;每次发送6个显示码进数码管004B 7400 XUEHAO1:MOV A,#0 ;A清零004D 93 MOVC A,@A+DPTR ;查表,给A赋值004E F599 MOV SBUF,A ;将A中数据发送到串行口0050 3099FD JNB TI,$ ;判断串行口发送是否完毕0053 C299 CLR TI ;清除中断标志位,准备进行下一次发送0055 A3 INC DPTR ;DPTR加1,指向下一个字型码地址0056 DBF3 DJNZ R3,XUEHAO1 ;判断是否到了6个0058 120134 LCALL DELAY1S ;延迟1s,进行显示005B DAEC DJNZ R2,XUEHAO2 ;判断从下滚动三次是否完毕005D 020044 LJMP XUEHAO ;新一轮显示;键盘程序0060 F570 PAN2: MOV 70H,A ;响应中断,保存原数据,保护现场0062 858271 MOV 71H,DPL0065 858372 MOV 72H,DPH0068 8B73 MOV 73H,R3006A 8A74 MOV 74H,R2006C 8D75 MOV 75H,R5006E 8E76 MOV 76H,R60070 8F77 MOV 77H,R70072 12014D LCALL DELAY10MS ;延时10MS判断按键是否按下,没按下则返回0075 20B24B JB P3.2,PAN10078 900190 MOV DPTR,#STAB ;键值显示表地址送给DPTR007B 120121 LCALL JIANZHI ;调用判断键值的程序007E F57A MOV 7AH,A ;将键值保存到7AH中0080 93 MOVC A,@A+DPTR ;查表给A赋值0081 7F06 MOV R7,#6 ;发送6次键值0083 F599 PAN: MOV SBUF,A ;将键值通过串行口发送至显示屏0085 3099FD JNB TI,$0088 C299 CLR TI008A DFF7 DJNZ R7,PAN ;判断是否发送完毕;长按键判断开始008C 7590F6 SELECT: MOV P1,#0F6H ;给键盘赋初值008F 20B244 JB P3.2,SELECTOUT ;判断按键是否按下,没有则跳出中断0092 120145 LCALL DELAY50MS ;延时50ms0095 7590F6 MOV P1,#0F6H ;给键盘赋初值0098 20B23B JB P3.2,SELECTOUT ; 判断按键是否按下,没有跳出中断009B DCEF DJNZ R4,SELECT ;判断按键是否按了1.5s,没有则跳出中断009D 7590F6 PAN4: MOV P1,#0F6H ;按键超1.5s后,等待按键弹起00A0 20B2FA JB P3.2 ,PAN400A3 7590F6 MOV P1,#0F6H ;给键盘赋初值00A6 E57A MOV A,7AH ;取出7AH中的键值00A8 B40006 CJNE A,#0,SELECT1 ;判断是不是按了按键0,不是的话继续判断00AB 120156 LCALL XUEHAOCHANG ;确定是按键0,调用学号显示功能00AE 0200EE LJMP SELECTOUT1 ; 完成功能,跳到中断返回程序00B1 B40206 SELECT1: CJNE A,#2,SELECT2 ;判断是否是按键2,不是的话继续判断00B4 12011E LCALL ATOD ;确定是按键2,调用AD功能子程序00B7 0200EE LJMP SELECTOUT1 ;完成功能,跳到中断返回程序00BA B40331 SELECT2: CJNE A,#3,SELECTOUT1 ;判断是否是按键3,不是跳中断返回程序00BD 120106 LCALL D2A ;确定是按键3,调用DA功能子程序00C0 0200EE LJMP SELECTOUT1 ;完成功能,跳到中断返回程序00C3 E570 PAN1:MOV A,70H ;按键没按下返回程序,取出中断前的数据,恢复现场00C5 857182 MOV DPL,71H00C8 857283 MOV DPH,72H00CB AB73 MOV R3,73H00CD 8A74 MOV 74H,R200CF 8D75 MOV 75H,R500D1 8E76 MOV 76H,R600D3 8F77 MOV 77H,R700D5 32 RETI00D6 12013C SELECTOUT:LCALL DELAY0A5MS ;按键按下但时间不到1.5s的中断返回程序,恢复现场00D9 7C1E MOV R4,#30 ;R4重新赋初值00DB E570 MOV A,70H00DD 857182 MOV DPL,71H00E0 857283 MOV DPH,72H00E3 AB73 MOV R3,73H00E5 8A74 MOV 74H,R200E7 8D75 MOV 75H,R500E9 8E76 MOV 76H,R600EB 8F77 MOV 77H,R700ED 32 RETI00EE 7590F6 SELECTOUT1:MOV P1,#0F6H ;按键按下达到1.5s的中断返回程序00F1 7C1E MOV R4,#30 ; R4重新赋初值00F3 E570 MOV A,70H ;恢复现场00F5 857182 MOV DPL,71H00F8 857283 MOV DPH,72H00FB AB73 MOV R3,73H00FD 8A74 MOV 74H,R200FF 8D75 MOV 75H,R50101 8E76 MOV 76H,R60103 8F77 MOV 77H,R70105 32 RETI;DA转换程序0106 F566 D2A:MOV 66H ,A ; 将A中的值保存到66H中0108 907FFF MOV DPTR,#07FFFH ; 启动DA转换器010B 7400 MOV A,#00H ;将A清零010D 7AE8 MOV R2,#1000 ; 发送1000个三角波010F F0 UP:MOVX @DPTR,A0110 04 INC A ;使A自加10111 B4E8FB CJNE A,#1000,UP ;三角波的上升沿,时间控制5ms;(因三角波频率为100Hz,故周期为10ms,则上升沿和;下降沿分别为5ms)0114 14 DOWN:DEC A ;使A自减10115 F0 MOVX @DPTR ,A0116 B400FB CJNE A,#0,DOWN ; 三角波的下降沿,时间控制5ms 0119 DAF4 DJNZ R2,UP ; 判断发送1000个是否完毕011B E566 MOV A,66H ; 取出保存到66H的A值011D 22 RET; AD转换程序011E 7590F6 ATOD: MOV P1,#0F6H ;预留AD转换程序入口;键值判断程序0121 7800 JIANZHI: MOV R0,#0 ;将R0清零0123 7400 MOV A,#0 ;将A清零0125 309402 JNB P1.4,JP1 ;判断P1.4是否为0,若为0则跳转,; 说明按下了0或2若为1则顺序执行,说明按下了1或30128 7801 MOV R0,#1 ;将值0赋给R0012A 7590C7 JP1:MOV P1,#0C7H ;给键盘赋值C7H012D 309002 JNB P1.0,JP2 ;判断P1.0是否为0,若为零则跳转,; 证明按了0或1,若仍为1则顺序执行,; 证明按下了2或30130 7402 MOV A,#2 ;将值2赋给A0132 28 JP2:ADD A,R0 ;将A于R0中值相加得到键值0133 22 RET;延时一秒的程序0134 7D64 DELAY1S: MOV R5,#1000136 12014D DELAY1S1: LCALL DELAY10MS0139 DDFB DJNZ R5,DELAY1S1013B 22 RET;延时0.5ms的程序013C 7E05 DELAY0A5MS: MOV R6,#5013E 7F31 DELAY0A5MS1:MOV R7,#490140 DFFE DJNZ R7,$0142 DEFA DJNZ R6,DELAY0A5MS10144 22 RET;延时50ms的程序0145 7D05 DELAY50MS: MOV R5,#50147 12014D DELAY50MS1: LCALL DELAY10MS014A DDFB DJNZ R5,DELAY50MS1014C 22 RET;延时10ms子程序014D 7E14 DELAY10MS: MOV R6,#20014F 7FFA DELAY10MS1:MOV R7,#2500151 DFFE DJNZ R7,$0153 DEFA DJNZ R6,DELAY10MS10155 22 RET;延时超1.5s的学号显示程序0156 90016C XUEHAOCHANG:MOV DPTR,#XTABCHANG0159 7B06 XUEHAOCHANG2:MOV R3,#6 ;串行口发送六次数据015B 7400 XUEHAOCHANG1:MOV A,#0 ;将A清零015D 93 MOVC A,@A+DPTR ;查表得A值015E F599 MOV SBUF,A ;将A中数据通过串行口发送0160 3099FD JNB TI,$0163 C299 CLR TI0165 A3 INC DPTR0166 DBF3 DJNZ R3, XUEHAOCHANG1 ;判断六次数据是否发送完毕0168 120134 LCALL DELAY1S016B 22 RET016C 8082C0016F B0F999 XTABCHANG: DB 80H,82H,0C0H,0B0H,0F9H,99H ;长按键盘时学号显示数字表0172 FEFEFE0175 FEFFFF XTAB: DB 0FEH,0FEH,0FEH,0FEH,0FFH,0FFH ;学号滚动显示数字表0178 9C9C9D017B BCFDFC DB 9CH,9CH,9DH,0BCH,0FDH,0FCH017E 8082C00181 B0F999 DB 80H,82H,0C0H,0B0H,0F9H,99H0184 A3AFAB0187 B3FBE3 DB 0A3H,0AFH,0ABH,0B3H,0FBH,0E3H018A FFFFFF018D FFFFFF DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH0190 C0F9A40193 B0 STAB:DB 0C0H,0F9H,0A4H,0B0H ;键值显示表符号值类型AC = 00D6H CONST 常量ACC = 00E0H CONST 常量ATOD = 011EH CODE 标号B = 00F0H CONST 常量CY = 00D7H CONST 常量D2A = 0106H CODE 标号DELAY0A5MS = 013CH CODE 标号DELAY0A5MS1 = 013EH CODE 标号DELAY10MS = 014DH CODE 标号DELAY10MS1 = 014FH CODE 标号DELAY1S = 0134H CODE 标号DELAY1S1 = 0136H CODE 标号DELAY50MS = 0145H CODE 标号DELAY50MS1 = 0147H CODE 标号DOWN = 0114H CODE 标号DPH = 0083H CONST 常量DPL = 0082H CONST 常量EA = 00AFH CONST 常量ES = 00ACH CONST 常量ET0 = 00A9H CONST 常量ET1 = 00ABH CONST 常量EX0 = 00A8H CONST 常量EX1 = 00AAH CONST 常量F0 = 00D5H CONST 常量F1 = 00D1H CONST 常量IE = 00A8H CONST 常量IE0 = 0089H CONST 常量IE1 = 008BH CONST 常量IP = 00B8H CONST 常量IT0 = 0088H CONST 常量IT1 = 008AH CONST 常量JIANZHI = 0121H CODE 标号JP1 = 012AH CODE 标号JP2 = 0132H CODE 标号MAIN = 0030H CODE 标号OV = 00D2H CONST 常量P = 00D0H CONST 常量P0 = 0080H CONST 常量P1 = 0090H CONST 常量P2 = 00A0H CONST 常量P3 = 00B0H CONST 常量PAN = 0083H CODE 标号PAN2 = 0060H CODE 标号PAN4 = 009DH CODE 标号PCON = 0087H CONST 常量PS = 00BCH CONST 常量PSW = 00D0H CONST 常量PT0 = 00B9H CONST 常量PT1 = 00BBH CONST 常量PX0 = 00B8H CONST 常量PX1 = 00BAH CONST 常量RB8 = 009AH CONST 常量REN = 009CH CONST 常量RI = 0098H CONST 常量RS0 = 00D3H CONST 常量RS1 = 00D4H CONST 常量SBUF = 0099H CONST 常量SCON = 0098H CONST 常量SELECT = 008CH CODE 标号SELECT1 = 00B1H CODE 标号SELECT2 = 00BAH CODE 标号SELECTOUT = 00D6H CODE 标号SELECTOUT1 = 00EEH CODE 标号SM0 = 009FH CONST 常量SM1 = 009EH CONST 常量SM2 = 009DH CONST 常量SP = 0081H CONST 常量STAB = 0190H CODE 标号TB8 = 009BH CONST 常量TCON = 0088H CONST 常量TF0 = 008DH CONST 常量TF1 = 008FH CONST 常量TH0 = 008CH CONST 常量TH1 = 008DH CONST 常量TI = 0099H CONST 常量TL0 = 008AH CONST 常量TL1 = 008BH CONST 常量TMOD = 0089H CONST 常量TR0 = 008CH CONST 常量TR1 = 008EH CONST 常量UP = 010FH CODE 标号XTAB = 0172H CODE 标号XTABCHANG = 016CH CODE 标号XUEHAO = 0044H CODE 标号XUEHAO1 = 004BH CODE 标号XUEHAOCHANG = 0156H CODE 标号XUEHAOCHANG1 = 015BH CODE 标号XUEHAOCHANG2 = 0159H CODE 标号公有符号: 90私有符号: 0。