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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5684|回復: 2
收起左側

51單片機驅動數碼管數字顯示混亂是怎么回事?

[復制鏈接]
ID:245101 發表于 2017-11-2 20:48 來自手機 | 顯示全部樓層 |閱讀模式
如題,共陽級數碼管

Screenshot_2017-11-02-20-45-31.png
     程序無誤,管腳接觸無誤

  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.           }
復制代碼


回復

使用道具 舉報

ID:96682 發表于 2017-11-2 23:24 | 顯示全部樓層
顯示亂碼是因為單片機與數碼管的連接有誤
回復

使用道具 舉報

ID:126608 發表于 2017-11-3 10:11 | 顯示全部樓層
你的共陽段碼不是標準接線碼,你的接線看不見,無法判斷正確不正確,要根據接線編輯段碼。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产色综合久久 | 黄色毛片在线播放 | 亚洲精品视频在线观看视频 | 在线āv视频 | 国产成人精品一区二区三区视频 | 国产 日韩 欧美 在线 | 国产高清一区二区三区 | 日本黄色免费视频 | 午夜精品久久久久久久星辰影院 | 特级a欧美做爰片毛片 | 色综合久久伊人 | 岛国av免费在线观看 | 性国产丰满麻豆videosex | 日韩一区精品 | 在线看一区二区三区 | 欧美视频第二页 | 欧美一区二区三区视频 | 亚洲精品国产一区 | 日韩精品一区二区三区免费视频 | 亚洲欧美一区在线 | 午夜合集 | 亚洲日本中文 | 亚洲国产精品一区二区第一页 | 国内自拍偷拍 | 日韩国产高清在线观看 | 中文字幕一区二区三区在线视频 | 日韩一区在线播放 | 九九热这里 | 国产成人免费视频网站视频社区 | 在线观看毛片网站 | 春色av| 日韩第一页 | 国产三级网站 | 久久久久久九九九九 | 91在线成人 | 久久亚洲国产 | 亚洲一区二区久久 | 岛国午夜 | 99re免费 | 免费一区 | 99国产精品久久久久久久 |