|
计数器模拟。
要求: (1)计数器有3个控制按钮1号、2号、3号,1个计数按钮A。
(2)按完1号按钮,再按A钮,计数暑进入加计数状态,最大计到(5+组号) 2, 时间间隔为0.5s。
按完2号按钮后,再按A按钮,计数器进入减计数状态,从(5+组号) 2开始减计数,时间、间隔为0.5s.
按完3号按钮后,再按A按钮,计数器保持显示“Pp”字样。
另外 :要求按下任意一个按钮时,都会从头计数
问一下各位大神怎么写循环程序?
- #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);
- }
- }
-
- }
- }
复制代码 |
|