痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 4382|回復: 13

簡化數位控制輸出 15f204ea 顯示+控制

[複製鏈接]
發表於 2013-6-21 20:11:30 | 顯示全部樓層 |閱讀模式
簡化 上次的數位控制電源使用 單一個 mcu STC15F204EA  使用 串列模式 74HC595取代 74HC573 可以由原先的 2條控制線+8條資料線 變成3條控制線 ,並採用 LEGION大的建議,使用 1A/D 取代6條按鍵控制線,仍然使用 8bit R-2R 模式....
最大問題是 A/D 讀取按鍵會有偶發的錯誤,請 大家幫忙修改 感謝!!

上方是電壓輸出 電流輸出 下方為 R-2R 輸出 最前方@ 表示輸出中...

簡化01.JPG

簡化03.JPG

簡化02.JPG



/*有缺點 按鍵會有些誤動作 20130621 使用 2線控制6按鍵 A/D轉換 0 電壓 1 電流 2參考電壓 3 按鍵掃描 ,利用74595兩個形成 串列輸入並列 R2R 產生類比電壓值*/


#include<STC15F204EA.h>
#include<intrins.h>
sbit RS = P3^7;   //LCM control
sbit RW = P3^6;
sbit EN = P3^5;
//----------------------------below----NEW---------
sbit SER = P3^4;// 74hc595 control
sbit Latch = P3^3;
sbit Clk = P3^2;

bit Startflag;//start 1/ stop 0
bit VoI_flag;//volt 1 /current 0
bit Ts_flag;// down count second no use
bit TimeFlag;      //T0 counter
unsigned char  counter; //T0counter
unsigned char Tcounter;//T1 counter no use
unsigned char Idata;//current setting data send to DAPort then I_SET & I_CLR
unsigned char Vdata;//volt setting data send to DAPort  then V_SET & V_CLR
unsigned char Idigt;// LCM 3bit   0.00 ~ 1.00 000~100
unsigned char Vdigt;//LCM V 3bit   00.0~15.0 000~150
float I_factor,V_factor;//factor for  D/A Port  no use
unsigned int KS;//key read 3 times data
bit Kinc;
bit Kdec;
bit Kls;
bit Krs;
bit VoI;
bit STRP;
bit Khold;

//-------------------up new------------------
char displayword[16];
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P2 //STC15F204EA P1 A/D P2 LCM P3^7--RS  P3^6--W/R P3^5--E
unsigned int R,L,M,N,Q,I;//unsigned int R,M,N;//-Y?w…ó|¨uchar?′N¥uˉà?F¥ü2.5V¥H¤Uao??-è
//signed int SV,AV;//′?oa?áao3]?w???×sv=100/V ′?oa?áao??°????×av=100/V
signed int Difv;
unsigned int Mavg(unsigned char an);
  void Send595(unsigned char Dat) ;
unsigned char Read (unsigned char CHA);
void DelayMs(unsigned char t);
  void Send2byte(unsigned char Dat1,unsigned char Dat2);
//--------------------------------------------------------------------------------------------
void Init_Timer0(void)
{
TMOD |= 0x01;      //mode 1,16bit timer "|"can "OR"operation                    
TH0= (65536-2000)/256; //   0x0D8 2ms if 12Mcristal
TL0= (65536-2000)%256;// 0x0F0
EA=1;         
ET0=1;         
TR0=1;         
}


//--------------------------------------------------------------------------------------------
void Timer0_isr(void) interrupt 1
{
TH0= (65536-2000)/256; //   0x0D8 2ms if 12Mcristal
TL0= (65536-2000)%256;// 0x0F0
    counter++;//counter is Global variable.
    if(counter>150)          //140ms update 1 time
     {      
      TimeFlag=1;            //
          counter=0;
        }//if(counter>70)
}

