欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3393|回復: 6
打印 上一主題 下一主題
收起左側

為什么我的ds18b20不顯示,請大佬們解答

[復制鏈接]
跳轉到指定樓層
樓主

#include <reg52.h>                 //調用單片機頭文件
#include <intrins.h>
#define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535

sbit clk = P1^3;          //ds1302時鐘線定義
sbit io =  P1^4;          //數據線
sbit rst = P1^5;          //復位線
sbit DQ= P1^7;          //溫度線                                                           //秒  分   時   日   月  年   星期         
uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //寫地址
uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //讀地址
uchar code init_ds[]  ={0x55,0x17,0x15,0x01,0x01,0x13,0x13};   
uchar miao,fen,shi,ri,yue,week,nian;
uchar i;

uchar count = 0,count1 = 0,speed = 0,quan = 0;//中斷次數計算,速度
unsigned long speed1,juli,time2;
float f_hz,speed_km,speed_m;

uchar flag_lc = 0;   //開始計算速度使能

uint juli_s;             //每秒走的距離

float zhijing = 1;  //直徑 0.55M
uint s_zhijing = 100;


uchar menu_1;        //菜單設置變量
uchar menu_2;        //菜單設置變量



uchar flag_200ms;
uint shudu;   //定義速度的變量
uint bj_shudu = 70;         //報警速度


//這三個引腳參考資料
sbit rs=P1^0;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit rw=P1^1;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit e =P1^2;         //片選信號   下降沿觸發

uchar code table_num[]="0123456789abcdefg";
uchar i;

sbit beep = P3^7;   //蜂鳴器IO口定義



/******************1ms 延時函數*******************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<120;j++);
}

/********************************************************************
* 名稱 : delay_uint()
* 功能 : 小延時。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay_uint(uint q)
{
        while(q--);
}

/********************************************************************
* 名稱 : write_com(uchar com)
* 功能 : 1602命令函數
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void write_com(uchar com)
{
        i =0;
        e=0;
        rs=0;
        rw=0;
        P0=com;
        delay_uint(3);
        e=1;
        delay_uint(25);
        e=0;
}

/********************************************************************
* 名稱 : write_data(uchar dat)
* 功能 : 1602寫數據函數
* 輸入 : 需要寫入1602的數據
* 輸出 : 無
***********************************************************************/
void write_data(uchar dat)
{
        i =0;
        e=0;
        rs=1;
        rw=0;
        P0=dat;
        delay_uint(3);
        e=1;
        delay_uint(25);
        e=0;        
}

/********************************************************************
* 名稱 : write_sfm2(uchar hang,uchar add,uchar date)
* 功能 : 顯示2位十進制數,如果要讓第一行,第五個字符開始顯示"23" ,調用該函數如下
                  write_sfm1(1,5,23)
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void write_sfm2(uchar hang,uchar add,uint date)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(0x30+date/10%10);
        write_data(0x30+date%10);        
}

/********************************************************************
* 名稱 : write_sfm4(uchar hang,uchar add,uchar date)
* 功能 : 顯示2位十進制數,如果要讓第一行,第五個字符開始顯示"23" ,調用該函數如下
                  write_sfm1(1,5,23)
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void write_sfm4(uchar hang,uchar add,uint date)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(0x30+date/10000%10);
        write_data(0x30+date/1000%10);
        write_data(0x30+date/100%10);        
        write_data(0x30+date/10%10);
        write_data(0x30+date%10);        
        write_data('k');        
        write_data('m');        
}

void write_sfm7(uchar hang,uchar add,uint date)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(0x30+date/100000%10);
        write_data(0x30+date/100000%10);
        write_data(0x30+date/10000%10);
        write_data(0x30+date/1000%10);
        write_data('.');        
        write_data(0x30+date/100%10);        
        write_data(0x30+date/10%10);
        write_data('k');        
        write_data('m');        
}

/***********************lcd1602上顯示兩位十進制數************************/
void write_sfm1(uchar hang,uchar add,uchar date)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(0x30+date % 10);        
}


/********************************************************************
* 名稱 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
                  write_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
                while(1)
                {
                        if(*p == '\0')  break;
                        write_data(*p);
                        p++;
                }        
}


/***********************lcd1602上顯示兩位十進制數************************/
void write_sfm2_ds1302(uchar hang,uchar add,uchar date)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(table_num[date / 16]);
        write_data(table_num[date % 16]);        
}

