自編寫并仿真通過,可以記1分,2分,3分,并可刪除輸入錯誤分值。- #include <pic.h>
- #define INT8U unsigned char
- #define _xtal_freq 1000000ul
- #define k1_down() (RB4==0)
- #define k2_down() (RB5==0)
- #define k3_down() (RB6==0)
- #define k4_down() (RB7==0)
- INT8U count=0;
- INT8U t,num=0;
- const INT8U SEG_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
- void display()
- {
- /*if(!show_on)
- {
- PORTC=0x00;PORTD=0xFF;
- return;
- }*/
- /*PORTD=0xFF;
- PORTC=SEG_CODE[count/10];
- PORTD=~(1<<0);
- __delay_ms(2);
- PORTD=0xFF;
- PORTC=SEG_CODE[count%10];
- PORTD=~(1<<1);
- __delay_ms(2);*/
- t=count;
- for(INT8U i=0;i<2;i++)
- {
- PORTD=0xFF;
- PORTC=SEG_CODE[t%10];
- PORTD=0X01<<i;
- __delay_ms(2);
- t/=10;
- }
- }
- void main(void)
- {
- TRISC=0x00;TRISD=0x00;
- PORTC=0xFF;PORTD=0xFF;
- GIE=1;
- RBIE=1;
- TRISB=0xFF;
- RBPU=0;
- while (1)
- {
- display();
- }
- }
- void interrupt RB_port_change()
- {
- if(RBIF==1)
- {
-
- __delay_ms(5);
- if(k1_down())
- {if(count<99) count++;num=1;}
- if(k2_down())
- {if(count<99) count+=2;num=2;}
- if(k3_down())
- {if(count<99) count+=3;num=3;}
- if(k4_down())
- {
- switch (num)
- {
- case 1: count -=1;break;
- case 2: count -=2;break;
- case 3: count -=3;break;
- }
- num=0;
- }
- RBIF=0;
- }
- }
復制代碼
|