//convert 6 key to 1.on/off 2.VoI  3.inc  4.dec  5. <   6. >
// bit--on bit--inc bit--dec bit-off
void Keyscan(void)
{
        KS=Read(3);//Read(3); //key scan read port3
        if(KS>220) Khold=0;
if((KS<215)&&(!Khold))
{
          Khold=1;
         DelayMs(200);
         KS=Mavg(3);         
         if((KS<215)&&(KS>208)) //1st key on/off press
                                 Krs=1;
        else if((KS<208)&&(KS>195))//2nd key VoI press
             Kls=1;
        else if((KS<195)&&(KS>175))//3rd key Inc press
          Kdec=1;
        else if((KS<175) &&(KS>150)) //4th key Dec press       
                   Kinc=1;
        else if((KS<150)&&(KS>100))//5th key "<" press                 
        VoI=1;
        else if(KS<100)// 6 th key ">" press
                                STRP=1;
  }
        else //key release
        { //
     Khold=0;               
   }
}

//*******************待處理******************
void OP(bit K)//output control
{
  if (K)// data op =set
   {
     Send2byte(Idata,Vdata);// volt & current data sent to i/o and latch
    }
else //data output=0
  {
// reset volt & current data sent to i/o and latch
Send2byte(0x00,0x00);
}
}


void Key_Pros (void)
{
                {
                        if(STRP) {STRP=0;Startflag=!Startflag;}//ON/OFF
                        else if(VoI)  {VoI=0;VoI_flag=~ VoI_flag;}// Volt or Current
                        else if (Kls) // shift left "<"
                        {
                                Kls=0;//-------------------------------------
                                   if(VoI_flag)   
            {
              Vdigt++;
            if(Vdigt>2) Vdigt=0;
           }
       else
         {
         Idigt++;
            if(Idigt>2) Idigt=0;
           }
                        }
                        else if(Krs) //shift right ">"
                        { Krs=0;//-----------------------------
                                           if(VoI_flag)   
{
              Vdigt--;
       if(Vdigt==255) Vdigt=2;
    }
  else
   {
    Idigt--;
     if(Idigt>255) Idigt=2;
    }
                        }
                        else if(Kinc)
                        { Kinc=0;//------------------------
                                    if(VoI_flag)  //volt   
                   {
                     if(Vdigt==0) Vdata=Vdata++;
                     if(Vdigt==1) Vdata=Vdata+10;
                     if(Vdigt==2) Vdata=Vdata+100;
                     if(Vdata>250) Vdata=250;            
                    }
                else
                                {
                                if(Idigt==0) Idata=Idata++;
                                if(Idigt==1) Idata=Idata+10;
                                if(Idigt==2) Idata=Idata+100;
                                if(Idata>210) Idata=210;
                                }
                        }
                        else if(Kdec)
                        { Kdec=0;//---------------------------
                                           if(VoI_flag)  //volt   
{
if(Vdigt==0) Vdata=Vdata--;
if(Vdigt==1) Vdata=Vdata-10;
if(Vdigt==2) Vdata=Vdata-100;
if(Vdata>250) Vdata=0;            
    }
  else
   {
if(Idigt==0) Idata=Idata--;
if(Idigt==1) Idata=Idata-10;
if(Idigt==2) Idata=Idata-100;
if(Idata>210) Idata=0;
     }
                        }
                }
        }


//*******************************************
void Send595(unsigned char Dat) //output data to D/A converter through the serial mode
{
         unsigned char i;
         for (i=0;i<8;i++)
         {
                 Clk=0;
                 SER=Dat & 0x80;
                 _nop_();
       
                 Dat<<=1;
                 Clk=1;
                 _nop_();
       
         }
         Latch=0;
         _nop_();
       
         _nop_();
         Latch=1;
         _nop_();
         _nop_();
}

void Send2byte(unsigned char Dat1,unsigned char Dat2)
{
         Send595(Dat1);
         Send595(Dat2);
}