/***********************lcd1602上顯示兩位十進制數************************/
void write_sfm3_ds18b20(uchar hang,uchar add,uchar date)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(table_num[date / 16]);
        write_data(table_num[date % 16]);        
}

/*****************控制光標函數********************/
void write_guanbiao(uchar hang,uchar add,uchar date)
{               
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        if(date == 1)        
                write_com(0x0c);   //關閉光標
}         

/********************************************************************
* 名稱 : init_1602()
* 功能 : 初始化1602液晶
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void init_1602()      //1602初始化
{
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        delay_uint(1000);
        write_string(1,0,"sd:00km/h  00:00:00  ");               
        write_string(2,0," 00 ");        
}


/*************寫18b20內的數據***************/
void write_18b20(uchar dat)
{
        uchar i;
        for(i=0;i<8;i++)
        {                                         //寫數據是低位開始
                DQ = 0;                         //把總線拿低寫時間隙開始
                DQ = dat & 0x01; //向18b20總線寫數據了
                delay_uint(5);         // 60us
                DQ = 1;                         //釋放總線
                dat >>= 1;
        }        
}

/*************讀取18b20內的數據***************/
uchar read_18b20()
{
        uchar i,value;
        for(i=0;i<8;i++)
        {
                DQ = 0;                         //把總線拿低讀時間隙開始
                value >>= 1;         //讀數據是低位開始
                DQ = 1;                         //釋放總線
                if(DQ == 1)                 //開始讀寫數據
                        value |= 0x80;
                delay_uint(5);         //60us        讀一個時間隙最少要保持60us的時間
        }
        return value;                 //返回數據
}

/*************讀取溫度的值 讀出來的是小數***************/
uint read_temp()
{
        uint value;
        uchar low;                           //在讀取溫度的時候如果中斷的太頻繁了,就應該把中斷給關了,否則會影響到18b20的時序
        write_18b20(0xcc);           //跳過64位ROM
        write_18b20(0x44);           //啟動一次溫度轉換命令
        delay_uint(50);                   //500us


        write_18b20(0xcc);           //跳過64位ROM
        write_18b20(0xbe);           //發出讀取暫存器命令

        EA = 0;
        low = read_18b20();           //讀溫度低字節
        value = read_18b20();  //讀溫度高字節
        EA = 1;
        value <<= 8;                   //把溫度的高位左移8位
        value |= low;                   //把讀出的溫度低位放到value的低八位中
        value *= 0.625;               //轉換到溫度值 小數
        return value;                   //返回讀出的溫度 帶小數
}
/*************寫一個數據到對應的地址里***************/
void write_ds1302(uchar add,uchar dat)
{               
        rst = 1;                         //把復位線拿高
        for(i=0;i<8;i++)
        {                                     //低位在前
                clk = 0;                 //時鐘線拿低開始寫數據
                io = add & 0x01;            
                add >>= 1;                 //把地址右移一位
                clk = 1;                 //時鐘線拿高
        }        
        for(i=0;i<8;i++)
        {
                clk = 0;                 //時鐘線拿低開始寫數據
                io = dat & 0x01;
                dat >>= 1;                 //把數據右移一位
                clk = 1;                 //時鐘線拿高
        }
        rst = 0;                         //復位線合低
        clk = 0;
        io = 0;
}

/*************從對應的地址讀一個數據出來***************/
uchar read_ds1302(uchar add)
{
        uchar value,i;
        rst = 1;                         //把復位線拿高
        for(i=0;i<8;i++)
        {                                     //低位在前
                clk = 0;                 //時鐘線拿低開始寫數據
                io = add & 0x01;            
                add >>= 1;                 //把地址右移一位
                clk = 1;                 //時鐘線拿高
        }               
        for(i=0;i<8;i++)
        {
                clk = 0;                 //時鐘線拿低開始讀數據
                value >>= 1;
                if(io == 1)
                        value |= 0x80;
                clk = 1;                 //時鐘線拿高
        }
        rst = 0;                         //復位線合低
        clk = 0;
        io = 0;
        return value;                 //返回讀出來的數據
}



/*************把要的時間 年月日 都讀出來***************/
void read_time()
{
        miao = read_ds1302(read_add[0]);        //讀秒
        fen  = read_ds1302(read_add[1]);        //讀分
        shi  = read_ds1302(read_add[2]);        //讀時
        ri   = read_ds1302(read_add[3]);        //讀日
        yue  = read_ds1302(read_add[4]);        //讀月
        nian = read_ds1302(read_add[5]);        //讀年
        week = read_ds1302(read_add[6]);        //讀星期
}

