|
刚学单片机一周,,按下S2数码管显示6,按下S3显示123456,按下S4从10显示到0,我写的不知道哪里出问题了,程序下载到单片机里还没按按键就开始从10显示到0了,并且重启单片机也是立马就从10显示到0,求大佬帮忙看一下哪里的问题
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit key3=P3^2;
- sbit DU=P2^6;
- sbit WE=P2^7;
- char W[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- char D[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void delayxms(unsigned int x)
- {
- unsigned char i, j;
- while(x>0){
- _nop_();
- i = 2;
- j = 199;
- do
- {
- while (--j);
- } while (--i);
- x--;
- }
- }
- void main()
- {
- int a,b;
- while(1)
- {
- if(key1==0)
- {
- delayxms(20);
- while(!key1);
- WE=1;
- P0=0X00;
- WE=0;
- DU=1;
- P0=0X7D;
- DU=0;
- }
- if(key2==0)
- {
- delayxms(20);
- while(!key2);
- while(1)
- {
- for(a=0;a<6;a++)
- {
- DU=1;
- P0=D[a+1];
- DU=0;
-
- P0=0xff;
- WE=1;
- P0=W[a];
- WE=0;
- delayxms(1);
- }
- }
- }
- if(key3==0)
- {
- delayxms(20);
- while(!key3);
- while(1)
- {
- b=100;
- while(b)
- {
- P0=0xff;
- WE=1;
- P0=0x7f;
- WE=0;
-
- DU=1;
- P0=D[0];
- DU=0;
- delayxms(5);
-
- P0=0XFF;
- WE=1;
- P0=0xbf;
- WE=0;
- DU=1;
- P0=D[1];
- DU=0;
- delayxms(5);
- b--;
- }
- P0=0XFF;
- WE=1;
- P0=0x7f;
- WE=0;
- DU=1;
- for(a=9;a>=0;a--)
- {
- P0=D[a];
- delayxms(1000);
- }
- }
- }
- }
- }
复制代码
|
-
1.png
(35.63 KB, 下载次数: 40)
代码
-
2.png
(10.05 KB, 下载次数: 44)
代码
-
3.png
(28.59 KB, 下载次数: 35)
代码
-
原理图1.png
(25.88 KB, 下载次数: 28)
原理图
-
原理图2.png
(181.39 KB, 下载次数: 25)
原理图
|