請教各位大神,高手,前輩;
小弟剛學51單片機不久,現(xiàn)在要做一個電路,但遇到問題了,所以
來請教各位前輩,電路動作如下:
單片機:STC15W201S-DIP16
測試學習板:淘寶上購得某款的mini 89c52學習板
(將學習板上89c52對應的IO接點接到 STC15W201S IO口上)
IO腳位定義:定義3個io口為電平輸入(低電平觸發(fā))端口,
P5.5 = R
P5.4 = L
P3.2 = C
定義6個io口為輸出控制口(LED),
P1.0 ~ P1.5
程序說明: 3個輸入上電後檢測低電平觸發(fā) (將學習板上的接地引腳做低電平信號),3個輸入不同組合,對應輸出數(shù)組動作
問題說明:以下程序是參考百度上有人寫的按鍵檢測程序而修改的,而輸入端如果是只有1個或2個同時低電平,所對應
輸出數(shù)組動作是正常的,但是到最後如果3個輸入同時都是低電平就不會動作了,像是卡住不動了
請教前輩們,想請程序問題和電路硬件問題?
程序: 下面程序是否有瑕疵不完善,改如何修改,或者有更好的寫法;
硬體電路:因為載學習板上是拉接地端引腳當?shù)仉娖叫盘?但實際電路輸入是DC12V,
請問是否可接8050NPN三極管及電組做反相電路,可以的話要怎麼接電阻值該取多少?
不好意思,問題敘述及程序有點亂,如果看得吃力,請見諒,懇請解惑,謝謝
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char code segR[]={
- 0xff,0xdf,0xcf,0x07,0xc3,0xc1,0xc0,0xc0,
- 0xe0,0xf0,0xf8,0xfc,0xfe,0xff
- };
- unsigned char code segL[]={
- 0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0xc0,
- 0xc1,0xc3,0xc7,0xcf,0xdf,0xff
- };
- unsigned char code segC[]={
- 0xff,0xc0,0xff,0xc0
- };
- unsigned char code segCR[]={
- 0xc7,0xc3,0xc1,0xc0,0xc0,
- 0xc4,0xc6,0xc7
- };
- unsigned char code segCL[]={
- 0xf8,0xf0,0xe0,0xc0,0xc0,
- 0xc8,0xd8,0xf8
- };
- unsigned char code segRL[]={
- 0xff,0xf3,0xe1,0xc0,0xc0,
- 0xcc,0xde,0xff
- };
- unsigned char code segCRL[]={
- 0xff,0xf3,0xe1,0xc0,0xc0,
- 0xcc,0xde,0xff
- };
- sbit P1_0=P1^0;
- sbit P1_1=P1^1;
- sbit P1_2=P1^2;
- sbit P1_3=P1^3;
- sbit P1_4=P1^4;
- sbit P1_5=P1^5;
- sbit C_key=P3^2;
- sbit L_key=P5^4;
- sbit R_key=P5^5;
- void Delay1(uchar tt);
- void key()
- {
- uchar i,k;
- P1=0xff;
- if(R_key==0 && L_key==1 && C_key==1)
- {
- // P1=0xc7;
- Delay1(10);
- if(R_key==0 && L_key==1 && C_key==1)
- {
- for(k=0;k<1;k++)
- {
-
- for(i=0;i<14;i++)
- {
-
- Delay1(50);
- P1=segR[i];
-
-
- }
- while(R_key==1 && L_key==1 && C_key==1);
- break;
- }
- }
- Delay1(10);
- while(!R_key && !L_key && !C_key);
- // P1=0xff;
- // break;
- }
- if(R_key==1 && L_key==0 && C_key==1)
- {
- // P1=0xf8;
- Delay1(10);
- if(R_key==1 && L_key==0 && C_key==1)
- {
- for(k=0;k<1;k++)
- {
-
- for(i=0;i<14;i++)
- {
-
- Delay1(50);
- P1=segL[i];
-
-
- }
- // while(!L_key && R_key==1 && C_key==1);
- // P1=0xff;
- // break;
- }
- }
- Delay1(10);
- while(!L_key && !R_key && !C_key);
- // P1=0xff;
- // break;
- }
- if(R_key==0 && L_key==0 && C_key==1)
- {
- P1=0xff;
- Delay1(10);
- if(R_key==0 && L_key==0 && C_key==1)
- {
- for(k=0;k<1;k++)
- {
-
- for(i=0;i<8;i++)
- {
-
- Delay1(50);
- P1=segRL[i];
-
-
- }
- // while(!L_key && !R_key && C_key==1);
- // P1=0xff;
- // break;
- }
- }
- Delay1(10);
- while(!L_key && !R_key && !C_key);
- // P1=0xff;
- // break;
- }
- if(R_key==0 && L_key==1 && C_key==0)
- {
- P1=0xc7;
- Delay1(10);
- if(R_key==0 && L_key==1 && C_key==0)
- {
- for(k=0;k<1;k++)
- {
-
- for(i=0;i<8;i++)
- {
-
- Delay1(50);
- P1=segCR[i];
-
-
- }
- // while(!R_key && !L_key && !C_key);
- // break;
- }
- }
- Delay1(10);
- while(!R_key && !L_key && !C_key);
- // P1=0xff;
- // break;
- }
- if(R_key==1 && L_key==0 && C_key==0)
- {
- P1=0xf8;
- Delay1(10);
- if(R_key==1 && L_key==0 && C_key==0)
- {
- for(k=0;k<1;k++)
- {
-
- for(i=0;i<8;i++)
- {
-
- Delay1(50);
- P1=segCL[i];
-
-
- }
- // while(!R_key && !L_key && !C_key);
- // break;
- }
- }
- Delay1(10);
- while(!R_key && !L_key && !C_key);
- // P1=0xff;
- // break;
- }
- if(R_key==1 && L_key==1 && C_key==0)
- {
- P1=0x00;
- Delay1(10);
- if(R_key==1 && L_key==1 && C_key==0)
- {
- for(k=0;k<1;k++)
- {
-
- for(i=0;i<4;i++)
- {
-
- Delay1(50);
- P1=segC[i];
-
-
- }
- // while(!R_key && !L_key && !C_key);
- // break;
- }
- }
- Delay1(10);
- while(!R_key && !L_key && !C_key);
- // P1=0xff;
- // break;
- }
- if(R_key==0 && L_key==0 && C_key==0)
- {
- P1=0x00;
- Delay1(10);
- if(R_key==0 && L_key==0 && C_key==0)
- {
- for(k=0;k<1;k++)
- {
-
- for(i=0;i<8;i++)
- {
-
- Delay1(50);
- P1=segCRL[i];
-
-
- }
- // while(!R_key && !L_key && !C_key);
- // break;
- }
- }
- Delay1(10);
- while(!R_key && !L_key && !C_key);
- // P1=0xff;
- // break;
- }
- }
- void main()
- {
- // uchar i,k;
- P1=0xff;
- C_key=1;
- R_key=1;
- L_key=1;
- while(1)
- {
- key();
- }
- }
- void Delay1(uchar tt)
- {
- uchar aa,bb;
- for(;tt>0;tt--)
- for(bb=38;bb>0;bb--)
- for(aa=130;aa>0;aa--);
- }
復制代碼
|