/*************把要寫的時間 年月日 都寫入ds1302里***************/
void write_time()
{
        write_ds1302(0x8e,0x00);                        //打開寫保護
        write_ds1302(write_add[0],miao);        //寫秒
        write_ds1302(write_add[1],fen);                //寫分
        write_ds1302(write_add[2],shi);                //寫時
        write_ds1302(write_add[3],ri);                //寫日
        write_ds1302(write_add[4],yue);                //寫月
        write_ds1302(write_add[5],nian);        //寫年
        write_ds1302(write_add[6],week);        //寫星期
        write_ds1302(0x8e,0x80);                        //關閉寫保護
}

/*************定時器0初始化程序***************/
void init_1602_ds1302()
{
        write_sfm2_ds1302(1,11,shi);        
        write_sfm2_ds1302(1,14,fen);
        write_sfm2_ds1302(1,17,miao);        
        
}

/***********外部中斷0初始化程序****************/
void init_int0()
{
        EX0=1;                          //允許外部中斷0中斷
        EA=1;                           //開總中斷
        IT0 = 1;                   //外部中斷0負跳變中斷
}


/*************定時器0初始化程序***************/
void time_init()          //定時器0初始化程序
{
        EA   = 1;                   //開總中斷
        TMOD=0x11;
  ET0=1;
  TR0=1;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
}

/********************獨立按鍵程序*****************/
uchar key_can;         //按鍵值

void key()         //獨立按鍵程序
{
        static uchar key_new;
        key_can = 20;                   //按鍵值還原
        P3 |= 0x78;                     //對應的按鍵IO口輸出為1
        if((P3 & 0x78) != 0x78)                //按鍵按下
        {
                delay_1ms(1);                     //按鍵消抖動
                if(((P3 & 0x78) != 0x78) && (key_new == 1))
                {                                                //確認是按鍵按下
                        key_new = 0;
                        switch(P3 & 0x78)
                        {
                                case 0x70:  key_can = 4;  break;         //得到按鍵值
                                case 0x68:  key_can = 3;  break;         //得到按鍵值
                                case 0x58:  key_can = 2;  break;         //得到按鍵值
                                case 0x38:  key_can = 1;  break;         //得到按鍵值
                        }
                }                        
        }
        else
                key_new = 1;        
}


