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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4905|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)交通燈仿真效果 程序帶注釋

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:250610 發(fā)表于 2017-11-18 19:32 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
51單片機(jī) 交通燈,有仿真效果 程序帶注釋
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg52.h>                                         // 對(duì)單片機(jī)的口進(jìn)行了定義
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. uchar code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //段碼組合,共陰極數(shù)碼管
  5. uchar code c[4]={0x30,0x28,0x84,0x44};      /*P1 綠紅、黃紅、紅綠、紅黃*/
  6.                   
  7. //12MHz                          
  8. //*************************************************************************************
  9. uchar NB=25,DX=30,NBG=25,DXG=15,H=5;                         /*數(shù)碼管顯示值設(shè)置*/
  10. uchar  i,k=0,cnt=0,j=0;

  11. sbit K0=P3^0;                              /*主干道通行*/
  12. sbit K1=P3^1;                             /*次干道通行*/
  13. sbit K2=P3^2;                        /*中斷設(shè)置時(shí)間加減*/
  14. sbit K3=P3^3;                    /*緊急情況控制*/
  15. sbit K4=P3^5;                      /*南北時(shí)間加*/
  16. sbit K5=P3^6;                  /*東西時(shí)間加*/
  17. sbit K6=P3^7;                 /*設(shè)置完成,返回*/

  18. void delay(uchar t);                /*定義延時(shí)程序*/
  19. void key();                                   /*定義鍵盤程序*/
  20. void display();                          /*定義顯示程序*/
  21. void settime();                     /*定義時(shí)間設(shè)置顯示程序*/


  22. //*************************程序初始*********************************************
  23. void init(void)
  24. {
  25.         TMOD=0x01;                          /*使用定時(shí)器0模式1*/
  26.         TH0=0x3c;                          /*(65536-5000)/256*/
  27.         TL0=0xb0;                          /*(65536-5000)%256*/
  28.         IT0=1;                                  //開中斷
  29.         ET0=1;
  30.         TR0=1;
  31.         EA=1;
  32.         EX0=1;
  33.         EX1=1;
  34.         P1=c[k];                                  //開啟交通燈
  35. }

  36. //*************************外部中斷0處理程序***************************************
  37. void int0(void) interrupt 0                    //        通行時(shí)間設(shè)置
  38. {         
  39.   EA=0;
  40.   P1=0x90;                                /*紅燈全亮*/
  41.   
  42.   while(1)
  43.         {
  44.            settime();

  45.          if(K4==0)                                          /*P3^6=0設(shè)置主干道通行時(shí)間*/
  46.            {  
  47.           delay(40);
  48.         if(K4==0)
  49.                   {
  50.              while(!K4)
  51.              {
  52.                settime();
  53.              }
  54.                          NBG++;                                /*主干道通行時(shí)間加1*/
  55.              if(NBG==100)
  56.              NBG=0;                       
  57.           }
  58.            }
  59.           
  60.          if(K5==0)                                 /*P3^5=0設(shè)置支干道通行時(shí)間*/
  61.            {  
  62.         delay(40);
  63.         if(K5==0)
  64.                      {
  65.              while(!K5)
  66.                {
  67.                 settime();
  68.                }
  69.                            DXG++;                                /*支干道通行時(shí)間加1*/
  70.                if(DXG==100)
  71.                DXG=0;               
  72.              }
  73.            }
  74.           
  75.            if(K6==0)                                                           /*P3^7=0返回*/
  76.        {  
  77.              delay(40);       
  78.                  if(K6==0)
  79.                     {
  80.                        while(!K6)
  81.                            {
  82.                            }
  83.                       k=0;P1=c[k];
  84.                            NB=NBG,DX=NBG+H;       
  85.                        display();
  86.                            EA=1;
  87.                            break;
  88.                     }                      
  89.        }
  90.     }
  91. }


  92. /***********************************中斷1處理程序********************/
  93. void int1(void) interrupt 2                                         //緊急情況
  94. {                                                                                          
  95.                                                                           /*東西南北紅燈亮*/
  96.         EA=0;                                                                       
  97.         TR0=!TR0;                                                            /*停止計(jì)數(shù)*/

  98.         while(1)                                                                   /*主支干道顯示全為0*/
  99.         {
  100.            P1=0x90,P0=a[0];
  101.            P2=0xfe;
  102.            delay(20);
  103.           
  104.            P2=0xfd;
  105.            delay(20);

  106.            P2=0xfb;
  107.            delay(20);

  108.            P2=0xf7;
  109.            delay(20);
  110.    

  111.    if(K6==0)                                                           /*P3^7=0返回*/
  112.        {  
  113.              delay(40);       
  114.                  if(K6==0)
  115.                     {
  116.                        while(!K6)
  117.                            {
  118.                            }
  119.                
  120.                 EA=1;
  121.                    P1=c[k];                                          /*返回緊急前狀態(tài)開始計(jì)數(shù)*/
  122.                 TR0=!TR0;                                         /*重啟計(jì)數(shù)*/
  123.                 break;                                                          
  124.                    }
  125.           }
  126.    }

  127. }


  128. void time1(void) interrupt 1                                                /*交通燈控制程序*/
  129. {
  130.         TH0=0x3c;                                                                                /*定時(shí)50ms*/
  131.         TL0=0xb0;                                                                                         
  132.         cnt++;
  133.        
  134.         if(cnt==20)                                                                                  /*每20*50ms=1s自減一*/
  135.         {
  136.                 NB--;
  137.                 DX--;
  138.                 cnt=0;
  139.                 if(NB==0||DX==0)
  140.                 {
  141.                         k++;
  142.                         if(k>3)                                                                        /*k取0,1,2,3*/
  143.                         k=0;
  144.                         switch(k)
  145.                         {       
  146.                                 case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;            /*主干道通行顯示綠紅*/
  147.                             case 1:NB=H;j=1;P1=c[k];break;                                   /*主干道黃燈閃爍*/
  148.                                 case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;          /*支干道通行顯示紅綠*/
  149.                                 case 3:DX=H;j=2;P1=c[k];break;                                 /*支干道黃燈閃爍*/
  150.                         }
  151.                 }                 
  152.         }
  153. }


  154. void delay(uchar t)                         //延時(shí)程序延時(shí)0.1*nms   
  155. {
  156.   uchar i;
  157.   do
  158.    {
  159.      for(i=0;i<20;i++);;;
  160.    }
  161.    while(t--);
  162. }



  163. void settime()
  164. {
  165.            P2=0xfe,P0=a[(NBG+H)/10];        /*顯示主干道通行時(shí)間         */
  166.        delay(20);
  167.                   
  168.            P2=0xfd,P0=a[(NBG+H)%10];       
  169.            delay(20);
  170.                   
  171.            P2=0xfb,P0=a[(DXG+H)/10];                /*顯示支干道通行時(shí)間*/
  172.            delay(20);
  173.                   
  174.        P2=0xf7,P0=a[(DXG+H)%10];       
  175.            delay(20);
  176. }


  177. void  key()                                //鍵盤程序用KO K1模擬一道有車一道無車
  178. {
  179.   if(K0==0)                                           /*主干道有車支干道無車*/
  180.     {  
  181.        delay(40);
  182.        if(K0==0)                         
  183.        {
  184.           while(!K0)
  185.           {  
  186.                  display();
  187.           }
  188.              k=0,P1=c[k];cnt=0;
  189.           NB=NBG, DX=NBG+H;
  190.          display();
  191.        }
  192.     }

  193.            if(K1==0)                                            /*支干道有車主干道無車*/
  194.     {  
  195.        delay(40);
  196.        if(K1==0)
  197.        {
  198.           while(!K1)
  199.           {
  200.            display();
  201.           }
  202.           k=2,P1=c[k];cnt=0;
  203.           NB=DXG+H,DX=DXG;
  204.           display();
  205.            }
  206.         }
  207. }


  208. void display()                                                        //顯示程序
  209. {
  210.    P2=0xfe,P0=a[NB/10];                           /*由k的不同值進(jìn)入確定顯示數(shù)值*/
  211.    delay(20);
  212.        
  213.    P2=0xfd,P0=a[NB%10];
  214.    delay(20);
  215.                
  216.    P2=0xfb,P0=a[DX/10];
  217.    delay(20);
  218.                
  219.    P2=0xf7,P0=a[DX%10];
  220.    delay(20);
  221. }  


  222. void main(void)
  223. ……………………

  224. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