/*------------------------------------------------
delay us
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}
/*------------------------------------------------
delay ms
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
while(t--)
{
   DelayUs2x(245);
         DelayUs2x(245);
}
}


/*------------------------------------------------
           LCM driver
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}

void LCD_Write_Com(char com) //?R¥O?g¤J 4bit
{  
while(LCD_Check_Busy()); //|£?hμ¥?Y 1=while loop still;
RS_CLR; //?ü¥O¥\ˉà
RW_CLR; //?g¤J
EN_SET; //¤U-°?t ¥?HI?ü|¨LO
DataPort= com; // ?ü¥O3]?w
_nop_();
EN_CLR;//
com<<=4;
EN_SET; //¤U-°?t ¥?HI?ü|¨LO
_nop_();
DataPort= com; // ?ü¥O3]?w
EN_CLR;//
DelayMs(1);
}

void LCD_Write_Data(char Data) //?ê???g¤J4bit
{
while(LCD_Check_Busy()); //|£?hμ¥?Y
RS_SET; // ?ê??3B2z
RW_CLR;// ?gao°ê§@
EN_SET; // ±ò°ê¤U?t?2μo
DataPort= Data; //?é¤J?Y-n?g¤Jao?ê??
_nop_();//?μ?á¤@-ó?é?
EN_CLR;//
Data<<=4;
  EN_SET; // ±ò°ê¤U?t?2μo
DataPort= Data; //?é¤J?Y-n?g¤Jao?ê??
_nop_();//?μ?á¤@-ó?é?
EN_CLR;//
DelayMs(1);//μ1 1T MCU ¨?¥?
}



/*------------------------------------------------
                2M?ì¨???
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
              ?à¤J|r2?|ê¨???
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{     
if (y == 0)
        {     
         LCD_Write_Com(0x80 + x);     
        }
else
        {     
        LCD_Write_Com(0xC0 + x);     
        }        
while (*s)
        {     
LCD_Write_Data( *s);     
s ++;     
        }
}
/*------------------------------------------------
              ?à¤J|r2?¨???
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{     
if (y == 0)
        {     
        LCD_Write_Com(0x80 + x);     
        }   
else
        {     
        LCD_Write_Com(0xC0 + x);     
        }        
LCD_Write_Data( Data);  
}

void LCD_Write_FChar(unsigned char x,unsigned char y)
{     //write cursor flash
if (y == 0)
        {     
        LCD_Write_Com(0x80 + x);     
        }   
else
        {     
        LCD_Write_Com(0xC0 + x);     
        }
LCD_Write_Com(0x0f);       
}

/*------------------------------------------------
            initial LCM
------------------------------------------------*/
void LCD_Init(void)
{
   LCD_Write_Com(0x28);    /*4bit mode*/
   DelayMs(5);
   LCD_Write_Com(0x28);
   DelayMs(5);
   LCD_Write_Com(0x28);
   DelayMs(5);
   LCD_Write_Com(0x28);  
   LCD_Write_Com(0x08);    /*?F¥ü?×??*/
   LCD_Write_Com(0x01);    /*?F¥ü2M?ì*/
   LCD_Write_Com(0x06);    /*?F¥ü¥ú?á2??e?|?m*/
   DelayMs(5);
   LCD_Write_Com(0x0C);    /*?F¥ü…{¤?¥ú?á?|?m*/
   }

/*******************************************************************
analog input  DATA read
*******************************************************************/
unsigned char Read (unsigned char CHA)
         {
     unsigned char AD_FIN=0; //|s‰éA/D?H???á§ó;-Y|b¨???¥~?w…ó|1?@q?h¤£ˉà±o¨ì?2?¢?@¤?ao?ò‰Tqao?F¥ü
/******¥H¤U?oADCaì?l¤?μ{§?****************************/
    CHA &= 0x07;            //‰u?áADCao8?a±μ¤f¤¤ao¤@?a?]0000 0111 2M0°a5|ì?^
    ADC_CONTR = 0x60;  //ADC?H??ao3t?×?]0XX0 0000 ¨?¤¤XX±±¨?3t?×?A?[?ú?u???u¤a???|?m?^
    _nop_();
    ADC_CONTR |= CHA;       //‰u?áA/D…??e3q1D
    _nop_();
    ADC_CONTR |= 0x80;      //?Q?eA/D?z??
    DelayMs(1);            //¨?‰r¤J?z‰í?c¨ì???w?]1ms§Y¥i?
/******¥H¤U?oADC?ù|?μ{§?****************************/
    ADC_CONTR |= 0x08;      //?Q?eA/D?H???]0000 1000 ¥OADCS = 1?^
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while (AD_FIN ==0){     //μ¥?YA/D?H??…C§?
    AD_FIN = (ADC_CONTR & 0x10); //0001 0000?ò?IA/D?H??…C§?§_
    }
    ADC_CONTR &= 0xE7;      //1111 0111 2MADC_FLAG|ì, ?×??A/D?H??,
  return(ADC_RES);
}