/**********************設置函數************************/
void key_with()
{
        if(key_can == 1)        //設置鍵
        {
                menu_1++;
                if(menu_1 == 1)          //設置時間
                {
                        menu_2 = 1;
                        write_string(1,0,"   W:  ");                        
                        write_string(2,0," 20  -  -       ");        
                }
                if(menu_1 == 2)          //設置報警速度
                {
                        menu_2 = 1;
                        write_string(1,0,"set-sd:00km/h   ");                        
                        write_string(2,0,"zlc:             ");        
                }
                if(menu_1 == 3)          //設置直徑
                {
                        menu_2 = 1;
                        write_string(1,0,"  wen du  ");                        
                        write_string(2,0,"               ");        
                }
                menu_2 = 1;

                if(menu_1 > 2)    //回到正常顯示
                {
                        menu_1 = 0;
                        write_guanbiao(1,2,0);          //關閉光標
                        init_1602();      //1602初始化     //初始化液晶顯示               
                }
        }
        if(key_can == 2)        //選擇鍵
        {
                if(menu_1 == 1)                  //設置時間
                {
                        menu_2 ++;
                        if(menu_2 > 7)
                                menu_2 = 1;
                }
                if(menu_1 == 2)                 //設置
                {
                        menu_2 ++;
                        if(menu_2 > 2)
                                menu_2 = 1;                                
                }

        }
        if(menu_1 == 1)
        {
                if(menu_2 == 1)                  //設置時
                {
                        if(key_can == 3)        //加
                        {
                                shi+=0x01;
                                if((shi & 0x0f) >= 0x0a)
                                        shi = (shi & 0xf0) + 0x10;
                                if(shi >= 0x24)
                                        shi = 0;
                        }               
                        if(key_can == 4)        //減
                        {
                                if(shi == 0x00)
                                        shi = 0x24;
                                if((shi & 0x0f) == 0x00)
                                        shi = (shi | 0x0a) - 0x10;
                                shi -- ;
                        }                                          
                }
                if(menu_2 == 2)                  //設置分
                {
                        if(key_can == 3)        //加
                        {
                                fen+=0x01;
                                if((fen & 0x0f) >= 0x0a)
                                        fen = (fen & 0xf0) + 0x10;
                                if(fen >= 0x60)
                                        fen = 0;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(fen == 0x00)
                                        fen = 0x5a;
                                if((fen & 0x0f) == 0x00)
                                        fen = (fen | 0x0a) - 0x10;
                                fen -- ;
                        }        
                }
                if(menu_2 == 3)                  //設置秒
                {
                        if(key_can == 3)        //加
                        {
                                miao+=0x01;
                                if((miao & 0x0f) >= 0x0a)
                                        miao = (miao & 0xf0) + 0x10;
                                if(miao >= 0x60)
                                        miao = 0;
                        }        
                        if(key_can == 4)        //減         
                        {
                                if(miao == 0x00)
                                        miao = 0x5a;
                                if((miao & 0x0f) == 0x00)
                                        miao = (miao | 0x0a) - 0x10;
                                miao -- ;                        
                        }
                }
                if(menu_2 == 4)                  //設置星期
                {
                        if(key_can == 3)        //加
                        {
                            week+=0x01;
                                if((week & 0x0f) >= 0x0a)
                                        week = (week & 0xf0) + 0x10;
                                if(week >= 0x08)
                                        week = 1;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(week == 0x01)
                                        week = 0x08;
                                if((week & 0x0f) == 0x00)
                                        week = (week | 0x0a) - 0x10;
                                week -- ;
                        }        
                }
                if(menu_2 == 5)                  //設置年
                {
                        if(key_can == 3)        //加
                        {
                            nian+=0x01;
                                if((nian & 0x0f) >= 0x0a)
                                        nian = (nian & 0xf0) + 0x10;
                                if(nian >= 0x9a)
                                        nian = 1;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(nian == 0x01)
                                        nian = 0x9a;
                                if((nian & 0x0f) == 0x00)
                                        nian = (nian | 0x0a) - 0x10;
                                nian -- ;               
                        }        
                }
                if(menu_2 == 6)                  //設置月
                {
                        if(key_can == 3)        //加
                        {
                            yue+=0x01;
                                if((yue & 0x0f) >= 0x0a)
                                        yue = (yue & 0xf0) + 0x10;
                                if(yue >= 0x13)
                                        yue = 1;
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(yue == 0x01)
                                        yue = 0x13;
                                if((yue & 0x0f) == 0x00)
                                        yue = (yue | 0x0a) - 0x10;
                                yue -- ;                                       
                        }        
                }
                if(menu_2 == 7)                  //設置日
                {
                        if(key_can == 3)        //加
                        {
                    ri+=0x01;
                        if((ri & 0x0f) >= 0x0a)
                                ri = (ri & 0xf0) + 0x10;
                        if(ri >= 0x32)
                                ri = 0;                        
                        }               
                        if(key_can == 4)        //減         
                        {
                                if(ri == 0x01)
                                        ri = 0x32;
                                if((ri & 0x0f) == 0x00)
                                        ri = (ri | 0x0a) - 0x10;
                                ri -- ;                        
                        }        
                }
                write_sfm2_ds1302(1,2,shi);           //顯示時
                write_sfm2_ds1302(1,5,fen);           //顯示分
                write_sfm2_ds1302(1,8,miao);           //顯示秒
                write_sfm1(1,14,week);           //顯示星期                                       
                write_sfm2_ds1302(2,3,nian);           //顯示年
                write_sfm2_ds1302(2,6,yue);           //顯示月
                write_sfm2_ds1302(2,9,ri);           //顯示日
               
                switch(menu_2)           // 光標顯示
                {
                        case 1:  write_guanbiao(1,2,1);  break;
                        case 2:  write_guanbiao(1,5,1);  break;
                        case 3:  write_guanbiao(1,8,1);  break;
                        case 4:  write_guanbiao(1,14,1); break;
                        case 5:  write_guanbiao(2,3,1);  break;
                        case 6:  write_guanbiao(2,6,1);  break;
                        case 7:  write_guanbiao(2,9,1);  break;
                }
                write_time();           //把時間寫進去
        }        

        if(menu_1 == 2)
        {               
                if(menu_2 == 1)                  //設置速度
                {
                        if(key_can == 3)        //加
                        {
                                bj_shudu++;
                                if(bj_shudu >= 99)
                                        bj_shudu = 99;
                        }        
                        if(key_can == 4)        //減         
                        {
                                if(bj_shudu != 0)
                                        bj_shudu -- ;                        
                        }
                }        
        
                }        
                write_sfm2(1,7,bj_shudu);   //顯示報警速度
               
               
                switch(menu_2)           // 光標顯示
                {
                        case 1:  write_guanbiao(1,6,1);  break;
                        case 2:  write_guanbiao(2,3,1);  break;
                }
                }

