|
請(qǐng)教各位大神,高手,前輩;
小弟剛學(xué)51單片機(jī)不久,現(xiàn)在要做一個(gè)電路,但遇到問(wèn)題了,所以
來(lái)請(qǐng)教各位前輩,電路動(dòng)作如下:
單片機(jī):STC15W201S-DIP16
測(cè)試學(xué)習(xí)板:淘寶上購(gòu)得某款的mini 89c52學(xué)習(xí)板
(將學(xué)習(xí)板上89c52對(duì)應(yīng)的IO接點(diǎn)接到 STC15W201S IO口上)
IO腳位定義:定義3個(gè)io口為電平輸入(低電平觸發(fā))端口,
P5.5 = R
P5.4 = L
P3.2 = C
定義6個(gè)io口為輸出控制口(LED),
P1.0 ~ P1.5
程序說(shuō)明: 3個(gè)輸入上電後檢測(cè)低電平觸發(fā) (將學(xué)習(xí)板上的接地引腳做低電平信號(hào)),3個(gè)輸入不同組合,對(duì)應(yīng)輸出數(shù)組動(dòng)作
問(wèn)題說(shuō)明:以下程序是參考百度上有人寫(xiě)的按鍵檢測(cè)程序而修改的,而輸入端如果是只有1個(gè)或2個(gè)同時(shí)低電平,所對(duì)應(yīng)
輸出數(shù)組動(dòng)作是正常的,但是到最後如果3個(gè)輸入同時(shí)都是低電平就不會(huì)動(dòng)作了,像是卡住不動(dòng)了
請(qǐng)教前輩們,想請(qǐng)程序問(wèn)題和電路硬件問(wèn)題?
程序: 下面程序是否有瑕疵不完善,改如何修改,或者有更好的寫(xiě)法;
硬體電路:因?yàn)檩d學(xué)習(xí)板上是拉接地端引腳當(dāng)?shù)仉娖叫盘?hào),但實(shí)際電路輸入是DC12V,
請(qǐng)問(wèn)是否可接8050NPN三極管及電組做反相電路,可以的話要怎麼接電阻值該取多少?
不好意思,問(wèn)題敘述及程序有點(diǎn)亂,如果看得吃力,請(qǐng)見(jiàn)諒,懇請(qǐng)解惑,謝謝
- #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--);
- }
復(fù)制代碼
|
|