1、区域中的P3.0P3.7端口用8芯排线连接到“动态数码显示”区域中的S1S8端口上; 把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上;4 相关基本知识 动态数码显示的方法 独立式按键识别过程 “时”,“分”,“秒”数据送出显示处理方法 5 程序框图 6 汇编源程序 SECOND EQU 30H MINITE EQU 31H HOUR EQU 32H HOURK BIT P0.0 MINITEK BIT P0.1 SECONDK BIT P0.2 DISPBUF EQU 40H DISPBIT E
2、QU 48H T2SCNTA EQU 49H T2SCNTB EQU 4AH TEMP EQU 4BH ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV SECOND,#00H MOV MINITE,#00H MOV HOUR,#12 MOV DISPBIT,#00H MOV T2SCNTA,#00H MOV T2SCNTB,#00H MOV TEMP,#0FEH LCALL DISP MOV TMOD,#01H MOV TH0,#(65536-2000) / 256 MOV TL0,#(65536-2000) MOD 256 SETB TR0
3、 SETB ET0 SETB EA WT: JB SECONDK,NK1 LCALL DELY10MS INC SECOND MOV A,SECOND CJNE A,#60,NS60 NS60: JNB SECONDK,$ NK1: JB MINITEK,NK2 INC MINITE MOV A,MINITE CJNE A,#60,NM60 NM60: JNB MINITEK,$ NK2: JB HOURK,NK3 INC HOUR MOV A,HOUR CJNE A,#24,NH24 MOV HOUR,#00H NH24: JNB HOURK,$ NK3: LJMP WT DELY10MS:
4、 MOV R6,#10 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET DISP: MOV A,#DISPBUF ADD A,#8 DEC A MOV R1,A MOV B,#10 DIV AB MOV R1,A DEC R1 MOV A,B MOV A,#10 MOVR1,A INT_T0: ADD A,DISPBIT MOV R0,A MOV A,R0 MOV DPTR,#TABLE MOVC A,A+DPTR MOV P1,A MOV A,DISPBIT MOV DPTR,#TAB MOV P3,A INC DISPBIT CJNE A,#08H,KNA
5、 KNA: INC T2SCNTA MOV A,T2SCNTA CJNE A,#100,DONE INC T2SCNTB MOV A,T2SCNTB CJNE A,#05H,DONE CJNE A,#60,NEXT CJNE A,#24,NEXT NEXT:DONE: RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH END 7 C语言源程序 #include unsigned char code dispcode=0x3f,0x0
6、6,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00;unsigned char dispbitcode=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;unsigned char dispbuf8=0,0,16,0,0,16,0,0;unsigned char dispbitcnt;unsigned char second;unsigned char minite;unsigned char hour;unsigned int tcnt;unsigned
7、 char mstcnt;unsigned char i,j;void main(void) TMOD=0x02; TH0=0x06; TL0=0x06; TR0=1; ET0=1; EA=1; while(1) if(P0_0=0) for(i=5;i0;i-) for(j=248;jj-); second+; if(second=60) second=0; dispbuf0=second%10; dispbuf1=second/10; while(P0_0=0); if(P0_1=0) minite+; if(minite=60) minite=0; dispbuf3=minite%10;
8、 dispbuf4=minite/10; while(P0_1=0); if(P0_2=0) hour+; if(hour=24) hour=0; dispbuf6=hour%10; dispbuf7=hour/10; while(P0_2=0); void t0(void) interrupt 1 using 0 mstcnt+; if(mstcnt=8) mstcnt=0; P1=dispcodedispbufdispbitcnt; P3=dispbitcodedispbitcnt; dispbitcnt+; if(dispbitcnt=8) dispbitcnt=0; tcnt+; if(tcnt=4000) tcnt=0; Adlfkladkflak
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2