亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 51單片機驅動數碼管數字顯示混亂是怎么回事? [打印本頁]

作者: aiyun    時間: 2017-11-2 20:48
標題: 51單片機驅動數碼管數字顯示混亂是怎么回事?
如題,共陽級數碼管


     程序無誤,管腳接觸無誤

  1. /**********交通燈元件清單***********/

  2. 1、9*15萬用板            一塊
  3. 2、單片機            一枚
  4. 3、兩位數碼管            4個
  5. 4、LED燈            9個
  6. 5、排阻            一個
  7. 6、晶振            1個
  8. 7、三極管8550        4個
  9. 8、電解電容10uf        1個
  10. 9、按鍵            6個
  11. 10、USB接口            1個
  12. 11、自鎖開關            1個
  13. 12、電阻470            9個
  14. 13、電阻.7K            4個
  15. 14、電阻10K            1個

  16. 交通燈的pcb:
  17. 0.png 0.png
  18. 交通燈原理圖:
  19. 0.png
  20. 交通燈仿真:
  21. 0.png 0.png

  22. 交通燈的電機源程序:
  23.         
  24. #include<reg51.H>                                         // 對單片機的口進行了定義
  25. #define uint unsigned int
  26. #define uchar unsigned char
  27. uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段碼組合,共陽極
  28. uchar code b[4]={0x01,0x02,0x04,0x08}; //位碼組合         
  29. uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 綠紅、黃紅、紅綠、紅黃*/
  30.                   
  31. //12MHz                          
  32. //*************************************************************************************
  33. uchar NB=25,DX=30,NBG=25,DXG=15,H=5;                         /*數碼管顯示值設置*/
  34. uchar  i,k=0,cnt=0,j=0;

  35. sbit K0=P3^4;                           /*支干道通行*/
  36. sbit K1=P3^5;                           /*主干道通行*/
  37. sbit K4=P3^6;                           /*返回*/
  38. sbit K3=P3^2;                        /*設置時間*/
  39. sbit K2=P3^3;                        /*緊急剎車*/

  40. void delay(uchar t);                /*定義延時程序*/
  41. void key();                                /*定義鍵盤程序*/
  42. void display();                        /*定義顯示程序*/
  43. void settime();                /*定義時間設置顯示程序*/
  44. //*************************程序初始*********************************************
  45. void init(void)
  46. {
  47.         TMOD=0x01;                          /*使用定時器0模式一*/
  48.         TH0=0x3c;                          /*(65536-5000)/256*/
  49.         TL0=0xb0;                          /*(65536-5000)%256*/
  50.         IT0=1;                                  //開中斷
  51.         ET0=1;
  52.         TR0=1;
  53.         EA=1;
  54.         EX0=1;
  55.         EX1=1;
  56.         P1=c[k];                                  //開啟交通燈
  57. }
  58. //*************************中斷0處理程序***************************************
  59. void int0(void) interrupt 0                 //        通行時間設置
  60. {         
  61.   EA=0;
  62.   P1=0xd8;                                /*紅燈全亮*/
  63.   
  64. for(;;)
  65.         {
  66.            settime();

  67.                    if(K1==0)                                          /*P3^6=0設置主干道通行時間*/
  68.            {  
  69.           delay(40);
  70.           if(K1==0)
  71.                   {
  72.              while(!K1)
  73.              {settime();}
  74.                                  DXG++;                                /*主干道通行時間加1*/
  75.              if(DXG==100)
  76.              DXG=0;                        
  77.           }
  78.            }
  79.          
  80.                    if(K0==0)                                                         /*P3^5=0設置支干道通行時間*/
  81.            {  
  82.              delay(40);
  83.              if(K0==0)
  84.                      {
  85.                while(!K0)
  86.                {settime();}
  87.                            NBG++;                                                /*支干道通行時間加1*/
  88.                if(NBG==100)
  89.                NBG=0;               
  90.              }
  91.            }
  92.          
  93.            if(K4==0)                                                           /*P3^7=0返回*/
  94.        {  
  95.                 delay(40);        
  96.                     if(K4==0)
  97.                     {
  98.                        while(!K4)
  99.                            {
  100.                            }
  101.                            k=0;P1=c[k];
  102.                            NB=NBG,DX=NBG+H;        
  103.                        display();
  104.                            EA=1;
  105.                         
  106.                    break;
  107.                     }                       
  108.        }
  109.     }
  110. }


  111. //***********************************中斷1處理程序********************
  112. void int1(void) interrupt 2                                         //緊急情況
  113. {                                                                                          
  114.                                                          /*東西南北紅燈亮*/
  115.         EA=0;                                                                        
  116.         TR0=!TR0;                                                            /*停止計數*/

  117.         for(;;)                                                                   /*主支干道顯示全為0*/
  118.         {         
  119.                 P1=0xd8,
  120.                 P0=a[0];
  121.            P2=b[0];
  122.            delay(20);
  123.            
  124.            P2=b[1];
  125.            delay(20);

  126.            P2=b[2];
  127.            delay(20);

  128.            P2=b[3];
  129.            delay(20);
  130.    

  131.            if(K4==0)                                                   /*返回*/
  132.         {
  133.                  delay(20);
  134.                 EA=1;
  135.                   
  136.                 P1=c[k];                                          /*返回緊急前狀態開始計數*/
  137.                 TR0=!TR0;                                                /*重啟計數*/
  138.                 break;                                                           
  139.                 }
  140.         }
  141. }
  142. void time1(void) interrupt 1                                                /*交通燈控制程序*/
  143. {
  144.         TH0=0x3c;                                                                                /*定時50ms*/
  145.         TL0=0xb0;                                                                                         
  146.         cnt++;
  147.         
  148.         if(cnt>=20)                                                                                  /*每20*50ms=1s自減一*/
  149.         {
  150.                 NB--;
  151.                 DX--;
  152.                 cnt=0;
  153.                 if(NB==0||DX==0)
  154.                 {
  155.                         k++;
  156.                         if(k>3)                                                                        /*k取0,1,2,3*/
  157.                         k=0;
  158.                         switch(k)
  159.                         {        
  160.                                 case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;          /*主干道通行顯示綠紅*/
  161.                             case 1:NB=H;j=1;P1=c[k];break;                                           /*主干道黃燈閃爍*/
  162.                                 case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;          /*支干道通行顯示紅綠*/
  163.                                 case 3:DX=H;j=2;P1=c[k];break;                                           /*支干道黃燈閃爍*/
  164.                         }
  165.                 }                 
  166.         }
  167. }
  168. void delay(uchar t)                         //延時程序延時0.1*nms   
  169. {
  170.   uchar i;
  171.   do
  172.    {
  173.      for(i=0;i<20;i++)
  174.      ;;;
  175.    } while(t--);
  176. }
  177. void settime()
  178. {
  179.            P2=b[0],P0=a[(NBG+H)%10];        /*顯示主干道通行時間         */
  180.        delay(20);
  181.                   
  182.            P2=b[1],P0=a[(NBG+H)/10];        
  183.            delay(20);
  184.                   
  185.           P2=b[2],P0=a[(DXG+H)%10];                /*顯示支干道通行時間*/
  186.            delay(20);
  187.                   
  188.        P2=b[3],P0=a[(DXG+H)/10];        
  189.            delay(20);
  190. }
  191. void  key()                                //鍵盤程序用KO K1模擬一道有車一道無車
  192. {
  193.             if(K1==0)                                           /*主干道有車支干道無車*/
  194.     {  
  195.        delay(40);
  196.        if(K1==0)                        
  197.        {
  198.           while(!K1)
  199.           {  
  200.                                  display();
  201.           }
  202.              k=0,P1=c[k];cnt=0;
  203.           NB=NBG, DX=NBG+H;
  204.          display();
  205.        }
  206.     }
  207.            if(K0==0)                                            /*支干道有車主干道無車*/
  208.     {  
  209.        delay(40);
  210.        if(K0==0)
  211.        {
  212.           while(!K0)
  213.           {
  214.            display();
  215.           }
  216.                 k=2,P1=c[k];cnt=0;
  217.           NB=DXG+H,DX=DXG;
  218.                    display();
  219.            }
  220.         }
  221. }
  222. void display()                                                        //顯示程序
  223.         {
  224.                 P2=b[0],P0=a[NB%10];                           /*由k的不同值進入確定顯示數值*/
  225.                 delay(20);
  226.         
  227.                 P2=b[1],P0=a[NB/10];
  228.                 delay(20);
  229.         
  230.                 P2=b[2],P0=a[DX%10];
  231.                 delay(20);
  232.                                                    
  233.                 P2=b[3],P0=a[DX/10];
  234.                 delay(20);
  235.         }
  236. void main(void)
  237. {                //主程序
  238.         init();
  239.         
  240.         for(;;)
  241.         {
  242.           display();
  243.           key();
  244.          
  245.           //黃燈閃爍程序
  246.           while(j==1)                                                                                        /*主干道黃燈閃爍*/
  247.        {                                                                                                               
  248.                      P1=0xdc;                                                                        /*給黃燈一高電平黃燈滅*/                  
  249.                          for(i=83;i>0;i--){display();}                                                /*執行for循環延時*/                        
  250.                          P1=c[k];                                                                        /*再給黃燈一低電平黃燈亮*/
  251.                          for(i=83;i>0;i--){display();}
  252.                 }
  253.         while(j==2)
  254.          {                                                                                    /*支干道黃燈閃爍*/
  255.                     
  256.                          P1=0xf8;
  257.                          for(i=83;i>0;i--){display();}
  258.                          P1=c[k];
  259.                          for(i=83;i>0;i--){display();}
  260.                  }                                                                          
  261.           }
復制代碼



作者: wc86110    時間: 2017-11-2 23:24
顯示亂碼是因為單片機與數碼管的連接有誤
作者: 1123212143255    時間: 2017-11-3 10:11
你的共陽段碼不是標準接線碼,你的接線看不見,無法判斷正確不正確,要根據接線編輯段碼。




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1