|
計數(shù)器模擬。
要求: (1)計數(shù)器有3個控制按鈕1號、2號、3號,1個計數(shù)按鈕A。
(2)按完1號按鈕,再按A鈕,計數(shù)暑進入加計數(shù)狀態(tài),最大計到(5+組號) 2, 時間間隔為0.5s。
按完2號按鈕后,再按A按鈕,計數(shù)器進入減計數(shù)狀態(tài),從(5+組號) 2開始減計數(shù),時間、間隔為0.5s.
按完3號按鈕后,再按A按鈕,計數(shù)器保持顯示“Pp”字樣。
另外 :要求按下任意一個按鈕時,都會從頭計數(shù)
問一下各位大神怎么寫循環(huán)程序?
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit P10=P1^0;
- sbit P11=P1^1;
- sbit P12=P1^2;
- sbit P13=P1^3;
- uchar segcode[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar bitcode[]={0x01,0x02};
- uchar keycode1,keycode2;
- unsigned char Num[2];
- void delayms(uint m)
- {
- unsigned int n;
- while(m--)
- {
- for(n=0;n<113;n++);
- }
- }
- void numobuf(int i)
- {
- Num[1]=i/10;
- Num[0]=i%10;
- }
- void display(void)
- {
- unsigned int i;
- for(i=0;i<2;i++)
- {
- P2=bitcode[i];
- P0=segcode[Num[i]];
- delayms(1);
- }
-
- }
- void display2(void)
- {
- unsigned int i;
- for(i=0;i<2;i++)
- {
- P2=bitcode[i];
- P0=0x73;
- delayms(1);
- }
-
- }
- uchar keyscan1(void)
- {
- keycode1=0;
- if(P10==0)
- {
- delayms(10);
- if(P10==0)
- {
- while(P10==0);
- keycode1=1;
- }
- }
- if(P11==0)
- {
- delayms(10);
- if(P11==0)
- {
- while(P11==0);
- keycode1=2;
- }
- }
- if(P12==0)
- {
- delayms(10);
- if(P12==0)
- {
- while(P12==0);
- keycode1=3;
- }
- }
- return keycode1;
- }
- uchar keyscan2(void)
- {
- keycode2=0;
- if(P13==0)
- {
- delayms(10);
- if(P13==0)
- {
- while(P13==0);
- keycode2=1;
- }
- }
- return keycode2;
- }
- main()
- {
- int a=0;
- int i=0;
- int j=0;
- while(1)
- {
- P0=segcode[0];
- keycode1=0;
- keycode2=0;
- a=keyscan1();
- if(a==1)
- {
-
- while(keyscan2()==0);
- for(i=0;i<36;i++)
- {
- for(j=0;j<25;j++)
- {
- numobuf(i);
- display();
- delayms(10);
- }
- }
-
- }
- if(a==2)
- {
- while(keyscan2()==0);
- for(i=36;i>0;i--)
- {
- for(j=0;j<25;j++)
- {
- numobuf(i);
- display();
- delayms(10);
- }
- }
-
- }
- if(a==3)
- {
- while(keyscan2()==0);
- while(1)
- {
-
- display2();
- delayms(1);
- }
- }
-
- }
- }
復制代碼 |
|