找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3017|回复: 1
收起左侧

STM8单片机—从机LIN通讯协议代码

[复制链接]
ID:960741 发表于 2021-8-16 16:01 | 显示全部楼层 |阅读模式
最近写的一个汽车LIN通讯分享

  1. #include"STC12C5408.H"

  2. typedef enum
  3. {
  4.         Init,
  5.         send_data,
  6.         rece_data
  7. } LIN_SLAVE_state;                                                                          
  8. LIN_SLAVE_state  LIN_SLAVE = Init;

  9. typedef enum
  10. {
  11.         task1,
  12.         task2
  13. } TASK_state;                                                                          
  14. TASK_state  TASK = Init;  

  15. //定义数据类型
  16. #define uchar unsigned char
  17. #define uint unsigned int




  18. uchar send_datas[]={0,0,0,0,0,0,0,0};

  19. uchar rece_datas[]={0,0,0,0,0,0,0,0};

  20. uchar code F_Rotation[4]={0x01,0x02,0x04,0x08};//正转表格
  21. uchar code B_Rotation[4]={0x08,0x04,0x02,0x01};//反转表格

  22. uchar code  rotation[]={0x01,0x02,0x04,0x08};

  23. uchar num=8;
  24. uchar ID;
  25. uchar dianjistate;
  26. uchar dianjistate1;
  27. uchar start=0x00;

  28. #define AD_SPEED   0x60 //0110,0000   1      1     270个时钟周期转换一次,
  29. #define b4800 0XFA
  30. #define b9600 0XFD

  31. void SetBaud(uchar baud)
  32. {
  33.         TR1=0;
  34.         TMOD|=0X20;         、//定时器方式2的自动重载功能,THX=TLX
  35.         TH1=baud;
  36.         TL1=baud;
  37.         TR1=1;                  //定时器1动行控制位。启动定时器1
  38. }


  39. void UartSend(uchar byte)
  40. {
  41.         REN=0;          //禁止串口接收数据
  42.         SCON=0X50;//SCON为串口控制寄存器 SM0 SM1=01为串口工作方式1:10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制)
  43.         TI=0;          //取消中断审请
  44.         SBUF=byte;
  45.         while(TI==0);//串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断审请
  46. }                                                 


  47. uchar UartReceive()
  48. {
  49.         uchar temp;
  50.         SCON=0X50;
  51.         RI=0;          //接收中断标志,内部硬件置1,手动清零
  52.         while(RI==0); //方式0串行接收第八位数据结束时,或在其他方式,串行接收停止位的中间时,由内部硬件使RI置1
  53.         temp=SBUF;
  54.         return         temp;
  55. }


  56. void SendSynchBreak()
  57. {
  58.         SetBaud(b4800);
  59.         UartSend(0x80);        //唤醒信号
  60. }


  61. void SendSynch()
  62. {
  63.         SetBaud(b9600);
  64.         UartSend(0x55);
  65. }


  66. void SendID(uchar ID_temp)
  67. {
  68.         SetBaud(b9600);
  69.         UartSend(ID_temp);       
  70. }


  71. void SendData(uchar *datas,uchar n)
  72. {
  73.         SetBaud(b9600);
  74.         for(;n>0;n--)
  75.         {
  76.                 UartSend(*datas);
  77.                 datas++;               
  78.         }
  79. }

  80. uchar check_sum;

  81. uchar checksum(uchar *chk8,uchar n)
  82. {                                                               
  83.     uchar temp=0;
  84.         for( ;n>0;n--)
  85.         {
  86.                 temp=temp+*chk8;
  87.                 if(temp<*chk8)
  88.                         temp++;
  89.                 chk8++;
  90.         }                  
  91.         return(0xff-temp);
  92. }



  93. void  SendChecksum(uchar checksum_temp)
  94. {
  95.         SetBaud(b9600);
  96.         UartSend(checksum_temp);       
  97. }


  98. uchar  ReceChecksum()
  99. {

  100.         SetBaud(b9600);
  101.         return        UartReceive();
  102. }

  103. void ReceiveData(uchar *datas,uchar n)
  104. {
  105.         SetBaud(b9600);
  106.         for(;n>0;n--)
  107.         {
  108.                 *datas=UartReceive();
  109.                 datas++;               
  110.         }
  111. }


  112. uchar JudgeLength(uchar id)
  113. {
  114.         uchar len_temp;
  115.         id &= 0x30;
  116.         if(id == 0x00) len_temp = 2;
  117.         if(id == 0x10) len_temp = 2;
  118.         if(id == 0x20) len_temp = 4;
  119.         if(id == 0x30) len_temp = 8;
  120.         return len_temp;
  121. }
  122. //---------------------------------------------------------------------
  123. void delay(uchar delay_time)        // 延时函数
  124. {
  125.      uchar n;
  126.     while(delay_time--)
  127.     {
  128.         n = 6000;
  129.         while(--n);
  130.     }
  131. }
  132. //---------------------------------------------------------------------




  133. //
  134. uchar get_AD_result(uchar channel)
  135. {
  136.     ADC_DATA   = 0;

  137.     channel &= 0x07;                //0000,0111 清0高5位
  138.     ADC_CONTR = AD_SPEED;
  139.     ADC_CONTR = 0xE0;               //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位
  140.     ADC_CONTR |= channel;           //选择 A/D 当前通道
  141.     delay(1);                       //使输入电压达到稳定
  142.     ADC_CONTR |= 0x08;              //0000,1000 令 ADCS = 1, 启动A/D转换,
  143.     while (1)                       //等待A/D转换结束
  144.     {
  145.         if (ADC_CONTR & 0x10)       //0001,0000 测试A/D转换结束否
  146.         { break; }
  147.     }
  148.     ADC_CONTR &= 0xE7;              //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,

  149.     return (ADC_DATA); //返回 A/D 10 位转换结果
  150. }





  151. uchar i,j;
  152. uchar templ,temph,IDH,IDL;
  153. bit task1_en,task2_en;




  154. void LIN(uchar ID_temp, uchar num_temp, bit send_or_rece);
  155. uchar  cheakheader();
  156. void  dianji();
  157. void delay1(uchar del);
  158. void  dianji1(uchar c);
  159. void  dianji2(uchar k);
  160. void judge();
  161. void  dianjireset();


  162. void LIN_Init(void)
  163. {

  164. ADC_CONTR |= 0x80;              //1000,0000 打开 A/D 转换电源
  165.        
  166. }

  167. void TIME0_Init()
  168. {
  169.         EA = 1;                                            //允许CPU中断
  170.         TMOD |= 0x01;                                         //设定时器0和1为16位模式1
  171.         ET0 = 1;                                           //定时器0中断允许
  172.         TH0 = (-50000)/256;
  173.         TL0 = (-50000)%256;                                          //设定时每隔50ms中断一次
  174.         TR0 = 1;
  175. }

  176. //---------------------------------------------------------------------

  177. void yanshi(unsigned char del)
  178. {
  179.         unsigned char i;
  180.         for(;del>0;del--)
  181.         for(i=0;i<125;i++)
  182.         {;}
  183. }


  184. void main()
  185. {


  186.         TIME0_Init();
  187.         while(1)
  188.         {                       
  189.                 if(task1_en)         //判断进入中断
  190.                 {
  191.                         if(cheakheader()==1)
  192.                         {
  193.                         uchar jiaoyan;
  194.                     
  195.                     ReceiveData(rece_datas,8);
  196.                         jiaoyan=ReceChecksum();
  197.                         send_datas[0]=rece_datas[0];       

  198.                         LIN(0XD0, 8, 1);
  199.                         judge();
  200.                         send_datas[0]=rece_datas[0];       

  201.                         LIN(0XD0, 8, 1);
  202.                         }
  203.                         task1_en = 0;                       
  204.                 }                                                                                 

  205.                
  206.                 if(task2_en)
  207.                 {
  208.                         //LIN(0X20, 4, 0);
  209.                         //task2_en = 0;

  210.                 }                  
  211.         }
  212. }

  213. void timeint0(void) interrupt 1
  214. {
  215.         TH0 = (-50000)/256;
  216.         TL0 = (-50000)%256;                                          //设定时每隔50ms中断一次
  217.         switch(TASK)                                                        //TASK默认为 0
  218.         {
  219.                 case task1:                                                        //task1默认为0
  220.                         TASK = task2;
  221.                         task1_en = 1;
  222.                         task2_en = 0;
  223.                         break;
  224.                 case task2:
  225.                         TASK = task1;
  226.                         task1_en = 0;
  227.                         task2_en = 1;
  228.                         break;
  229.                 default:
  230.                         TASK = task1;
  231.                         task1_en = 0;
  232.                         task2_en = 0;
  233.                         break;
  234.         }
  235. }

  236. void LIN(uchar ID_temp, uchar num_temp, bit send_or_rece)
  237. {
  238.                 ID = ID_temp;
  239.                 num = num_temp;
  240.                 if(send_or_rece)
  241.                         LIN_SLAVE = send_data;                   //1发送,0接收  ,此处为发送,send_data的值为1,所以LIN_SLAVE也为1
  242.                 else
  243.                         LIN_SLAVE = rece_data;                   //1发送,0接收  ,此处为接收,rece_data的值为2,所以LIN_SLAVE也为2

  244.                 SendSynchBreak();                 //主机任务
  245.                 SendSynch();
  246.                 SendID(ID);
  247.                                        
  248.                 switch(LIN_SLAVE)                   //从机任务,LIN_SLAVE的默认值为Init,即为0         
  249.                 {   
  250.                         case Init:
  251.                                 LIN_SLAVE = Init;
  252.                                 break;
  253.                                              
  254.                 case send_data:         //发送数据        ,1                                                               
  255.                                   SendData(send_datas,num);
  256.                                 check_sum=checksum(send_datas,num);
  257.                                 SendChecksum(check_sum);
  258.                                 LIN_SLAVE = Init;
  259.                                  
  260.                                 break;
  261.        
  262.                 case  rece_data: //接收数据          ,2
  263.                                 //check_sum=ReceChecksum();
  264.                         //        ReceiveData(rece_datas,num);
  265. //                                //check_sum = ReceChecksum();                                         
  266.                              break;
  267.                                  
  268.                         default        :
  269.                                 LIN_SLAVE = Init;
  270.                                 break;       
  271.             }
  272. }

  273. //识别起始间隔,同步间隔,ID号
  274. uchar  cheakheader()
  275. {  uchar  header,idhao;
  276.    while(1)
  277.    {
  278.     SetBaud(b9600);
  279.     header= UartReceive();

  280.         if(header==0x55)                                  
  281.         {
  282.      SetBaud(b9600);
  283.      idhao=UartReceive();
  284.      if(idhao==0xF0)
  285.           break;
  286.         }


  287.    }
  288.    return(1);
  289. }





  290. //        逆转
  291. void  dianji1(uchar c)
  292. {  
  293.         unsigned char b,d,h;
  294.            for(h=0;h<c;h++)
  295.           {
  296.                    for (b=0;b<15;b++)
  297.                    {
  298.                        for (d=0;d<4;d++)
  299.                            {
  300.                              P2 = B_Rotation[d];
  301.                              yanshi(50);
  302.                         }
  303.             }
  304.            }
  305. }

  306. //顺转
  307. void  dianji2(uchar k)
  308. {  
  309.         unsigned char b,g,d;
  310.            for(g=0;g<k;g++)
  311.           {
  312.                    for (b=0;b<15;b++)
  313.                    {
  314.                        for (d=0;d<4;d++)
  315.                            {
  316.                              P2 = F_Rotation[d];
  317.                              yanshi(50);
  318.                         }
  319.    
  320.             }
  321.           }
  322. }


  323.   
  324. void judge()
  325. {

  326.   while(start!=0x00)
  327.   {
  328.       dianjistate = rece_datas[0];

  329.           if((dianjistate1<=0x20 && dianjistate1>=0x00)==1)//0x20---0x00
  330.           {
  331.                   if((dianjistate<=0x20 &&dianjistate>=0x00)==1)
  332.                   {
  333.                                   dianjistate1=rece_datas[0];
  334.                              break;       
  335.                   }
  336.                   else if((dianjistate<=0x40 && dianjistate>0x20)==1)
  337.                   {  
  338.                                   dianji2(1);
  339.                                  dianjistate1=rece_datas[0];
  340.                                  break;          
  341.                   }
  342.                   else if((dianjistate<=0x60 &&dianjistate>0x40)==1)
  343.                   {
  344.                                   dianji2(2);                         
  345.                                  dianjistate1=rece_datas[0];
  346.                                  break;
  347.                   }
  348.                   else if((dianjistate<=0x80 &&dianjistate>0x60)==1)
  349.                   {
  350.                                   dianji2(3);                         
  351.                                  dianjistate1=rece_datas[0];
  352.                                  break;
  353.                   }
  354.                   else if((dianjistate<=0xA0 &&dianjistate>0x80)==1)
  355.                   {
  356.                                   dianji2(4);                         
  357.                             dianjistate1=rece_datas[0];
  358.                                  break;
  359.                   }
  360.                   else if((dianjistate<=0xC0 &&dianjistate>0xA0)==1)
  361.                   {
  362.                                   dianji2(5);                         
  363.                                  dianjistate1=rece_datas[0];
  364.                                  break;
  365.                   }
  366.                   else if((dianjistate<=0xFF &&dianjistate>0xC0)==1)
  367.                   {
  368.                                   dianji2(6);                         
  369.                                  dianjistate1=rece_datas[0];
  370.                                  break;
  371.                   }
  372.           }
  373.           else  if((dianjistate1<=0x40 && dianjistate1>0x20)==1)//0x40--0x20
  374.           {
  375.                   if((dianjistate<=0x20 &&dianjistate>=0x00)==1)
  376.                   {
  377.                                   dianji1(1);
  378.                                  dianjistate1=rece_datas[0];
  379.                              break;
  380.                   }
  381.                   else if((dianjistate<=0x40 &&dianjistate>0x20)==1)
  382.                   {
  383.                                  dianjistate1=rece_datas[0];
  384.                                  break;
  385.                   }
  386.                   else if((dianjistate<=0x60 &&dianjistate>0x40)==1)
  387.                   {
  388.                                   dianji2(1);                         
  389.                                  dianjistate1=rece_datas[0];
  390.                                  break;
  391.                   }
  392.                   else if((dianjistate<=0x80 &&dianjistate>0x60)==1)
  393.                   {
  394.                                   dianji2(2);                         
  395.                                  dianjistate1=rece_datas[0];
  396.                                  break;
  397.                   }
  398.                   else if((dianjistate<=0xA0 &&dianjistate>0x80)==1)
  399.                   {
  400.                                   dianji2(3);                         
  401.                                  dianjistate1=rece_datas[0];
  402.                                  break;
  403.                   }
  404.                   else if((dianjistate<=0xC0 &&dianjistate>0xA0)==1)
  405.                   {
  406.                                   dianji2(4);                         
  407.                                  dianjistate1=rece_datas[0];
  408.                                  break;
  409.                   }
  410.                   else if((dianjistate<=0xFF &&dianjistate>0xC0)==1)
  411.                   {
  412.                                   dianji2(5);                         
  413.                                  dianjistate1=rece_datas[0];
  414.                                  break;
  415.                   }
  416.       }
  417.       else  if((dianjistate1<=0x60&&dianjistate1>0x40)==1)//0x60--0x40
  418.           {
  419.                   if((dianjistate<=0x20 &&dianjistate>=0x00)==1)
  420.                   {
  421.                                   dianji1(2);
  422.                                  dianjistate1=rece_datas[0];
  423.                              break;
  424.                   }
  425.                   else if((dianjistate<=0x40 &&dianjistate>0x20)==1)
  426.                   {           dianji1(1);
  427.                                  dianjistate1=rece_datas[0];
  428.                                  break;
  429.                   }
  430.                   else if((dianjistate<=0x60 &&dianjistate>0x40)==1)
  431.                   {
  432.                          
  433.                                  dianjistate1=rece_datas[0];
  434.                                  break;
  435.                   }
  436.                   else if((dianjistate<=0x80 &&dianjistate>0x60)==1)
  437.                   {
  438.                                   dianji2(1);                         
  439.                                  dianjistate1=rece_datas[0];
  440.                                  break;
  441.                   }
  442.                   else if((dianjistate<=0xA0 &&dianjistate>0x80)==1)
  443.                   {
  444.                                   dianji2(2);                         
  445.                                  dianjistate1=rece_datas[0];
  446.                                  break;
  447.                   }
  448.                   else if((dianjistate<=0xC0 &&dianjistate>0xA0)==1)
  449.                   {
  450.                                   dianji2(3);                         
  451.                                  dianjistate1=rece_datas[0];
  452.                                  break;
  453.                   }
  454.                   else if((dianjistate<=0xFF &&dianjistate>0xC0)==1)
  455.                   {
  456.                                   dianji2(4);                         
  457.                                  dianjistate1=rece_datas[0];
  458.                                  break;
  459.                   }
  460.       }
  461.           else  if((dianjistate1<=0x80 && dianjistate1>0x60)==1)//0x80--0x60
  462.           {
  463.                   if((dianjistate<=0x20 &&dianjistate>=0x00)==1)
  464.                   {
  465.                                   dianji1(3);
  466.                                  dianjistate1=rece_datas[0];
  467.                              break;
  468.                   }
  469.                   else if((dianjistate<=0x40 &&dianjistate>0x20)==1)
  470.                   {  
  471.                                   dianji1(2);
  472.                                  dianjistate1=rece_datas[0];
  473.                                  break;
  474.                   }
  475.                   else if((dianjistate<=0x60 &&dianjistate>0x40)==1)
  476.                   {
  477.                                   dianji1(1);                         
  478.                                  dianjistate1=rece_datas[0];
  479.                                  break;
  480.                   }
  481.                   else if((dianjistate<=0x80 &&dianjistate>0x60)==1)
  482.                   {                         
  483.                                  dianjistate1=rece_datas[0];
  484.                                  break;
  485.                   }
  486.                   else if((dianjistate<=0xA0 &&dianjistate>0x80)==1)
  487.                   {
  488.                                   dianji2(1);                         
  489.                                  dianjistate1=rece_datas[0];
  490.                                  break;         
  491.                   }
  492.                   else if((dianjistate<=0xC0 &&dianjistate>0xA0)==1)
  493.                   {
  494.                                   dianji2(2);                         
  495.                                  dianjistate1=rece_datas[0];
  496.                                  break;
  497.                   }
  498.                   else if((dianjistate<=0xFF &&dianjistate>0xC0)==1)
  499.                   {
  500.                                   dianji2(3);                         
  501.                                  dianjistate1=rece_datas[0];
  502.                                  break;
  503.                   }
  504.       }
  505.           else  if((dianjistate1<=0xA0 && dianjistate1>0x80)==1)//0xA0--0x80
  506.           {
  507.                   if((dianjistate<=0x20 &&dianjistate>=0x00)==1)
  508.                   {
  509.                                   dianji1(4);
  510.                                  dianjistate1=rece_datas[0];
  511.                              break;       
  512.                   }
  513.                   else if((dianjistate<=0x40 &&dianjistate>0x20)==1)
  514.                   {   
  515.                                   dianji1(3);
  516.                                  dianjistate1=rece_datas[0];
  517.                                  break;
  518.                   }
  519.                   else if((dianjistate<=0x60 &&dianjistate>0x40)==1)
  520.                   {
  521.                                   dianji1(2);                         
  522.                                  dianjistate1=rece_datas[0];
  523.                                  break;
  524.                   }
  525.                   else if((dianjistate<=0x80 &&dianjistate>0x60)==1)
  526.                   {
  527.                                   dianji1(1);                         
  528.                                  dianjistate1=rece_datas[0];
  529.                                  break;
  530.                   }
  531.                   else if((dianjistate<=0xA0 &&dianjistate>0x80)==1)
  532.                   {                          
  533.                                  dianjistate1=rece_datas[0];
  534.                                  break;
  535.                   }
  536.                   else if((dianjistate<=0xC0 &&dianjistate>0xA0)==1)
  537.                   {
  538.                                   dianji2(1);                         
  539.                                  dianjistate1=rece_datas[0];
  540.                                  break;
  541.                   }
  542.                   else if((dianjistate<=0xFF &&dianjistate>0xC0)==1)
  543.                   {
  544.                                   dianji2(2);                         
  545.                                  dianjistate1=rece_datas[0];
  546.                                  break;
  547.                   }
  548.           }
  549.           else  if((dianjistate1<=0xC0 && dianjistate1>0xA0)==1)//0xC0--0xA0
  550.           {
  551.                   if((dianjistate<=0x20 &&dianjistate>=0x00)==1)
  552.                   {
  553.                                   dianji1(5);
  554.                                  dianjistate1=rece_datas[0];
  555.                              break;
  556.                   }
  557.                   else if((dianjistate<=0x40 &&dianjistate>0x20)==1)
  558.                   {   
  559.                                   dianji1(4);
  560.                                  dianjistate1=rece_datas[0];
  561.                                  break;
  562.                   }
  563.                   else if((dianjistate<=0x60 &&dianjistate>0x40)==1)
  564.                   {
  565.                                   dianji1(3);                         
  566.                                  dianjistate1=rece_datas[0];
  567.                                  break;
  568.                   }
  569.                   else if((dianjistate<=0x80 &&dianjistate>0x60)==1)
  570.                   {
  571.                                   dianji1(2);                         
  572.                                  dianjistate1=rece_datas[0];
  573.                                  break;
  574.                   }
  575.                   else if((dianjistate<=0xA0 &&dianjistate>0x80)==1)
  576.                   {
  577.                                   dianji1(1);
  578.                                  dianjistate1=rece_datas[0];
  579.                                  break;
  580.                   }
  581.                   else if((dianjistate<=0xC0 &&dianjistate>0xA0)==1)
  582.                   {                         
  583.                                  dianjistate1=rece_datas[0];
  584.                                  break;
  585.                   }
  586.                   else if((dianjistate<=0xFF &&dianjistate>0xC0)==1)
  587.                   {        
  588.                                   dianji2(1);                         
  589.                                  dianjistate1=rece_datas[0];
  590.                                  break;
  591.                   }
  592.           }
  593.           else  if((dianjistate1<=0xFF && dianjistate1>0xC0)==1)//0xFF--0xC0
  594.           {
  595.                   if((dianjistate<=0x20 &&dianjistate>=0x00)==1)
  596.                   {
  597.                                   dianji1(6);
  598.                                  dianjistate1=rece_datas[0];
  599.                              break;
  600.                   }
  601.                   else if((dianjistate<=0x40 &&dianjistate>0x20)==1)
  602.                   {   
  603.                                   dianji1(5);
  604.                                  dianjistate1=rece_datas[0];
  605.                                  break;
  606.                   }
  607.                   else if((dianjistate<=0x60 &&dianjistate>0x40)==1)
  608.                   {
  609.                                   dianji1(4);                         
  610.                                  dianjistate1=rece_datas[0];
  611.                                  break;
  612.                   }
  613.                   else if((dianjistate<=0x80 &&dianjistate>0x60)==1)
  614.                   {
  615.                                   dianji1(3);                         
  616.                                  dianjistate1=rece_datas[0];
  617.                                  break;
  618.                   }
  619.                   else if((dianjistate<=0xA0 &&dianjistate>0x80)==1)
  620.                   {
  621.                                   dianji1(2);
  622.                                  dianjistate1=rece_datas[0];
  623.                                  break;
  624.                   }
  625.                   else if((dianjistate<=0xC0 &&dianjistate>0xA0)==1)
  626.                   {
  627.                                   dianji1(1);
  628.                                  dianjistate1=rece_datas[0];
  629.                                  break;
  630.                   }
  631.                   else if((dianjistate<=0xFF &&dianjistate>0xC0)==1)
  632.                   {                          
  633.                                  dianjistate1=rece_datas[0];
  634.                                  break;
  635.                   }
  636.           }
  637.   }//end for while(start != 0x00)

  638. if(start==0x00)
  639. {
  640.      //dianjireset();
  641.      dianjistate1=rece_datas[0];
  642.          start=0xFF;
  643. }

  644. }

  645. void  dianjireset()
  646. {
  647.           dianjistate = rece_datas[0];
  648.           if(dianjistate>=0x00 && dianjistate<=0x40)
  649.           {
  650.                           dianji2(1);
  651.                            dianji2(1);
  652.           }          
  653.           else if (dianjistate>0x40 && dianjistate<=0x80)
  654.           dianji2(1);          
  655.           else  if(dianjistate>0x80 && dianjistate<=0xC0)
  656.           dianji1(1);       
  657.           else  if(dianjistate>0xC0 && dianjistate<=0xFF)
  658.           {
  659.                           dianji1(1);
  660.                           dianji1(1);
  661.           }
  662.           else
  663.           {;}
  664.    
  665. }
复制代码
51hei.png

以上2个文件下载: lin从机源代码(1).rar (4.5 KB, 下载次数: 44)

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:300165 发表于 2021-12-4 13:34 | 显示全部楼层
这是stc单片机吧,不是STM8吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表