久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3032|回復: 1
收起左側

STM32+mlx90614的非接觸測溫系統設計 有注釋

[復制鏈接]
ID:831137 發表于 2021-6-27 20:28 | 顯示全部樓層 |閱讀模式
剛學32時做的
1.2 系統總體設計
整體程序以主程序為基礎框架,另加按鍵事件處理、紅外測溫、屏幕顯示三個主要子程序。其中,①主程序:首先進行系統初始化,接著就是持續掃描按鍵,等待用戶的指令在執行對應的子程序,之后更新OLED的顯示信息;②按鍵事件處理程序:判斷用戶按下的功能,接著再跳轉對應子程序;③紅外測溫的溫度數據讀取程序:先是初始化函數內部參數,接著產生停止位,用于判斷是否可繼續讀取,接著發送起始位,然后發送從機地址和讀取指令,如果一切正常就從發起始位,開始讀取低8位和高8位數據,再讀取校驗位,發送停止位表示讀取完成,最后對數據進行校驗,數據正確就送回數據,否則重新讀取;④屏幕顯示 是先預先設置好了 不同數據所對應的不同顯示狀態 然后根據相應的數據調用相應的顯示。另外還有其他參數設置、開關控制等子程序,這里不再詳解。
1.2.1 系統硬件功能
數據采集區由
GY-906紅外溫度傳感器負責采集人體溫度
GY-906模塊是一組通用的紅外測溫模塊。 在出廠前該模塊已進行校驗及線
性化,具有非接觸、體積小、精度高,成本低等優點。被測目標溫度和環境溫度能通過單通道輸出,并有兩種輸出接口,適合于汽車空調、室內暖氣、家用電器、手持設備

DS18B20負責采集環境溫度用于作為溫度補償DS18B20是常用的數字溫度傳感器,其輸出的是數字信號,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。 [1]  DS18B20數字溫度傳感器接線方便,封裝成后可應用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。

控制模塊
核心控制器采用基于ARM Cortex-M3的32位微控制器STM32F103C8T6,其最小系統包括復位電路、晶振電路、BOOT電路、電源電路,工作需要電壓2V~3.6V,工作溫度為-40℃~85℃[9]。
STM32可以理想地應用于一些需要低功耗而功能強大的微控制器的嵌入式系統設計中,或者很多通用的可系統升級的方案中,其應用廣泛,如工業應用領域、建筑和安防應用、低功耗應用、家電應用等[10]。

