51单片机仿真00-99计数器,下面是原理图:
汇编语言程序源码:
- Count EQU 30H
- SP1 BIT P3.7
- ORG 0
- START: MOV Count,#00H
- NEXT: MOV A,Count
- MOV B,#10
- DIV AB
- MOV DPTR,#TABLE
- MOVC A,@A+DPTR
- MOV P0,A
- MOV A,B
- MOVC A,@A+DPTR
- MOV P2,A
- WT: JNB SP1,WT
- WAIT: JB SP1,WAIT
- LCALL DELY10MS
- JB SP1,WAIT
- INC Count
- MOV A,Count
- CJNE A,#100,NEXT
- LJMP START
- DELY10MS: MOV R6,#20
- D1: MOV R7,#248
- DJNZ R7,$
- DJNZ R6,D1
- RET
- TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
- END
复制代码 c语言源码:
- #include <AT89X51.H>
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char Count;
-
- void delay10ms(void)
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
-
- void main(void)
- {
- Count=0;
- P0=table[Count/10];
- P2=table[Count%10];
- while(1)
- {
- if(P3_7==0)
- {
- delay10ms();
- if(P3_7==0)
- {
- Count++;
- if(Count==100)
- {
- Count=0;
- }
- P0=table[Count/10];
- P2=table[Count%10];
- while(P3_7==0);
- }
- }
- }
- }
复制代码
|