unsigned int Mavg(unsigned char an)
// read 10 times data and average
// an for analog input no.
{
        unsigned char at;
        unsigned int M;
        M=0;
        for (at=0;at<3;at++)
  {
                M=Read(an)+M;//analog 3 input
                DelayMs(250);
        }
        M=M/3;
        return M;
}
/******************************************************************
?F¥ü¨????H??¨????G
M=?ò‰Tqa??T-è?AN=°ò-??z‰í??a??T-è?]¥?¨ò?o2.5V?^?AR=?ò‰Tq‰r¤J-è?]?Y?F¥ü-è?^
N=256*2.5/Vcc?F?@§?|Z±oVcc=256*2.5/N?F ¥N¤JM=256*R/Vcc?F±o¨ìM=R*N/2.5?F?@§?|Z±oR=M*2.5/N
1?o‰r¤JoY¤à‰í¤??C
******************************************************************/
void transfer(void){
       
L= Mavg(0);//Read(0); // read volt analog
I= Mavg(1);//read (1) read current analog
N=Read(2);//P1.2¤f2.5V°ò-??z‰í??a??T?]?H???^
Q=(L*2.50/N)*100; //Q=display volt data
R=((I*2.50)/(N))*100;//R=display current data 1V=1A ??10:1 ??
}


void Display_pros(void)
{
        displayword[0]=' ';
        displayword[1]='V';//Tab[IRcord[0]/16];
        displayword[2]='=';//Tab[IRcord[0]%16];
        displayword[3]= Q/100+'0';
        displayword[4]= (Q%100)/10+'0';
        displayword[5]= '.';
        displayword[6]=(Q%10)+'0';
        displayword[7]='V';
        displayword[8]= ' ';
        displayword[9]= 'I';
        displayword[10]='=';
        displayword[11]= R/100+'0';
        displayword[12]= '.';
        displayword[13]=(R%100)/10+'0';
        displayword[14]=R%10+'0';
        displayword[15]='A';
         LCD_Write_String(0,0, displayword);//??¥ü|b2?¤G|?       
if(Startflag) displayword[0]='@';
         else displayword[0]=' ';
        displayword[1]='V';
        displayword[2]='=';
        displayword[3]= Vdata/100+'0';
        displayword[4]= Vdata /10%10+'0';
        displayword[5]= '.';
        displayword[6]= Vdata %10%10+'0';
        displayword[7]= 'V';
        displayword[8]= ' ';
        displayword[9]= 'I';
        displayword[10]= '=';
        displayword[11]= Idata/100+'0';
        displayword[12]= '.';
        displayword[13]= Idata /10%10+'0';
        displayword[14]= Idata %10%10+'0';
        displayword[15]='A';
    LCD_Write_String(0,1, displayword);//??????
          if(VoI_flag)
{         
   if(Vdigt==2) LCD_Write_FChar(3,1);
         else if(Vdigt==1) LCD_Write_FChar(4,1);
         else LCD_Write_FChar(6,1);
  }
  else
        {
   if(Idigt==2) LCD_Write_FChar(11,1);
         else if(Idigt==1) LCD_Write_FChar(13,1);
         else LCD_Write_FChar(14,1);
           }  
}
  


void main(void)
{
P1M0 = 0xff; //P1.0/P1.1?G1111 1111?]°aay?^//a`?N?G§ó§?ADC3q1D?o…§|P?o’a?á‰?aoIO±μ¤f-ק??o°aay‰r¤J?C
P1M1 = 0x00; //P1.0/P1.1?G0000 0000
P1ASF=0xff;        //all analog in put mode
Init_Timer0();//initial timer0
LCD_Init();
LCD_Clear();//2M?ì

while (1)
{
if(TimeFlag==1)//140ms update
  {
  TimeFlag=0;
      Display_pros();//display data
  }
if(Startflag)
   {
    OP(1); //out put on
   }
         else
         {
                 OP(0); //output set volt & current to 0
          }
        DelayMs(100);
transfer();//do ADC & put  to display
Keyscan();//read key press        
Key_Pros ();// scan key and do something
         
}
}

發表於 2013-6-21 20:36:12 | 顯示全部樓層
你有處理按鍵彈跳的問題嗎????

得到按鍵值.....然後delay一些時間再讀一次確認.......一致才算是真的按鍵...
 樓主| 發表於 2013-6-21 20:42:03 | 顯示全部樓層
