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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DIY帶電壓電流表的多功能STC免冷啟動自動下載器原理圖+PCB+源程序

  [復制鏈接]
跳轉到指定樓層
樓主
{感謝原作者提供}
//STC多用下載器
//單片機用STC15W208AS,頻率為22.1M,注意單片機只有時鐘0及2
//功能有串口自動斷電下載,4路輸入電壓檢測(最大值25V),輸
//出5v及3.3V的檢測,輸出電流檢測,外接輸入電壓檢測,及單片機的電壓檢測。
//串口監控下載,如連續為0X7F的值,就說明要斷電重啟下載數據,
//串口斷電控制方式,每0.1s變一次波特率,如收到是7F的值,
//就停止變波特率,判斷是否是連接7F,如是就斷電重啟。
//4輸入的最大值為25v,電流最大值為2a
//開關的作用,短按為換頁,長按為輸出電源控制開關。






單片機源程序如下:
  1. #include <STC15W408AS.h>
  2. #include <intrins.h>
  3. #include <oled.h>
  4. unsigned char oldkey,keyval,jisu,rxdatvol,RSjisu,onjisu,RETjisu,kkkkjisu;
  5. unsigned int keyjixu;
  6. bit readtimekong,disppagebit,powonkong,time02s,RSPOWonkong,kkkk,time01kong;
  7. unsigned char  STCADbit[9];
  8. unsigned int STCADvol[9],voldat[9];
  9. unsigned char tetete;
  10. sbit KEY1=P5^5;
  11. sbit LEDout=P5^4;
  12. sbit POWkong=P3^7;
  13. void delay(unsigned int t) //長延時程序,延時t毫秒,STC 1T單片機11.0592M晶振I值為648,22.1I值為1298,12MI值為705。
  14. {
  15.          unsigned int i;
  16.          while(t--)
  17.            {
  18.                 for(i=705;i>0;i--);
  19.            }
  20. }

  21. void delay1() //
  22. {
  23.          unsigned int i;
  24.                 for(i=340;i>0;i--);
  25.           
  26. }

  27. //以下為AD檢測
  28. void ADCINT()
  29. {
  30.         P1M1=0xff;//AD高阻
  31.    P1ASF=0xff;//設置 P1為AD口,根據實際設置。
  32.    ADC_RES=0;//ad清0
  33.   // AUXR1=0x04;//設置數據方式,低8位+高2位方式,易于運算。
  34.   CLK_DIV=0X20;//由于408AS與204E不同,需寫成這。
  35. }
  36. unsigned int ADCwrite(unsigned char ch)
  37. { //由于所檢測的電壓不用快,所以采用查詢或延時法,沒用中斷法。 ch值從0-7,對應為P10-P17
  38.         unsigned int x;
  39.         ADC_CONTR=0x88+ch;//設置啟動 ,用慢速采集
  40.         //查詢法。查詢是否完成AD,由于是單片機內的,如出錯單片機也出錯,所以沒做跳開處理。
  41.         while ( !(ADC_CONTR & 0x10) );//等待A/D轉換結束(ADC_FLAG==0)
  42.         ADC_CONTR &= 0xE7;             //11100111,置ADC_FLAG=0清除結束標記, 置ADC_START=0關閉A/D 轉換       
  43.         //delay(1);//延時法。由于設置及晶振的原因,大約為20US完成過程。這里延時1MS
  44.           x=ADC_RES*256+ADC_RESL;

  45.   return x;
  46. }

  47. void nowtempAD()
  48. {//采用采集10次取平均值,整個采集時間在20MS,防止交流干擾。 每0.2S運行一次
  49.         //0為3.3V,1為輸入1,2為輸入2,3為輸入3,4為輸入4,5為+5V,6為外接IN,7為電流,8為計算出來的單片機電壓CPU。
  50.   unsigned char x,xx;
  51.         unsigned int k=0;
  52.         unsigned long y;
  53.         bit ll=0;
  54.         for(x=0;x<9;x++)
  55.         {
  56.                 STCADvol[x]=0;
  57.         }

  58.        
  59.   for(x=0;x<10;x++)//采集10次。
  60.   {
  61.     P1ASF=0x00;
  62.                 STCADvol[0]=ADCwrite(0)+STCADvol[0];//1.25V基準       
  63.                 delay1();
  64.                 P1ASF=0xff;
  65.                 for(xx=0;xx<8;xx++)
  66.           {
  67.                 STCADvol[xx+1]=ADCwrite(xx)+STCADvol[xx+1];
  68.           }
  69.         }
  70. //以下為計算       
  71. for(x=0;x<9;x++)
  72.         {
  73.                 STCADvol[x]=STCADvol[x]/10;

  74.                 if(STCADvol[x]>1000)
  75.                 {
  76.                         STCADbit[x]=1;
  77.                 }
  78.                 else
  79.                 {
  80.                         STCADbit[x]=0;
  81.                 }
  82.         }
  83. //0為3.3V,1為輸入1,2為輸入2,3為輸入3,4為輸入4,5為+5V,6為外接IN,7為電流,8為計算出來的單片機電壓CPU。
  84. //以下的125等值是用于修改的。如電壓與實測不同,需修改這個值。       
  85.         y=(long)1024*125/STCADvol[0];//STCADvol[0]為基準
  86.         voldat[8]=y;//8為計算出來的單片機電壓CPU。
  87.         y=(long)STCADvol[1]*124/STCADvol[0];
  88.         voldat[0]=y;////0為3.3V,
  89.         y=(long)STCADvol[2]*685/STCADvol[0];
  90.         voldat[1]=y;//1為輸入1,
  91.         y=(long)STCADvol[3]*703/STCADvol[0];
  92.         voldat[2]=y;//2為輸入2,
  93.         y=(long)STCADvol[4]*706/STCADvol[0];
  94.         voldat[3]=y;//3為輸入3,
  95.         y=(long)STCADvol[5]*702.5/STCADvol[0];
  96.         voldat[4]=y;//4為輸入4,
  97.         y=(long)STCADvol[6]*248/STCADvol[0];
  98.         voldat[5]=y;//5為+5V,
  99.         y=(long)STCADvol[7]*53/STCADvol[0];
  100.         voldat[6]=y;//6為外接IN,
  101.         y=(long)STCADvol[8]*59/STCADvol[0];
  102.         voldat[7]=y;//7為電流,

  103. }
  104. void disp0(bit all)
  105. {
  106.         if(all==1)
  107.         {
  108.         OLED_Clear();
  109.        
  110.         OLED_ShowCHinese(4,0,0);
  111.         OLED_ShowCHinese(20,0,1);
  112.         OLED_ShowCHinese(36,0,2);
  113.         OLED_ShowChar(52,0,13);
  114.         OLED_ShowChar(60,0,14);
  115.         OLED_ShowChar(68,0,15);
  116.         OLED_ShowCHinese(76,0,3);
  117.         OLED_ShowCHinese(92,0,4);
  118.         OLED_ShowCHinese(108,0,5);
  119.        
  120.         //+5V:5.05V
  121.         OLED_ShowChar(0,2,18);
  122.         OLED_ShowChar(12,2,5);
  123.         OLED_ShowChar(24,2,19);
  124.         OLED_ShowChar(32,2,10);
  125.         OLED_ShowChar(72,2,19);
  126.         //3.3V:3.30V
  127.         OLED_ShowChar(0,4,3);
  128.         OLED_ShowChar(8,4,20);
  129.         OLED_ShowChar(16,4,3);
  130.         OLED_ShowChar(24,4,19);
  131.         OLED_ShowChar(32,4,10);               
  132.         OLED_ShowChar(72,4,19);       
  133.         //電流:0.50A
  134.         OLED_ShowCHinese(0,6,6);
  135.         OLED_ShowCHinese(16,6,8);
  136.         OLED_ShowChar(32,6,10);       
  137.         OLED_ShowChar(72,6,21);
  138.                 //IN:12.5V
  139.         OLED_ShowChar8x6(98,2,17);
  140.         OLED_ShowChar8x6(104,2,18);
  141.         OLED_ShowChar8x6(110,2,16);
  142.         OLED_ShowChar(119,3,19);
  143.         //CPU:5.05V
  144.         OLED_ShowChar8x6(95,5,19);
  145.         OLED_ShowChar8x6(101,5,20);
  146.         OLED_ShowChar8x6(107,5,21);
  147.         OLED_ShowChar8x6(113,5,16);
  148.         OLED_ShowChar(119,6,19);

  149.                 }
  150.                 //0為3.3V,1為輸入1,2為輸入2,3為輸入3,4為輸入4,5為+5V,6為外接IN,7為電流,8為計算出來的單片機電壓CPU。
  151.         //+5V值
  152.                 if(STCADbit[6]==1)
  153.                 {//OL
  154.                         OLED_ShowChar(40,2,22);
  155.                         OLED_ShowChar(48,2,23);
  156.                         OLED_ShowChar(56,2,11);
  157.                         OLED_ShowChar(64,2,11);

  158.                 }
  159.                 else
  160.                 {
  161.                         OLED_ShowChar(40,2,voldat[5]/100);
  162.                         OLED_ShowChar(48,2,20);
  163.                         OLED_ShowChar(56,2,voldat[5]%100/10);
  164.                         OLED_ShowChar(64,2,voldat[5]%10);
  165.                 }
  166.         //3.3V值
  167.         if(STCADbit[1]==1)
  168.         {
  169.                 OLED_ShowChar(40,4,22);
  170.                 OLED_ShowChar(48,4,23);
  171.                 OLED_ShowChar(56,4,11);
  172.                 OLED_ShowChar(64,4,11);

  173.         }
  174.         else
  175.         {
  176.                 OLED_ShowChar(40,4,voldat[0]/100);
  177.                 OLED_ShowChar(48,4,20);
  178.                 OLED_ShowChar(56,4,voldat[0]%100/10);
  179.                 OLED_ShowChar(64,4,voldat[0]%10);
  180.         }
  181.         //電流值
  182.         if(STCADbit[8]==1)
  183.         {
  184.                 OLED_ShowChar(40,6,22);
  185.                 OLED_ShowChar(48,6,23);       
  186.                 OLED_ShowChar(56,6,11);
  187.                 OLED_ShowChar(64,6,11);

  188.         }
  189.         else
  190.         {
  191.                 OLED_ShowChar(40,6,voldat[7]/100);
  192.                 OLED_ShowChar(48,6,20);       
  193.                 OLED_ShowChar(56,6,voldat[7]%100/10);
  194.                 OLED_ShowChar(64,6,voldat[7]%10);
  195.         }
  196.   //IN值
  197.         if(STCADbit[7]==1)
  198.         {
  199.                 OLED_ShowChar(88,3,22);
  200.                 OLED_ShowChar(96,3,23);
  201.                 OLED_ShowChar(104,3,11);
  202.                 OLED_ShowChar(111,3,11);
  203.         }
  204.         else
  205.         {
  206.                 OLED_ShowChar(88,3,voldat[6]/100);
  207.                 OLED_ShowChar(96,3,voldat[6]%100/10);
  208.                 OLED_ShowChar(104,3,20);
  209.                 OLED_ShowChar(111,3,voldat[5]%10);
  210.         }
  211.         //CPU值
  212.         OLED_ShowChar(88,6,voldat[8]/100);
  213.   OLED_ShowChar(96,6,20);       
  214.         OLED_ShowChar(103,6,voldat[8]%100/10);
  215.         OLED_ShowChar(111,6,voldat[8]%10);
  216.        
  217.        
  218. }
  219. void disp1(bit all)
  220. {
  221.         if(all==1)
  222.         {
  223.         OLED_Clear();
  224.        
  225.         //電壓1:12.55V
  226.        
  227.         OLED_ShowCHinese(0,0,6);
  228.         OLED_ShowCHinese(16,0,7);
  229.         OLED_ShowChar(32,0,1);
  230.         OLED_ShowChar(40,0,10);
  231.         OLED_ShowChar(68,0,20);
  232.         OLED_ShowChar(92,0,19);
  233.         //電壓2:12.55V
  234.         OLED_ShowCHinese(0,2,6);
  235.         OLED_ShowCHinese(16,2,7);
  236.         OLED_ShowChar(32,2,2);
  237.         OLED_ShowChar(40,2,10);
  238.         OLED_ShowChar(68,2,20);
  239.         OLED_ShowChar(92,2,19);
  240.         //電壓3:12.55V
  241.         OLED_ShowCHinese(0,4,6);
  242.         OLED_ShowCHinese(16,4,7);
  243.         OLED_ShowChar(32,4,3);
  244.         OLED_ShowChar(40,4,10);
  245.         OLED_ShowChar(68,4,20);
  246.         OLED_ShowChar(92,4,19);
  247.         //電壓4:12.55V
  248.         OLED_ShowCHinese(0,6,6);
  249.         OLED_ShowCHinese(16,6,7);
  250.         OLED_ShowChar(32,6,4);
  251.         OLED_ShowChar(40,6,10);
  252.         OLED_ShowChar(68,6,20);
  253.         OLED_ShowChar(92,6,19);
  254.         }
  255.         //0為3.3V,1為輸入1,2為輸入2,3為輸入3,4為輸入4,5為+5V,6為外接IN,7為電流,8為計算出來的單片機電壓CPU。
  256.         //電壓1值
  257.         if(STCADbit[2]==1)
  258.         {
  259.                 OLED_ShowChar(52,0,22);
  260.                 OLED_ShowChar(60,0,23);
  261.                 OLED_ShowChar(76,0,11);
  262.                 OLED_ShowChar(84,0,11);
  263.         }
  264.         else
  265.         {               
  266.                 OLED_ShowChar(52,0,voldat[1]/1000);
  267.                 OLED_ShowChar(60,0,voldat[1]%1000/100);
  268.                 OLED_ShowChar(76,0,voldat[1]%100/10);
  269.                 OLED_ShowChar(84,0,voldat[1]%10);
  270.   }       
  271.         //電壓2值
  272.         if(STCADbit[3]==1)
  273.         {
  274.                 OLED_ShowChar(52,2,22);
  275.                 OLED_ShowChar(60,2,23);
  276.                 OLED_ShowChar(76,2,11);
  277.                 OLED_ShowChar(84,2,11);
  278.         }
  279.         else
  280.         {               
  281.         OLED_ShowChar(52,2,voldat[2]/1000);
  282.         OLED_ShowChar(60,2,voldat[2]%1000/100);       
  283.         OLED_ShowChar(76,2,voldat[2]%100/10);
  284.         OLED_ShowChar(84,2,voldat[2]%10);       
  285.         }
  286.         //電壓3值
  287.                 if(STCADbit[4]==1)
  288.         {
  289.                 OLED_ShowChar(52,4,22);
  290.                 OLED_ShowChar(60,4,23);
  291.                 OLED_ShowChar(76,4,11);
  292.                 OLED_ShowChar(84,4,11);
  293.         }
  294.         else
  295.         {               
  296.         OLED_ShowChar(52,4,voldat[3]/1000);
  297.         OLED_ShowChar(60,4,voldat[3]%1000/100);
  298.         OLED_ShowChar(76,4,voldat[3]%100/10);
  299.         OLED_ShowChar(84,4,voldat[3]%10);
  300.         }
  301.         //電壓4值
  302.                 if(STCADbit[5]==1)
  303.         {
  304.                 OLED_ShowChar(52,6,22);
  305.                 OLED_ShowChar(60,6,23);
  306.                 OLED_ShowChar(76,6,11);
  307.                 OLED_ShowChar(84,6,11);
  308.         }
  309.         else
  310.         {               
  311.         OLED_ShowChar(52,6,voldat[4]/1000);
  312.         OLED_ShowChar(60,6,voldat[4]%1000/100);       
  313.         OLED_ShowChar(76,6,voldat[4]%100/10);
  314.         OLED_ShowChar(84,6,voldat[4]%10);
  315.         }
  316. }
  317. //***********************鍵盤掃描子程序。******************
  318. //*********************************************************
  319. unsigned char keyboard()//鍵盤掃描
  320. {
  321.       unsigned char keyboardj;
  322.      keyboardj=0;
  323.     if(KEY1==0)
  324.           {
  325.         delay(10);
  326.                   if(KEY1==0)
  327.                   {
  328.                           keyboardj=1;
  329.                   }
  330.       }
  331.          
  332.    return  keyboardj;
  333. }
  334. //************鍵盤控制子程序***************
  335. //
  336. //
  337. //******************************************
  338. void keykong()//主要功能是
  339. {
  340.    unsigned char keyyy;
  341.    keyyy=keyboard();
  342.        
  343. if (keyyy!=oldkey)
  344.         {
  345.                 if(keyyy==0)//
  346.       {       
  347.                                 if(keyjixu>0)
  348.                                 {
  349.                                         if(keyjixu<80)
  350.                                         {
  351.                                                 if(oldkey==1)
  352.                                                 {
  353.                                                         keyval=1;
  354.                                                 }
  355.                                         }
  356.                                         else
  357.                                         {
  358.                                                 //keyval=11;
  359.                                                 keyjixu=0;
  360.                                         }
  361.                                 }
  362.                                 else
  363.                                 {
  364.                                         keyval=0;
  365.                                   keyjixu=0;
  366.                                 }
  367.                         }
  368.          
  369.         }
  370.   oldkey=keyyy;       
  371.         if(keyyy==1)//
  372.                 {
  373.                         keyjixu++;
  374.                         if(keyjixu==80)keyval=11;
  375.                 }
  376.          //鍵盤處理完成。
  377. //以下為功能子程序               
  378.          if(keyval==1)
  379.                 {
  380.                  keyval=0;//這步必須的,清鍵值。
  381.                         keyjixu=0;//清計數值,這兩步是必要的。
  382.                         //短按翻頁
  383.                         if(disppagebit==1)
  384.                         {
  385.                                 disppagebit=0;
  386.                                 disp0(1);
  387.                         }
  388.                         else
  389.                         {
  390.                                 disppagebit=1;
  391.                                 disp1(1);
  392.                         }
  393.                
  394.                
  395.                 }                               
  396.                 if(keyval==11)
  397.                 {//
  398.                  keyval=0;//這步必須的,清鍵值。
  399.                         //keyjixu=0;//清計數值,這兩步是必要的。
  400.                 //長按開關電源
  401.                         if(powonkong==0)
  402.                         {
  403.                         powonkong=1;//開總電源
  404.             POWkong=0;//電源控制
  405.                         }
  406.                         else
  407.                         {
  408.                                 powonkong=0;//開總電源
  409.             POWkong=1;//電源控制
  410.                         }
  411.                 }
  412. }


  413. void Timer0Init(void)                //2毫秒@22.1184MHz
  414. {
  415.         AUXR |= 0x80;                //定時器時鐘1T模式
  416.         TMOD &= 0xF0;                //設置定時器模式
  417.         TMOD |= 0x01;                //設置定時器模式
  418.         TL0 = 0x33;                //設置定時初值
  419.         TH0 = 0x53;                //設置定時初值
  420.         TF0 = 0;                //清除TF0標志
  421.         TR0 = 1;                //定時器0開始計時

  422.         ET0=1; //啟動T定中斷
  423.        
  424.         //IT1=1;//置中斷1為脈沖低電平觸發。
  425.   //EX1=1;//開中斷1
  426.        
  427.   EA=1; //啟動總中斷
  428. }
  429. /*void rs1_232tx(unsigned char txdata)
  430. {
  431.          SBUF=txdata;//把數據傳給串口寄存器SBUF。
  432.          while(!TI);//檢測是否發完。
  433.          TI=0;//重置初值。
  434. }*/
  435. void UartInit(void)                //19200bps@22.1184MHz
  436. {
  437.         SCON = 0x50;                //8位數據,可變波特率
  438.         AUXR |= 0x01;                //串口1選擇定時器2為波特率發生器
  439.         AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
  440.         T2L = 0xE0;                //設定定時初值
  441.         T2H = 0xFE;                //設定定時初值
  442.         AUXR |= 0x10;                //啟動定時器2
  443.        
  444.         ES=1;//開中斷
  445. }
  446. void UartInit1()//這個是變化的串口參數
  447. {
  448.         ES=0;//關串口中斷
  449.         RETjisu=0;
  450.         onjisu=0;
  451.         rxdatvol=0;
  452.         //OLED_ShowChar(0,0,RSjisu);
  453.         //rs1_232tx(RSjisu);
  454.         switch(RSjisu)
  455.         {
  456.                 case 0:
  457.             T2L = 0x00;                //設定定時初值//1200bps@22.1184MHz
  458.             T2H = 0xEE;                //設定定時初值
  459.            break;
  460.                 case 1:
  461.                         T2L = 0x00;                //設定定時初值//2400bps@22.1184MHz
  462.                         T2H = 0xF7;                //設定定時初值
  463.                  break;
  464.                 case 2:       
  465.                         T2L = 0x80;                //設定定時初值//4800bps@22.1184MHz
  466.                         T2H = 0xFB;                //設定定時初值
  467.                  break;
  468.                 case 3:       
  469.                         T2L = 0xC0;                //設定定時初值//9600bps@22.1184MHz
  470.                         T2H = 0xFD;                //設定定時初值
  471.                  break;       
  472.                 case 4:
  473.                   T2L = 0x80;                //設定定時初值//14400bps@22.1184MHz
  474.             T2H = 0xFE;                //設定定時初值
  475.                   break;
  476.     case 5:
  477.                         T2L = 0xE0;                //設定定時初值//19200bps@22.1184MHz
  478.                         T2H = 0xFE;                //設定定時初值
  479.                  break;
  480.                 case 6:       
  481.                   T2L = 0x40;                //設定定時初值//28800bps@22.1184MHz
  482.             T2H = 0xFF;                //設定定時初值
  483.                   break;
  484.                 case 7:       
  485.                         T2L = 0x70;                //設定定時初值//38400bps@22.1184MHz
  486.                         T2H = 0xFF;                //設定定時初值
  487.                  break;
  488.                 case 8:       
  489.                         T2L = 0xA0;                //設定定時初值//57600bps@22.1184MHz
  490.                         T2H = 0xFF;                //設定定時初值
  491.                  break;
  492.                 case 9:       
  493.                         T2L = 0xD0;                //設定定時初值//115200bps@22.1184MHz
  494.                         T2H = 0xFF;                //設定定時初值
  495.                 break;
  496. }
  497. RSjisu++;
  498. if(RSjisu>9)RSjisu=0;
  499. delay(20);
  500. ES=1;//開中斷
  501. }
  502. void main()
  503. {
  504.         P5M0=0x10;//P54推換
  505.         Timer0Init();
  506.         UartInit();
  507.         OLED_Init();
  508.         ADCINT();
  509.         WDT_CONTR=0X3d;//開看門狗,由于是長時間工作,防止死機。2S內喂狗一次。
  510.   AUXR1=0x40;//串口轉P3637
  511. disp0(1);
  512.         disppagebit=0;
  513.         powonkong=1;//開總電源
  514.         POWkong=0;//電源控制
  515.         while(1)
  516.         {
  517.                 WDT_CONTR=0X3d;//開看門狗,由于是長時間工作,防止死機。2S內喂狗一次。
  518.                 keykong();
  519.                 if(readtimekong==1)
  520.                 {
  521.                         nowtempAD();
  522.                         if(disppagebit==0)
  523.                         {
  524.                                 disp0(0);//刷新
  525.                                
  526.                         }
  527.                         else
  528.                         {
  529.                                 disp1(0);
  530.                         }
  531.                         //if(powonkong==1)
  532.                         //{//當總控為開,LED亮,如串口收到0x7f,就閃
  533.                                 if(time02s==1&&rxdatvol==0x7f)//當收到7F時,表示下載,閃,
  534.                                 {
  535.                                         LEDout=0;
  536.                                 }
  537.                                 else
  538.                                 {
  539.                                 LEDout=1;
  540.                                 }
  541.                 //        }
  542.                         //else
  543.                         //{
  544.                         //        LEDout=0;
  545.                 //        }
  546.                        
  547.                         if(RSPOWonkong==1)
  548.                         {//當收到重啟控制時,判斷當前是不是處于總電源開,如是開就啟動重啟
  549.                                 if(powonkong==1)
  550.                                 {//整個過程大約需1.5s
  551.                                         RETjisu++;
  552.                                         if(RETjisu==2)POWkong=1;//關電源控制
  553.                                         if(RETjisu==4)POWkong=0;//開電源控制
  554.                                         if(RETjisu==8)
  555.                                         {
  556.                                                 RSPOWonkong=0;//清控制值
  557.                                                 RETjisu=0;
  558.                   onjisu=0;
  559.                                         }
  560.                                 }
  561.                                
  562.                                
  563.                         }
  564.                        
  565.                
  566.                         readtimekong=0;
  567.           }       
  568.                 if(time01kong==1)       
  569.                 {
  570.       if(kkkk==1)
  571.                         {
  572.                                 kkkkjisu++;
  573.                                 if(kkkkjisu>3)
  574.                                 {
  575.                                 kkkk=0;
  576.                                         kkkkjisu=0;
  577.                                 }
  578.                         }
  579.                         else
  580.                         {
  581.                                 UartInit1();
  582.                         }
  583.                         time01kong=0;
  584.                 }
  585.                
  586.   }
  587. }

  588. void tt0(void) interrupt 1
  589. {//2毫秒@22.1184MHz
  590. //200MS數據,
  591.        
  592.         TL0 = 0x33;                //設置定時初值
  593.         TH0 = 0x53;                //設置定時初值

  594.          jisu++;
  595.         if(jisu==50)time01kong=1;
  596.          if(jisu>=100)  //0.2S
  597.          {
  598.                  jisu=0;
  599.                  readtimekong=1;
  600.                  time01kong=1;
  601.                  time02s=~time02s;
  602.          }
  603. }

  604. void comm1(void) interrupt 4
  605. { //串口1中斷  控接收協議:2B引導碼FF FE,開關值及左右轉值(加1為0x01,減10x02,短按0x04,長按0x08)。
  606. //注意清空RSzhuantai值,防止接收到非法數據不返回。
  607.   if(RI)
  608.     {
  609.                
  610.           RI=0;        //rs1_232tx(SBUF);
  611.           rxdatvol=SBUF;
  612.                 if(rxdatvol==0x7f)
  613.                         {
  614.                                 kkkk=1;
  615.                                 onjisu++;
  616.                                 if(onjisu>20)
  617.                                 {
  618.                                         RSPOWonkong=1;//連接接收20次就重啟
  619. ……………………

  620. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載(原理圖+pcb+源碼):
DIY帶電壓電流表的多功能STC免冷啟動自動下載器.zip (593.47 KB, 下載次數: 306)


評分

參與人數 3黑幣 +110 收起 理由
brave_ruan + 5 贊一個!
舊城以西的故事 + 5 很給力!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:79034 發表于 2018-1-26 22:30 | 只看該作者
這個怎么沒人頂?我來頂一下,樓主肯分享自己的成果,必須頂一下。
回復

使用道具 舉報

板凳
ID:65956 發表于 2018-3-5 10:09 | 只看該作者
功能這么多是好,但是在下載時,要這些又有什么用呢?如果帶脫機功能那這個就有意義
回復

使用道具 舉報

地板
ID:200521 發表于 2018-4-11 21:13 | 只看該作者
感謝分享,學習了,
回復

使用道具 舉報

5#
ID:303099 發表于 2018-4-24 16:17 | 只看該作者
值得學習,下載了~~~~~~~~~~~~~~~
回復

使用道具 舉報

6#
ID:306962 發表于 2018-4-25 12:53 來自手機 | 只看該作者
學習adc呢。謝謝
回復

使用道具 舉報

7#
ID:152434 發表于 2018-4-28 10:50 | 只看該作者
給你點個贊,相見恨晚啊
回復

使用道具 舉報

8#
ID:243748 發表于 2018-4-29 22:34 來自手機 | 只看該作者
有空也想做一個玩下
回復

使用道具 舉報

9#
ID:265684 發表于 2018-5-16 16:36 來自手機 | 只看該作者
弱弱的想問一下,這些功能對實際下載的時候有什么用
回復

使用道具 舉報

10#
ID:286606 發表于 2018-5-18 17:17 | 只看該作者
可以脫機嗎
回復

使用道具 舉報

11#
ID:233015 發表于 2018-5-20 16:18 | 只看該作者
很給力
回復

使用道具 舉報

12#
ID:138918 發表于 2018-6-29 18:37 | 只看該作者
看起來不錯的樣子 收藏學習
回復

使用道具 舉報

13#
ID:111376 發表于 2020-1-12 21:41 | 只看該作者
感謝分享,收藏學習
回復

使用道具 舉報

14#
ID:140183 發表于 2020-1-19 07:18 | 只看該作者
很好的學習資料.謝謝分享!
回復

使用道具 舉報

15#
ID:656801 發表于 2020-6-10 13:39 | 只看該作者

很好的學習資料.謝謝分享!
回復

使用道具 舉報

16#
ID:136337 發表于 2020-7-24 19:02 | 只看該作者
很好的學習資料,謝謝分享
回復

使用道具 舉報

17#
ID:620287 發表于 2020-7-26 19:42 來自手機 | 只看該作者
只是把ch340下載器和電壓檢測模塊加在一起罷了
回復

使用道具 舉報

18#
ID:138956 發表于 2020-10-22 11:17 | 只看該作者
有空也做一個玩
回復

使用道具 舉報

19#
ID:507641 發表于 2021-12-8 01:50 | 只看該作者
請問OLED 是什么型號?
回復

使用道具 舉報

20#
ID:960333 發表于 2022-2-23 16:15 | 只看該作者
這個給力,我改這個免冷啟動CH340的也算很完美,經濟實惠,這個換個小點的屏估計很多人喜歡
回復

使用道具 舉報

21#
ID:960333 發表于 2022-2-23 16:16 | 只看該作者
這個給力,我改CH340的也算很完美經濟實惠型的,這個換個小點的屏估計很多人都喜歡
回復

使用道具 舉報

22#
ID:1130604 發表于 2024-9-15 23:59 | 只看該作者
樓主,下次再研究個支持stc,stm,esp等多功能多芯片多接口的下載器,用單片機控制,實現自動識別單片機類型自動調電壓電流自動下載。
回復

使用道具 舉報

23#
ID:1130604 發表于 2024-9-16 00:02 | 只看該作者
huangchaoming86 發表于 2024-9-15 23:59
樓主,下次再研究個支持stc,stm,esp等多功能多芯片多接口的下載器,用單片機控制,實現自動識別單片機類 ...

不能自動識別的可以再菜單里找到型號比如esp聯網可以根據芯片數據庫找到型號。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜爱爱毛片xxxx视频免费看 | 午夜免费精品视频 | 精品国产乱码 | 人人性人人性碰国产 | 成人亚洲性情网站www在线观看 | 美女一级毛片 | 国产羞羞视频在线观看 | 日韩精品一区二区三区在线观看 | 亚洲毛片网站 | 久久久久国产精品一区二区 | 超碰在线播 | 免费视频成人国产精品网站 | 国产成人精品网站 | 欧美精品一区二区免费 | 国产女人与拘做受免费视频 | 五月网婷婷 | 午夜精品久久久久久久久久久久久 | 青娱乐国产 | 色站综合 | 综合第一页 | 成人影视网址 | 曰批视频在线观看 | 精品一区二区三 | 婷婷综合 | 亚洲精品久久久一区二区三区 | 色婷婷综合久久久中字幕精品久久 | 国产精品久久久久不卡 | 精品中文字幕视频 | 婷婷色婷婷 | 成人免费影院 | 在线观看中文字幕一区二区 | 最新中文字幕 | 中文字幕一区二区三区在线观看 | 日韩免费视频 | 精品99在线 | 欧美精品久久久 | 在线看片国产 | 久久久久久久国产 | 久久久99精品免费观看 | 国产一区二区三区久久久久久久久 | 国产91网站在线观看 |