|
剛學單片機一周,,按下S2數(shù)碼管顯示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, 下載次數(shù): 40)
下載附件
2022-1-23 23:30 上傳
代碼
-
2.png
(10.05 KB, 下載次數(shù): 44)
下載附件
2022-1-23 23:30 上傳
代碼
-
3.png
(28.59 KB, 下載次數(shù): 35)
下載附件
2022-1-23 23:30 上傳
代碼
-
原理圖1.png
(25.88 KB, 下載次數(shù): 28)
下載附件
2022-1-23 23:30 上傳
原理圖
-
原理圖2.png
(181.39 KB, 下載次數(shù): 25)
下載附件
2022-1-23 23:31 上傳
原理圖
|