imcrazy 發表於 2013-6-21 08:36 PM static/image/common/back.gif
你有處理按鍵彈跳的問題嗎????

得到按鍵值.....然後delay一些時間再讀一次確認.......一致才算是真的按鍵. ...

imcrazy大:
   感謝喔!!
 樓主| 發表於 2013-6-26 22:51:30 | 顯示全部樓層

請前輩們幫忙解決這樣的問題!!

本帖最後由 antlu 於 2013-6-27 01:33 AM 編輯

電路調整電壓部分之後開始著手找外殼,找到一個以前的監視器選擇器,裡面的零件早已經不見了(太複雜沒辦法用!)剛好可以放進這一片板子,因為兩個顯示幕高度沒辦法放在前方只好放在上面,若要把外殼鐵板挖洞那可是大工程(我沒有 火焰切割器或是P大的雙手萬能!)只好找一塊 台泥強化板來用(5mm)問題來了按鍵也在下面到目前還沒辦法搞好它!(學機械的真厲害!!)
    測試後的問題:
    1.當初無載 設定5V輸出顯示5V,可是一接上負載 10歐姆就出現一個現象,設定5V 輸出剩下4.6~4.5V 設定 10V輸出剩下 9.4~9.5V 我猜想應該是OPA比較後輸出推動電晶體把 LM317拉下來造成的,於是用軟體把它加上6的數目(0.6V)這樣下來就比較接近了,電流控制也類似這樣的問題(我沒有補償).
    2. 電流檢出的位置是採 高電位方式所以會連整個電路使用的電流都會被檢出來,這個應該無解,除非改成輸出地電位電流檢出方式吧!!
   3. 輸出顯示部分不太穩定,使用外接 FLUK電表顯示穩定,但是 15F204EA 顯示電壓卻有些變動 0.3~.04V變動,這還需要再做確認是 電壓分壓可變電組的問題還是"另有隱情(引擎)"

   改善部分:
     1.啟動時的狀態: 輸出 4.2V  0.3A 設定位置 電流 電壓都在第二位 方便增加/減少 1V 0.1A  
     

上視:
    PS裝箱01.JPG

   前視:
    PS裝箱02.JPG 使用外接筆電電源

LM317:
    PS裝箱06.JPG

輸出OFF時: 1.7V
    PS裝箱05.JPG
    PS裝箱04.JPG

按鍵問題還為解決,用 LED代替按鍵
   PS裝箱07.JPG
   PS裝箱14.JPG

輸出時:
    PS裝箱09.JPG

  給 LED供電
   PS裝箱12.JPG

  問題點出現:
      無載時候波形還能看
       PS裝箱16.JPG

     有載波形變成"鋸齒波"了!! 這應該是 OPA 當做比較器,增益過高所導致的吧!! 請前輩幫忙修改電路!!
      PS裝箱17.JPG
   