單片機源程序如下:
  1. #include "mlx90614.h"

  2. /*******************************************************************************
  3. * 函數名: MLX90614MLX90614 發起始位 SMBus_StartBit
  4. * 功能  : MLX90614 發起始位 產生起始位
  5. * Input          : None
  6. * Output         : None
  7. * Return         : None

  8. *******************************************************************************/
  9. void SMBus_StartBit(void)
  10. {
  11.     SMBUS_SDA_H();                // Set SDA line
  12.     SMBus_Delay(5);            // Wait a few microseconds
  13.     SMBUS_SCK_H();                // Set SCL line
  14.     SMBus_Delay(5);            // Generate bus free time between Stop
  15.     SMBUS_SDA_L();                // Clear SDA line
  16.     SMBus_Delay(5);            // Hold time after (Repeated) Start
  17.     // Condition. After this period, the first clock is generated.
  18.     //(Thd:sta=4.0us min)在SCK=1時,檢測到SDA由1到0表示通信開始(下降沿)
  19.     SMBUS_SCK_L();            // Clear SCL line
  20.     SMBus_Delay(5);            // Wait a few microseconds
  21. }

  22. /*******************************************************************************
  23. * 函數名: SMBus_StopBit
  24. * 功能: MLX90614 發停止位 STOP condition on SMBus
  25. * Input          : None
  26. * Output         : None
  27. * Return         : None
  28. *******************************************************************************/
  29. void SMBus_StopBit(void)
  30. {
  31.     SMBUS_SCK_L();                // Clear SCL line
  32.     SMBus_Delay(5);            // Wait a few microseconds
  33.     SMBUS_SDA_L();                // Clear SDA line
  34.     SMBus_Delay(5);            // Wait a few microseconds
  35.     SMBUS_SCK_H();                // Set SCL line
  36.     SMBus_Delay(5);            // Stop condition setup time(Tsu:sto=4.0us min)
  37.     SMBUS_SDA_H();                // Set SDA line
  38. }

  39. /*******************************************************************************
  40. * 函數名: SMBus_SendByte
  41. * 功能: MLX90614 發送一個字節 Send a byte on SMBus
  42. * Input          : Tx_buffer
  43. * Output         : None
  44. * Return         : None
  45. *******************************************************************************/
  46. u8 SMBus_SendByte(u8 Tx_buffer)
  47. {
  48.     u8        Bit_counter;
  49.     u8        Ack_bit;
  50.     u8        bit_out;

  51.     for(Bit_counter=8; Bit_counter; Bit_counter--)
  52.     {
  53.         if (Tx_buffer&0x80)//如果最高位為1
  54.         {
  55.             bit_out=1;   // 把最高位置1
  56.         }
  57.         else  //如果最高位為0
  58.         {
  59.             bit_out=0;  // 把最高位置0
  60.         }
  61.         SMBus_SendBit(bit_out);        // 把最高位發送出去
  62.         Tx_buffer<<=1;// 左移一位把最高位移出去等待下一個最高位,循環8次,每次都發最高位,就可把一個字節發出去了
  63.     }
  64.     Ack_bit=SMBus_ReceiveBit();
  65.     return        Ack_bit;
  66. }

  67. /*******************************************************************************
  68. * 函數名: SMBus_SendBit
  69. * 功能: MLX90614 發送一個位 Send a bit on SMBus 82.5kHz
  70. * Input          : bit_out
  71. * Output         : None
  72. * Return         : None
  73. *******************************************************************************/
  74. void SMBus_SendBit(u8 bit_out)
  75. {
  76.     if(bit_out==0)
  77.     {
  78.         SMBUS_SDA_L();
  79.     }
  80.     else
  81.     {
  82.         SMBUS_SDA_H();
  83.     }
  84.     SMBus_Delay(2);                                        // Tsu:dat = 250ns minimum
  85.     SMBUS_SCK_H();                                        // Set SCL line
  86.     SMBus_Delay(6);                                        // High Level of Clock Pulse
  87.     SMBUS_SCK_L();                                        // Clear SCL line
  88.     SMBus_Delay(3);                                        // Low Level of Clock Pulse
  89. //        SMBUS_SDA_H();                                    // Master release SDA line ,
  90.     return;
  91. }

  92. /*******************************************************************************
  93. * Function Name  : SMBus_ReceiveBit
  94. * Description    : 在SMBus上接收一點
  95. * Input          : None
  96. * Output         : None
  97. * Return         : Ack_bit
  98. *******************************************************************************/
  99. u8 SMBus_ReceiveBit(void)
  100. {
  101.     u8 Ack_bit;

  102.     SMBUS_SDA_H();          //引腳靠外部電阻上拉,當作輸入
  103.         SMBus_Delay(2);                        // High Level of Clock Pulse
  104.     SMBUS_SCK_H();                        // Set SCL line
  105.     SMBus_Delay(5);                        // High Level of Clock Pulse
  106.     if (SMBUS_SDA_PIN())
  107.     {
  108.         Ack_bit=1;
  109.     }
  110.     else
  111.     {
  112.         Ack_bit=0;
  113.     }
  114.     SMBUS_SCK_L();                        // Clear SCL line
  115.     SMBus_Delay(3);                        // Low Level of Clock Pulse

  116.     return        Ack_bit;
  117. }

  118. /*******************************************************************************
  119. * 函數名: SMBus_ReceiveByte
  120. * 功能: Receive a byte on SMBus 從SMBus中接受一個字節的數據
  121. * Input          : ack_nack
  122. * Output         : None
  123. * Return         : RX_buffer
  124. *******************************************************************************/
  125. u8 SMBus_ReceiveByte(u8 ack_nack)
  126. {
  127.     u8         RX_buffer;
  128.     u8        Bit_Counter;

  129.     for(Bit_Counter=8; Bit_Counter; Bit_Counter--)
  130.     {
  131.         if(SMBus_ReceiveBit())// Get a bit from the SDA line
  132.         {
  133.             RX_buffer <<= 1;// If the bit is HIGH save 1  in RX_buffer
  134.             RX_buffer |=0x01;//如果Ack_bit=1,把收到應答信號1與0000 0001 進行或運算,確保為1
  135.         }
  136.         else
  137.         {
  138.             RX_buffer <<= 1;// If the bit is LOW save 0 in RX_buffer
  139.             RX_buffer &=0xfe;//如果Ack_bit=1,把收到應答信號0與1111 1110 進行與運算,確保為0
  140.         }
  141.     }
  142.     SMBus_SendBit(ack_nack);// Sends acknowledgment bit 把應答信號發出去,如果1,就進行下一次通信,如果為0、,就拜拜了
  143.     return RX_buffer;
  144. }

  145. /*******************************************************************************
  146. * 函數名: SMBus_Delay
  147. * 功能: 延時  一次循環約1us
  148. * Input          : time
  149. * Output         : None
  150. * Return         : None
  151. *******************************************************************************/
  152. void SMBus_Delay(u16 time)
  153. {
  154.     u16 i, j;
  155.     for (i=0; i<4; i++)
  156.     {
  157.         for (j=0; j<time; j++);
  158.     }
  159. }

  160. /*******************************************************************************
  161. * 函數名: SMBus_Init
  162. * 功能: SMBus初始化
  163. * Input          : None
  164. * Output         : None
  165. * Return         : None
  166. *******************************************************************************/
  167. void SMBus_Init()
  168. {
  169.     GPIO_InitTypeDef    GPIO_InitStructure;
  170.         /* Enable SMBUS_PORT clocks */
  171.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SMBUS_PORT, ENABLE);
  172.     /*配置SMBUS_SCK、SMBUS_SDA為集電極開漏輸出*/
  173.     GPIO_InitStructure.GPIO_Pin = SMBUS_SCK | SMBUS_SDA;
  174.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  175.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  176.     GPIO_Init(SMBUS_PORT, &GPIO_InitStructure);

  177.     SMBUS_SCK_H();
  178.     SMBUS_SDA_H();
  179. }

  180. /*******************************************************************************
  181. * 函數名: SMBus_ReadMemory
  182. * 功能: READ DATA FROM RAM/EEPROM  從RAM和EEPROM中讀取數據
  183. * Input          : slaveAddress, command
  184. * Return         : Data
  185. * SMBus_ReadMemory(0x00, 0x07) 0x00 表示IIC設備的從地址 從0x07這個寄存器開始讀取
  186. *******************************************************************************/
  187. u16 SMBus_ReadMemory(u8 slaveAddress, u8 command)
  188. {
  189.     u16 data;                        // Data storage (DataH:DataL)
  190.     u8 Pec;                                // PEC byte storage
  191.     u8 DataL=0;                        // Low data byte storage
  192.     u8 DataH=0;                        // High data byte storage
  193.     u8 arr[6];                        // Buffer for the sent bytes
  194.     u8 PecReg;                        // Calculated PEC byte storage
  195.     u8 ErrorCounter;        // Defines the number of the attempts for communication with MLX90614

  196.     ErrorCounter=0x00;        // Initialising of ErrorCounter
  197.         slaveAddress <<= 1;        //2-7位表示從機地址 從機地址左移一位,把讀寫位空出來
  198.         
  199.     do
  200.     {
  201. repeat:
  202.         SMBus_StopBit();                            //If slave send NACK stop comunication
  203.         --ErrorCounter;                                    //Pre-decrement ErrorCounter
  204.         if(!ErrorCounter)                             //ErrorCounter=0?
  205.         {
  206.             break;                                            //Yes,go out from do-while{}
  207.         }

  208.         SMBus_StartBit();                                //Start condition
  209.         if(SMBus_SendByte(slaveAddress))//Send SlaveAddress 最低位Wr=0表示接下來寫命令
  210.         {
  211.             goto        repeat;                            //Repeat comunication again
  212.         }
  213.         if(SMBus_SendByte(command))            //Send command
  214.         {
  215.             goto        repeat;                            //Repeat comunication again
  216.         }

  217.         SMBus_StartBit();                                        //Repeated Start condition
  218.         if(SMBus_SendByte(slaveAddress+1))        //Send SlaveAddress 最低位Rd=1表示接下來讀數據
  219.         {
  220.             goto        repeat;                     //Repeat comunication again
  221.         }

  222.         DataL = SMBus_ReceiveByte(ACK);        //讀取低數據,主機必須發送ACK
  223.         DataH = SMBus_ReceiveByte(ACK); //讀取高數據,主機必須發送ACK
  224.         Pec = SMBus_ReceiveByte(NACK);        //讀取PEC字節,主機必須發送NACK
  225.         SMBus_StopBit();                                //停止條件

  226.         arr[5] = slaveAddress;                //
  227.         arr[4] = command;                        //
  228.         arr[3] = slaveAddress+1;        //加載陣列陣列
  229.         arr[2] = DataL;                                //
  230.         arr[1] = DataH;                                //
  231.         arr[0] = 0;                                        //
  232.         PecReg=PEC_Calculation(arr);//Calculate CRC 數據校驗
  233.     }
  234.     while(PecReg != Pec);//如果接收到的CRC與計算的CRC相等,則從do-while{}退出

  235.         data = (DataH<<8) | DataL;        //data=DataH:DataL
  236.     return data;
  237. }

  238. /*******************************************************************************
  239. * 函數名: PEC_calculation
  240. * 功能 : 數據校驗
  241. * Input          : pec[]
  242. * Output         : None
  243. * Return         : pec[0]-this byte contains calculated crc value
  244. *******************************************************************************/
  245. u8 PEC_Calculation(u8 pec[])
  246. {
  247.     u8         crc[6];//存放多項式
  248.     u8        BitPosition=47;//存放所有數據最高位,6*8=48 最高位就是47位
  249.     u8        shift;
  250.     u8        i;
  251.     u8        j;
  252.     u8        temp;

  253.     do
  254.     {
  255.         /*Load pattern value 0x00 00 00 00 01 07*/
  256.         crc[5]=0;
  257.         crc[4]=0;
  258.         crc[3]=0;
  259.         crc[2]=0;
  260.         crc[1]=0x01;
  261.         crc[0]=0x07;

  262.         /*Set maximum bit position at 47 ( six bytes byte5...byte0,MSbit=47)*/
  263.         BitPosition=47;

  264.         /*Set shift position at 0*/
  265.         shift=0;

  266.         /*Find first "1" in the transmited message beginning from the MSByte byte5*/
  267.         i=5;
  268.         j=0;
復制代碼


  1. #include "stm32f10x.h"
  2. #include "led.h"
  3. #include "delay.h"
  4. #include "key.h"
  5. #include "usart.h"
  6. #include "beep.h"
  7. #include "mlx90614.h"
  8. #include "oled.h"
  9. #include "bmp.h"
  10. #include "sys.h"
  11. #include "DS18B20.h"


  12. /********
  13. 蜂鳴器 PB5
  14. *****************屏幕 ***************
  15.                                 GND   電源地
  16. //              VCC   接5V或3.3v電源
  17. //              SCL   接PA5(SCL)
  18. //              SDA   接PA7(SDA)
  19. ************************************
  20. ****************紅外測溫***********
  21. VIN                        接5V或3.3v電源
  22. GND                        電源地
  23. SCL                        PB6
  24. SDA                        PB7
  25. *****************
  26. ds18b20
  27. PB9


  28. ********/
  29. vu8 key=0;        
  30. float Temp,temperature,hxwd;
  31. char yy[100]="36.5";
  32. int i,hh=00,zz=0,tt=0,ff=0;
  33. int XS(void)
  34.   {        u8 t;
  35.                 delay_init();                     //延時函數初始化         
  36.                 OLED_Init();                        //初始化OLED  
  37.                 OLED_Clear()          ;
  38.         
  39.                 t=' ';
  40.                 OLED_ShowCHinese(0,0,0);//非
  41.                                 OLED_ShowCHinese(18,0,1);//接
  42.                 OLED_ShowCHinese(36,0,2);//觸
  43.                 OLED_ShowCHinese(54,0,3);//式
  44.                 OLED_ShowCHinese(72,0,4);//測
  45.                 OLED_ShowCHinese(90,0,5);//溫
  46.                 OLED_ShowCHinese(108,0,6);//儀
  47.                 OLED_ShowCHinese(108,3,7);//℃
  48.           OLED_ShowCHinese(0,3,8);//當
  49.                                 OLED_ShowCHinese(18,3,9);//前
  50.                 OLED_ShowCHinese(36,3,10);//溫
  51.                 OLED_ShowCHinese(54,3,11);//度
  52.                   //OLED_ShowString(72,3,yy,16);
  53.          OLED_ShowNum(72,3,hh,2,16);
  54.         OLED_ShowChar(90,3,'.',16);
  55.           OLED_ShowNum(95,3,zz,1,16);
  56.   }
  57.   int clcw(void)
  58.   {               
  59.          
  60.           delay_init();                     //延時函數初始化         
  61.                 OLED_Init();                        //初始化OLED  
  62.                 OLED_Clear()          ;                 //清屏
  63.                 OLED_ShowCHinese(0,3,12);//測
  64.             OLED_ShowCHinese(18,3,13);//量
  65.                 OLED_ShowCHinese(36,3,14);//錯
  66.                 OLED_ShowCHinese(54,3,15);//誤
  67.                   OLED_ShowNum(72,3,hh,2,16);
  68.         OLED_ShowChar(90,3,'.',16);
  69.           OLED_ShowNum(95,3,zz,1,16);
  70.   }
  71.   
  72.   int cwz(void)
  73.   {               
  74.          
  75.           delay_init();                     //延時函數初始化         
  76.                 OLED_Init();                        //初始化OLED  
  77.                 OLED_Clear()          ;                 //清屏
  78.                 OLED_ShowCHinese(0,3,12);//測
  79.             OLED_ShowCHinese(18,3,5);//溫
  80.                 OLED_ShowCHinese(36,3,18);//開
  81.                 OLED_ShowCHinese(54,3,19);//始
  82.                   
  83.   }
  84.   


  85.   
  86.   int hjwd()
  87.   {
  88.    if(!DS18B20_Is_Exist())
  89.           {
  90.                    printf("未檢測到DS18B20溫度傳感器...\n");
  91.                  delay_ms(500);
  92.           }
  93.           else
  94.           {
  95.                    printf("檢測到DS18B20溫度傳感器\n獲取數據中...\n");
  96.                  temperature=DS18B20_Get_wd();
  97.              printf("當前環境溫度:%0.4lf ℃\n\n",temperature);
  98.           }
  99.   }

  100.    int XSHJ(void)
  101.   {        u8 t;
  102.                 delay_init();                     //延時函數初始化         
  103.                 OLED_Init();                        //初始化OLED  
  104.                 OLED_Clear()          ;
  105.         
  106.                 t=' ';
  107.                 OLED_ShowCHinese(0,0,0);//非
  108.                                 OLED_ShowCHinese(18,0,1);//接
  109.                 OLED_ShowCHinese(36,0,2);//觸
  110.                 OLED_ShowCHinese(54,0,3);//式
  111.                 OLED_ShowCHinese(72,0,4);//測
  112.                 OLED_ShowCHinese(90,0,5);//溫
  113.                 OLED_ShowCHinese(108,0,6);//儀
  114.                 OLED_ShowCHinese(108,3,7);//℃
  115.           OLED_ShowCHinese(0,3,16);//環
  116.                                 OLED_ShowCHinese(18,3,17);//境
  117.                 OLED_ShowCHinese(36,3,10);//溫
  118.                 OLED_ShowCHinese(54,3,11);//度
  119.                   //OLED_ShowString(72,3,yy,16);
  120.          OLED_ShowNum(72,3,ff,2,16);
  121.         OLED_ShowChar(90,3,'.',16);
  122.           OLED_ShowNum(95,3,tt,1,16);
  123.   }
  124.   






  125.   int main(void)
  126. {        
  127.         uint8_t i,j,p;        
  128.         int kk=0,k=0,yy=0,wd=0;
  129.         float Temperature = 0;    //溫度數據變量(浮點型)
  130.         float jg[10];//存放測得結果
  131.         char TempValue[80] = {0}; //溫度值(字符串)

  132.         KEY_Init();//按鍵初始化
  133.         led_init();//led燈初始化
  134.         delay_init();//延時初始化
  135.         uart_init(9600);//串口初始化
  136.         SMBus_Init();//SMBus初始化(測溫計)
  137.         BEEP_Init();//蜂鳴器初始化
  138.         
  139.                         hjwd();//檢測環境溫度

  140.         ff=(temperature*1000);
  141.                         tt=ff%1000;//取環境溫度小數部分
  142.                         ff/=1000;//取環境溫度整數部分
  143.                         if((tt%10)>=5)//小數點后2位四舍五入
  144.                         tt+=10;
  145.                         tt/=10;        
  146.                         XSHJ();        //顯示環境溫度
  147.         while(1)
  148.         {        
  149.                 key=KEY_Scan(0);//判斷按鈕是否按下
  150.                 if(key){
  151.                 hjwd();//檢測環境溫度
  152.                 Temperature = 0; //紅外測溫值初始化                        
  153.                 k++;
  154.                 kk++;
  155.                 printf("按的kk=%d\n",kk);                        
  156.                 printf("按鈕按下后的k=%d\n",k);
  157.         
  158.                         cwz();//屏幕顯示測溫開始
  159.                         
  160.                         /*
  161.                         多次測量取平均值
  162.                         */
  163.                                 for(yy=0;yy<10;yy++)
  164.                                                 {
  165.                                                         PBout(5)=1;//啟動蜂鳴器
  166.                                                         jg[yy]= SMBus_ReadTemp();        //計算并返回溫度值
  167.                                                         Temperature+=jg[yy];//將每次的結果相加方便計算平均值
  168.                                                         PBout(5)=0;//關閉蜂鳴器
  169.                                                         delay_ms(10);        
  170.                                                         printf("結果%d=%f",yy+1,jg[yy]);//在串口輸出每次測得的結果
  171.                                                         delay_ms(100);        //延時100ms在次測量
  172.                                 
  173.                                                 }        
  174.                                                 
  175.                                                 printf("結果合%f",Temperature);//在串口輸出每次測得的結果
  176.                 Temperature = (Temperature/10);                //計算平均值
  177.                         PBout(5)=1;                                        //啟動蜂鳴器
  178.                         delay_ms(200);                                        //延時200ms
  179.                         PBout(5)=0;                                                //關閉蜂鳴器
  180.                                                 /*環境溫度補償算法不過不好用*/
  181.         hxwd=(0.001081*Temperature*Temperature-0.2318*Temperature+12.454);
  182.                                                 hxwd*=(Temperature-temperature);
  183.                                                 hxwd+=Temperature;
  184.                                                 printf("平均溫度=%f\n",Temperature);        
  185. Temperature+=2;        //測得值 根據自身情況校正        
  186. printf("屏幕顯示溫度=%f\n",Temperature);                                                        
  187.                 printf("按鈕按下后的核心溫度=%f\n",hxwd/2);                //在串口輸出測得的結果
  188.                         wd=Temperature*100;                         //結果乘100方便轉換
  189.                         hh=wd/100;                                                //取結果的整數部分方便顯示
  190.                         zz=wd%100;
  191.                         if((zz%10)>=5)//四舍五入
  192.                         zz+=10;
  193.                         zz/=10;                                                //取結果的小數部分
  194.                
  195.                                 /*合法判斷*/
  196.                                                         if(hh<45&&hh>25)                                //判斷測量結果是否合理
  197.                                                         XS();                                                        //顯示測量結果
  198.                                                         else
  199.                                                         clcw();                                                        //提示結果不可信
  200.                                 
  201.                                 if(Temperature>37.5)//判斷是否發燒
  202.                                 {
  203.                                 
  204.                                 printf("溫度過高");
  205.                                                         for(i=0;i<5;i++)//蜂鳴器報警
  206.                                                         {
  207.                                                                 printf("溫度過高");
  208.                                                                 PAout(8)=0;
  209.                                                                 delay_ms(100);
  210.                                                                 PAout(8)=1;
  211.                                                                 delay_ms(100);
  212.                                                                 PBout(5)=1;
  213.                                                                 delay_ms(100);        
  214.                                                                 PBout(5)=0;
  215.                                                         }
  216.                                 
  217.                                 }
  218.                         
  219.         
  220.         
  221.         
  222.         
  223. }


  224. }
  225.         }

  226.         
復制代碼

所有代碼51hei提供下載:
代碼.7z (208.52 KB, 下載次數: 79)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:328014 發表于 2021-6-27 21:23 | 顯示全部樓層
原理圖能分享一下嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰97人人人人人蜜桃 | 天天草天天干 | 久久精彩 | 国产精品一区三区 | 九九精品在线 | 亚洲高清av在线 | 国产免费a| 中文字幕av中文字幕 | 女生羞羞网站 | 亚洲精品欧洲 | 九九亚洲 | 成年人在线观看视频 | 国产一区二区电影 | 久久国产精品无码网站 | 午夜电影网| 麻豆精品国产91久久久久久 | 欧美一区二区在线观看 | 日韩精品在线免费观看 | 亚洲在线一区二区 | 91精品欧美久久久久久久 | 色屁屁在线观看 | av播播| 91色综合 | 欧美精品一区二区免费视频 | 欧美中文字幕一区二区三区亚洲 | 黄色毛片免费看 | 97av| 日韩精品一区二区三区在线播放 | 在线国产视频 | 中文字幕一区在线观看视频 | 免费啪啪 | 精品久久99 | 澳门永久av免费网站 | 久久久视频在线 | 97久久精品午夜一区二区 | 日本黄色片免费在线观看 | 国产精品久久久久久久久久久久 | 国产精品一区在线 | 亚洲综合色丁香婷婷六月图片 | a级在线免费观看 | 亚洲成人免费视频在线观看 |