/****************報警函數***************/
void clock_h_l()
{   
        if(shudu >= bj_shudu)
        {
                beep = ~ beep;           //蜂鳴器報警                        
        }
        else
        {
                beep = 1;        
        }                        
}

/******************主程序**********************/           
void main()
{
        init_1602();      //1602初始化
        init_int0();
        time_init();          //定時器0初始化程序
        while(1)
        {         
                key();                         //按鍵程序
                if(key_can < 10)
                {
                        key_with();        
                }
               
                read_time();                  //讀時間
                init_1602_ds1302();   //顯示時鐘
               
                clock_h_l();        //報警函數
                write_sfm2(1,3,shudu);//顯示速度,單位米每秒        
        }
}

/*********************外部中斷0中斷服務程序************************/
void int0() interrupt 0
{
        f_hz ++;
}

/*************定時器0中斷服務程序***************/
void time0_int() interrupt 1
{        
        TH0 = (65536-50000)/256;
  TL0 = (65536-50000)%256;
        count ++;
        if(count == 20)//定時一秒
        {
                EX0 = 0;//關閉外部中斷
                count = 0;//清空計數
                //1s = 1 / 1000000us;          // 1m/s=0.001km除以1/3600h=3.6km/h
                speed_m = (f_hz * zhijing * 3.14) / 2 ;        //算出來的是m/s
                speed_km = speed_m * 3.6 ;        //(帶個小數點) km/s
                shudu = (uint)speed_km;
                        
        
                f_hz = 0;//圈數清零
                TH0 = 0x3c;//重新賦值
    TL0 = 0xb0;  
                EX0 = 1;//打開外部中斷
        }
}

/*************定時器1中斷服務程序***************/
void time1_int() interrupt 3
{
        TH0 = 0x3c;
        TL0 = 0xb0;     // 50ms
        count1++;
        if(count1  == 20)
        {
                count1 = 0;
                flag_lc=1;
                TH0 = 0x3c;
          TL0 = 0xb0;
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:390416 發表于 2021-3-16 12:06 | 只看該作者
你的編程思路就有問題,第一步,應該先把顯示部分做好,假設一個值 顯示出來。只有顯示正常了 再去研究后面,再去慢慢研究DS18B20。時序很關鍵,建議用分析儀和示波器調試。這個貼子 僅供參考
http://m.raoushi.com/bbs/dpj-200968-1.html
回復

使用道具 舉報

板凳
ID:96682 發表于 2021-3-17 07:40 來自觸屏版 | 只看該作者
做實物這仿真圖是有問題的,復位電路,溫度探頭,LCD,蜂鳴器
回復

使用道具 舉報

地板
ID:824490 發表于 2021-3-17 11:05 | 只看該作者
調試新產品要有步驟與方法
比如你現在1820不顯示,就要分別查:
1、顯示其它內容(時間、日期)正常與否?
2、1820的底層驅動有沒有問題?
3、線路是不是有問題?器件是不是錯了?代碼與實物有對應上了嗎?
4、供電正常不?

你把整份代碼發上來,除非人家有閑,或手上剛好有板,不然很少人會認真去讀代碼的,因為牽扯的地方太多了。。你先把問題定位好了,才可能有更精確的回答。不然就是你猜我猜大家猜。。
回復

使用道具 舉報

5#
ID:213173 發表于 2021-3-17 17:07 | 只看該作者
名字不是重點 發表于 2021-3-17 11:05
調試新產品要有步驟與方法
比如你現在1820不顯示,就要分別查:
1、顯示其它內容(時間、日期)正常與否 ...

讀取溫度值的函數read_temp()沒有被調用,怎么顯示溫度?
回復

使用道具 舉報

6#
ID:893175 發表于 2021-3-17 18:22 | 只看該作者
時序很重要,液晶屏一般都是分時顯示。
回復

使用道具 舉報

7#
ID:917252 發表于 2021-5-26 10:09 | 只看該作者
ds18b20的負數部分是怎么處理的啊,可以說一下嘛
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表