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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1901|回復: 9
收起左側

想要加個數碼管顯示0-A檔位,但單片機P1口只有6個引腳 怎么辦?

[復制鏈接]
ID:980756 發表于 2021-11-20 18:32 來自手機 | 顯示全部樓層 |閱讀模式
求各位大佬指點一下,想要加個數碼管顯示0-A檔位,但是單機片用的是STC15W408AS  16引腳的,P1口只有6個引腳,不知道怎么辦
  1.          #include<reg52.h>   //代入頭文件//

  2.          #include <intrins.h>  // 用空操作  _nop_   時要加這句//


  3.      #define ulong unsigned long //宏定義變量類型    0----4294967295/

  4.          #define uint unsigned int //宏定義變量類型    0----65535/

  5.          #define uchar unsigned char//        宏定義變量類型          0-255/

  6.          uchar jlu;  //幾率-----------------=======

  7.    

  8.          uint t00,b00,t01,b01;  //X0輸入濾波變量
  9.                                                   
  10.      uint t10,b10,t11,b11;  //X1輸入濾波變量

  11.      uint t20,b20,t21,b21;  //X2輸入濾波變量

  12.       uint b,k1,ks,b1,k2,ty,t3,b3,k3;  //標志量
  13.          
  14.       uint t0,t2;//長按加減鍵0.7秒也會變一檔或停

  15.     uint lbcs=5;            //0--65535,輸入濾波常數,可以為5到10毫秒,長按用300到700毫秒,一改全改。


  16. sfr P3M1=0xB1;  //A//

  17. sfr P3M0=0xB2;  //B//P3口特殊寄存器聲明   sfr P3M1=0xb1; sfr P3M0=0xb2; B可用小寫b嗎?

  18.   //  P3M1=0x0;  //C//
  19.    // P3M0=0x4;  // D//   3.2腳為推挽輸出,其他是準雙向口,這兩句放在主程序里
  20.                  //    如果全是準雙向口,上面ABCD4句可以不要
  21.    
  22.                                //// 3個輸入如下
  23.     sbit X0=P3^3;   //減速 D0   
  24.     sbit X1=P3^6;   //停(點焊)   D1   
  25.    sbit X2=P3^7; //加速    D2
  26.                      
  27.                  
  28.      

  29.       
  30.     sbit Y0=P3^2;      //1輸出



  31. void  main( )//主程序
  32. {
  33.        TMOD=0x01; //  TMOD=0x11;//設置定時器0為工作方式1//  
  34.             TH0=(65536-1000)/256;  //12MHZ,1MS一次中斷,商//
  35.             TL0=(65536-1000)%256;  //低四位裝數=余數//
  36.                               
  37.         EA=1;       //開總中斷//

  38.             ET0=1;      //開定時器0中斷

  39.                 TR0=1;//啟動定時器0//397//
  40.                                                              // X0=1;//把P3.3 復位腳 RST OUT-LOW 設置為高電平==========????????????????????????
  41.         Y0=0;//出0,停止

  42.     P3M1=0x0;// 高8位為0000 0000
  43.     P3M0=0x4;  //低8位為0000 0100   3.2腳為推挽輸出,串聯1K電阻到地,有4毫安電流。其他是準雙向口串聯1K電阻到地只有13微安 ( 寫成 P3M1=0x00;  P3M0=0x40;不行,已經驗證了)。




  44.   while(1)//大循環
  45. {

  46.                         jlu=0;//幾率------

  47.                                 //以下是你的編程區=========================================                                
  48.                           
  49.                           


  50.                       //以下你不要編程=========================================

  51.                     while(jlu<1)          //幾率-------
  52.                         
  53.                           {_nop_();  _nop_();         _nop_(); }
  54.                                     
  55.                                                 
  56.                 }

  57. }



  58.                                           

  59. void exter0() interrupt 1         //定時器0的中斷程序//定時器1的中斷程序 void exter1() interrupt 3//
  60. {           
  61.         TH0=(65536-1000)/256;         //重裝數12MHz 1000=1ms,如果不重裝,默認數是65536,不是想要的10000//
  62.         TL0=(65536-1000)%256;
  63.                
  64.                  
  65.              //X0濾波
  66.                 if(X0==0) {t00++;t01=0;}
  67.                 if(t00==lbcs){b00=1;b01=0; }        //b00=1,就是按下
  68.                 if(b00==1) t00=0;

  69.                 if(X0==1) {t01++;t00=0;}
  70.                 if(t01==lbcs){b01=1;b00=0; }  //b01=1,就是松手
  71.                 if(b01==1) t01=0;

  72.         //X1濾波
  73.                 if(X1==0) {t10++;t11=0;}
  74.                 if(t10==lbcs){b10=1;b11=0; }        //b10=1,就是按下
  75.                 if(b10==1) t10=0;

  76.                 if(X1==1) {t11++;t10=0;}
  77.                 if(t11==lbcs){b11=1;b10=0; }  //b11=1,就是松手
  78.                 if(b11==1) t11=0;   
  79.                  
  80.                
  81.                  //X2濾波
  82.                 if(X2==0) {t20++;t21=0;}
  83.                 if(t20==lbcs){b20=1;b21=0; }        //b20=1,就是按下
  84.                 if(b20==1) t20=0;

  85.                 if(X2==1) {t21++;t20=0;}
  86.                 if(t21==lbcs){b21=1;b20=0; }  //b21=1,就是松手
  87.                 if(b21==1) t21=0;  
  88.                
  89.         
  90.         

  91.         

  92.         //以下是你的編程區=======================================

  93.      if(b20==1){b=1;k1=0;}

  94.      if(b==1){   if(b21==1)
  95.                   {
  96.                     b=0;
  97.                     k1=1;


  98.                   }
  99.                
  100.               }

  101.       if(k1==1){  k1=0;
  102.   
  103.                   if(ks<10)ks++;
  104.                 }
  105.                                        //X2  P3.7加檔,用加鍵改變ks值



  106. if(b00==1){b1=1;k2=0;}

  107.      if(b1==1){   if(b01==1)
  108.                   {
  109.                     b1=0;
  110.                     k2=1;


  111.                   }
  112.                
  113.               }

  114.       if(k2==1){  k2=0;
  115.   
  116.                   if(ks>0)ks--;
  117.                 }
  118.                                        //X0  P3.3減檔,用減鍵改變ks值



  119.   

  120.        //到這,KS值會運隨加減鍵在0--10范圍變化,以下就根據k值做相應工作
  121.    


  122.         




  123.   
  124.                                                                        
  125. if(ks==1){                                             //1檔開始  按下按鍵并松手,1秒后通電10ms,實際10-4ms行程=6ms焊接時間

  126.                       if(b10==1){b3=1;k3=0;}

  127.                      if(b3==1){   if(b11==1)
  128.                                 {
  129.                                   b3=0;
  130.                                   k3=1;
  131.                                  }
  132.                               }


  133.                       if(k3==1){  t3++;
  134.                              if(t3==1000)  Y0=1;   //延遲1秒
  135.                              if(t3==1010) {Y0=0;   //差值為10ms,10-4ms行程=6ms焊接時間
  136.                                            t3=0;
  137.                                            k3=0;
  138.                                            }   
  139.                                 }
  140.                   
  141.           }                 //1檔      //X1  P3.6  停鍵  6ms        //1檔結束                                            
  142.                                       


  143.                                  
  144.   if(ks==2){                                             //2檔開始

  145.                       if(b10==1){b3=1;k3=0;}

  146.                      if(b3==1){   if(b11==1)
  147.                                 {
  148.                                   b3=0;
  149.                                   k3=1;
  150.                                  }
  151.                               }


  152.                       if(k3==1){  t3++;
  153.                              if(t3==1000)  Y0=1;   //延遲1秒
  154.                              if(t3==1011) {Y0=0;   //差值為11ms,11-4ms行程=7ms焊接時間
  155.                                            t3=0;
  156.                                            k3=0;
  157.                                            }   
  158.                                 }
  159.                   
  160.           }                 //2檔      //X1  P3.6  停鍵  7ms        //2檔結束   
  161.                                                 
  162.                                                                            
  163.                  
  164. if(ks==3){                                             //3檔開始

  165.                       if(b10==1){b3=1;k3=0;}

  166.                      if(b3==1){   if(b11==1)
  167.                                 {
  168.                                   b3=0;
  169.                                   k3=1;
  170.                                  }
  171.                               }


  172.                       if(k3==1){  t3++;
  173.                              if(t3==1000)  Y0=1;   //延遲1秒
  174.                              if(t3==1012) {Y0=0;   //差值為12ms,12-4ms行程=8ms焊接時間
  175.                                            t3=0;
  176.                                            k3=0;
  177.                                            }   
  178.                                 }
  179.                   
  180.           }                 //3檔      //X1  P3.6  停鍵  8ms        //3檔結束                                                                              

  181.   
  182.                                  
  183. if(ks==4){                                             //4檔開始

  184.                       if(b10==1){b3=1;k3=0;}

  185.                      if(b3==1){   if(b11==1)
  186.                                 {
  187.                                   b3=0;
  188.                                   k3=1;
  189.                                  }
  190.                               }


  191.                       if(k3==1){  t3++;
  192.                              if(t3==1000)  Y0=1;   //延遲1秒
  193.                              if(t3==1013) {Y0=0;   //差值為13ms,13-4ms行程=9ms焊接時間
  194.                                            t3=0;
  195.                                            k3=0;
  196.                                            }   
  197.                                 }
  198.                   
  199.           }                 //4檔      //X1  P3.6  停鍵  8ms        //4檔結束  



  200. if(ks==5){                                             //5檔開始

  201.                       if(b10==1){b3=1;k3=0;}

  202.                      if(b3==1){   if(b11==1)
  203.                                 {
  204.                                   b3=0;
  205.                                   k3=1;
  206.                                  }
  207.                               }


  208.                       if(k3==1){  t3++;
  209.                              if(t3==1000)  Y0=1;   //延遲1秒
  210.                              if(t3==1014) {Y0=0;   //差值為14ms,14-4ms行程=10ms焊接時間
  211.                                            t3=0;
  212.                                            k3=0;
  213.                                            }   
  214.                                 }
  215.                   
  216.           }                 //5檔      //X1  P3.6  停鍵  10ms        //5檔結束  

  217.   
  218. if(ks==6){                                             //6檔開始

  219.                       if(b10==1){b3=1;k3=0;}

  220.                      if(b3==1){   if(b11==1)
  221.                                 {
  222.                                   b3=0;
  223.                                   k3=1;
  224.                                  }
  225.                               }


  226.                       if(k3==1){  t3++;
  227.                              if(t3==1000)  Y0=1;   //延遲1秒
  228.                              if(t3==1015) {Y0=0;   //差值為15ms,15-4ms行程=11ms焊接時間
  229.                                            t3=0;
  230.                                            k3=0;
  231.                                            }   
  232.                                 }
  233.                   
  234.           }                 //6檔      //X1  P3.6  停鍵  11ms        //6檔結束         



  235. if(ks==7){                                             //7檔開始

  236.                       if(b10==1){b3=1;k3=0;}

  237.                      if(b3==1){   if(b11==1)
  238.                                 {
  239.                                   b3=0;
  240.                                   k3=1;
  241.                                  }
  242.                               }


  243.                       if(k3==1){  t3++;
  244.                              if(t3==1000)  Y0=1;   //延遲1秒
  245.                              if(t3==1016) {Y0=0;   //差值為16ms,16-4ms行程=11ms焊接時間
  246.                                            t3=0;
  247.                                            k3=0;
  248.                                            }   
  249.                                 }
  250.                   
  251.           }                 //7檔      //X1  P3.6  停鍵  11ms        //7檔結束  

  252. if(ks==8){                                             //8檔開始

  253.                       if(b10==1){b3=1;k3=0;}

  254.                      if(b3==1){   if(b11==1)
  255.                                 {
  256.                                   b3=0;
  257.                                   k3=1;
  258.                                  }
  259.                               }


  260.                       if(k3==1){  t3++;
  261.                              if(t3==1000)  Y0=1;   //延遲1秒
  262.                              if(t3==1017) {Y0=0;   //差值為17ms,17-4ms行程=13ms焊接時間
  263.                                            t3=0;
  264.                                            k3=0;
  265.                                            }   
  266.                                 }
  267.                   
  268.           }                 //8檔      //X1  P3.6  停鍵  13ms        //8檔結束  


  269. if(ks==9){                                             //9檔開始

  270.                       if(b10==1){b3=1;k3=0;}

  271.                      if(b3==1){   if(b11==1)
  272.                                 {
  273.                                   b3=0;
  274.                                   k3=1;
  275.                                  }
  276.                               }


  277.                       if(k3==1){  t3++;
  278.                              if(t3==1000)  Y0=1;   //延遲1秒
  279.                              if(t3==1018) {Y0=0;   //差值為18ms,18-4ms行程=14ms焊接時間
  280.                                            t3=0;
  281.                                            k3=0;
  282.                                            }   
  283.                                 }
  284.                   
  285.           }                 //9檔      //X1  P3.6  停鍵  14ms        //9檔結束


  286. if(ks==10){                                             //10檔開始

  287.                       if(b10==1){b3=1;k3=0;}

  288.                      if(b3==1){   if(b11==1)
  289.                                 {
  290.                                   b3=0;
  291.                                   k3=1;
  292.                                  }
  293.                               }


  294.                       if(k3==1){  t3++;
  295.                              if(t3==1000)  Y0=1;   //延遲1秒
  296.                              if(t3==1019) {Y0=0;   //差值為19ms,19-4ms行程=15ms焊接時間
  297.                                            t3=0;
  298.                                            k3=0;
  299.                                            }   
  300.                                 }
  301.                   
  302.           }                 //10檔      //X1  P3.6  停鍵  15ms        //10檔結束  


  303.    //以下你不要編程=========================================

  304.             jlu=1;//幾率---------
復制代碼
回復

使用道具 舉報

ID:332444 發表于 2021-11-20 19:35 | 顯示全部樓層
可外接74HC595
回復

使用道具 舉報

ID:235200 發表于 2021-11-20 22:03 | 顯示全部樓層
加一個74HC595或者MAX7219進行擴展就可以了
回復

使用道具 舉報

ID:624769 發表于 2021-11-21 00:34 | 顯示全部樓層
我一般是把  P10~P15 加上 P36~P37
然后:
          P3 &= 0x0f;
          P3 |= (0xf0 & LED_Buf);
          P1 = LED_Buf;

偶爾也會  P10~P15 加上 P5
然后: P1 = LED_Buf;
           P5 = (LED_Buf >>2);

看你喜歡了。
回復

使用道具 舉報

ID:213173 發表于 2021-11-21 08:38 | 顯示全部樓層
STC15W408AS-16DIP的引腳在不增加擴展芯片完全能夠滿足樓主的這款應用。P1.0~P1.5、P3.6、P3.7用作數碼管段驅動,方便編程。P5.4、P5.5用作數碼管2位驅動,預置輸出增減量可以在1~99設置,并保存在EEPROM中,掉電不會丟失。按鍵放在P3.0~P3.2,不會影響在線下載更新用戶程序,P3.3輸出。
段碼驅動示例:
void Px(unsigned char i)//i=段碼
{
        P1&=0xc0;                //P1低6位清0
        P1|=(i&0x3F);        //P1低6位賦值
        P3&=0x3f;                //P3高2位清0,其它位不變
        P3|=(i&0xc0);        //P3高2位賦值,其它位不變
}
回復

使用道具 舉報

ID:980756 發表于 2021-11-21 23:31 來自手機 | 顯示全部樓層
xianfajushi 發表于 2021-11-20 19:35
可外接74HC595

謝謝指點
回復

使用道具 舉報

ID:980756 發表于 2021-11-21 23:32 來自手機 | 顯示全部樓層
csmyldl 發表于 2021-11-20 22:03
加一個74HC595或者MAX7219進行擴展就可以了

謝謝指點
回復

使用道具 舉報

ID:980756 發表于 2021-11-21 23:32 來自手機 | 顯示全部樓層
188610329 發表于 2021-11-21 00:34
我一般是把  P10~P15 加上 P36~P37
然后:
          P3 &= 0x0f;

謝謝指點
回復

使用道具 舉報

ID:980756 發表于 2021-11-21 23:35 來自手機 | 顯示全部樓層
wulin 發表于 2021-11-21 08:38
STC15W408AS-16DIP的引腳在不增加擴展芯片完全能夠滿足樓主的這款應用。P1.0~P1.5、P3.6、P3.7用作數碼管段 ...

多謝大佬指點,本人是在太菜了,一位數碼管都不知道怎么寫,兩位數碼管完全不懂,能求大佬給改改程序嘛
回復

使用道具 舉報

ID:980756 發表于 2021-11-26 18:15 來自手機 | 顯示全部樓層
我們159 發表于 2021-11-21 23:35
多謝大佬指點,本人是在太菜了,一位數碼管都不知道怎么寫,兩位數碼管完全不懂,能求大佬給改改程序嘛

已經改好了,明白了就特別簡單,就加了幾行代碼數碼管就可以顯示檔位了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看第一页 | 99亚洲| 超碰网址| 亚洲精品第一国产综合野 | 精产国产伦理一二三区 | 99久久精品免费 | 在线免费观看视频你懂的 | 精品久久一区二区三区 | 在线免费观看日本视频 | 日韩视频精品 | 欧美精品一区二区三区在线播放 | 久久久青草婷婷精品综合日韩 | 色婷婷国产精品综合在线观看 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 我想看一级黄色毛片 | 精品亚洲一区二区三区 | 欧美日韩中文在线 | 一区二区三区国产精品 | 日韩欧美二区 | 美女国内精品自产拍在线播放 | 欧美一区二不卡视频 | 91精品国产91久久久久久丝袜 | 久久久久成人精品 | 国产高清精品在线 | 国产农村妇女毛片精品久久麻豆 | 国产一区二区精品在线观看 | 美日韩中文字幕 | 亚洲视频一区在线播放 | 日韩高清国产一区在线 | 911网站大全在线观看 | 一区二区在线免费播放 | 在线免费看91 | 亚洲 欧美 日韩 在线 | 狠狠骚| 日韩视频区| 黄色一级视频免费 | 91精品国产欧美一区二区 | 午夜免费观看网站 | 亚洲国产18 | 仙人掌旅馆在线观看 | 精品99久久久久久 |