交通燈【參考程序】.rar (72.64 KB, 下載次數(shù): 101)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:979401 發(fā)表于 2021-11-12 10:17 | 只看該作者
誰能畫出一個(gè)流程圖嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产免费一区二区三区免费视频 | 国产黄色网 | 视频一二三区 | 日本三级电影在线看 | 日韩精品一区二区三区在线播放 | 国产在线不卡 | 欧美日韩福利视频 | 99精品在线免费观看 | 成人妇女免费播放久久久 | 精品一区二区三区在线视频 | 亚洲黄色成人网 | 可以免费观看的av片 | 最近中文字幕在线视频1 | 夜夜精品浪潮av一区二区三区 | 久久精品福利视频 | 国产精品av久久久久久毛片 | 老妇激情毛片免费 | 中文字幕亚洲视频 | 亚洲男人网| 日本成人片在线观看 | 亚洲国产精品va在线看黑人 | 久久精品亚洲国产奇米99 | 久久久久久久一区二区三区 | 色永久| 日韩在线综合网 | 亚洲一二三区av | 91精品国产欧美一区二区 | 天堂中文av| 国产精品夜夜春夜夜爽久久电影 | 国产精品久久久久久久久久久久冷 | 国产精品久久久久久久久久了 | 天天碰夜夜操 | 欧美一级久久 | av在线视 | 欧美一区二区三区在线视频 | 亚洲中午字幕 | 国产精品一区三区 | 性一交一乱一透一a级 | 国产精品99久久久久久大便 | 国产精品视频999 | 亚洲欧洲中文日韩 |