PS裝箱15.JPG
發表於 2013-6-27 15:10:41 | 顯示全部樓層
antlu 發表於 2013-6-26 10:51 PM static/image/common/back.gif
電路調整電壓部分之後開始著手找外殼,找到一個以前的監視器選擇器,裡面的零件早已經不見了(太複雜沒辦法用! ...

LM317 第1腳 8.2K 電阻並 uF 級電容,
或是 12K 回授電阻並 nf 級電容降低高頻增益試試.
發表於 2013-6-27 15:19:11 | 顯示全部樓層
imcrazy 發表於 2013-6-21 08:36 PM static/image/common/back.gif
你有處理按鍵彈跳的問題嗎????

得到按鍵值.....然後delay一些時間再讀一次確認.......一致才算是真的按鍵. ...


以個人寫程式習慣,讀取開關或按鍵都是每隔1mS連續30次都一樣才算數,為了不影響主程式進行,除彈跳程式都放在計時中斷裡執行,再以記憶體數值或旗號通知主程式。
 樓主| 發表於 2013-6-27 19:55:48 | 顯示全部樓層
oldhan 發表於 2013-6-27 03:10 PM static/image/common/back.gif
LM317 第1腳 8.2K 電阻並 uF 級電容,
或是 12K 回授電阻並 nf 級電容降低高頻增益試試. ...

OLDHAN大:
   感謝!! 兩個我都會加上去,完成後再PO照片回報!
 樓主| 發表於 2013-6-27 20:08:47 | 顯示全部樓層
ysc 發表於 2013-6-27 03:19 PM static/image/common/back.gif
以個人寫程式習慣,讀取開關或按鍵都是每隔1mS連續30次都一樣才算數,為了不影響主程式進行,除彈跳程式 ...

YSC大:
   感謝指導!!
    跳彈 中斷 檢測 比對... 感覺上 按鍵讀取的這部分需要花不少的功夫!!(我以前都沒想到會這麼複雜!!), 我是利用按鍵分壓得到的A/D值,還怕日後會不會阻值變了,影響按鍵的分辯...  你建議的1MS連續30次,我會好好想想程式要如何改!  
發表於 2013-6-27 20:51:18 | 顯示全部樓層
阿乾大:
這個Key 4x4 C code 給您玩的.
 樓主| 發表於 2013-6-27 21:11:12 | 顯示全部樓層
scottwang 發表於 2013-6-27 08:51 PM static/image/common/back.gif
阿乾大:
這個Key 4x4 C code 給您玩的.

SCOTTWANG大:
   感謝!! 我了解看看!! 看跟LEGION大給的差異多少?
發表於 2013-6-27 22:20:40 | 顯示全部樓層
antlu 發表於 2013-6-27 08:08 PM static/image/common/back.gif
我是利用按鍵分壓得到的A/D值,還怕日後會不會阻值變了,影響按鍵的分辯.....


這部份應該還好,汽車方向盤上的操作鍵也是利用一排串連電阻來分壓,只要2條線就可傳遞多個開關訊息,只是寫程式時需要考慮電壓、電阻偏移,一般以上下限區間來認定,所以除了彈跳問題之外又多了電壓辨識上下限。
發表於 2013-6-27 23:36:00 | 顯示全部樓層
antlu 發表於 2013-6-27 08:08 PM static/image/common/back.gif
YSC大:
   感謝指導!!
    跳彈 中斷 檢測 比對... 感覺上 按鍵讀取的這部分需要花不少的功夫!!(我以前 ...

基本上...用計時中斷處理按鍵反而會比較容易簡單些啦.....沒你想像中的複雜...

一般按鍵彈跳大概頂多幾ms而已...
我的習慣是10ms取樣......連續兩次一樣就代表按鍵成立.....也就是20ms按鍵穩定時確認按鍵.....間隔遠大於彈跳時間...

按鍵確認後的計數次數是在辨別長按鍵或是短按鍵........比如說短按鍵是增加0.1V.... 長按鍵是增加1V或是加速自動增加0.1V直到放開按鍵.....

當然你要加強確認按鍵機制也行啦.......不過我的確認方式目前還沒遭遇過問題啦..

====================
用A/D按鍵分壓的確會有你說的問題......很多LCD螢幕都是用這方式節省IO.......
其按鍵出問題大多是幾年後按鍵觸點氧化阻抗升高造成問題..........用一般IO的鍵盤處理比較能忍受按鍵觸點氧化阻抗升高.....不過那是幾年後的事情....不用先想那麼多.......
 樓主| 發表於 2013-6-28 00:49:58 | 顯示全部樓層
imcrazy 發表於 2013-6-27 11:36 PM static/image/common/back.gif
基本上...用計時中斷處理按鍵反而會比較容易簡單些啦.....沒你想像中的複雜...

一般按鍵彈跳大概頂多幾m ...

imcrazy大:
   感謝指導!! 現在問題更大條了... http://bbs.pigoo.com/forum.php?m ... ;tid=45923#lastpost 請大家幫忙!!
發表於 2013-6-28 12:53:16 | 顯示全部樓層
antlu 發表於 2013-6-28 12:49 AM static/image/common/back.gif
imcrazy大:
   感謝指導!! 現在問題更大條了... http://bbs.pigoo.com/forum.php?mod=viewthread&tid=459 ...

類比的東西可能會有比較多一點問題....所以一般人可能比較難給你意見吧....

再加上你的應用方式已經非常規用法了....我也沒試過...我以前只用過OP+317reference buffer輸出是OK且直觀的..
但你的用法太特別了,....以前我沒用過,故也不知會遇到什麼問題....
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-5-3 05:41 AM , Processed in 0.075145 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.