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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

帶行人與斑馬線的超完整石子路由交通燈的單片機課設

[復制鏈接]
跳轉到指定樓層
樓主
適用班級:電子A1621
注意事項:
    1. 課外開放設計,開卷考核,可查閱任意資料。
    2. 單人考核,獨立完成,如有雷同,一律0分。
    3. 不允許對電路圖做任意形式修改。
    4. 提交以“電子A1622_01_陳**_期中測試”格式命名的項目文件夾。
電路如圖所示,設計程序實現如下功能:
1. 能根據交通規律正確設置交通燈狀態及數碼管顯示內容(60分)
2. 能手動調節時間(30分)
3. 能根據交通狀況自動延長直行時間;(10分)


注:通過鍵盤調節時間項目中,分為東西直行時間、
東西左轉時間、南北直行時間、南北左轉時間4個項目,
每個項目7.5分,小數點四舍五入。

1. 模式鍵用來選擇設定的時間,如東西直行時間、南北左轉時間等。
   時間加減鍵用于手動調節直行時間,每按鍵一次加減5s。
2. 交通繁忙探頭用于探測道路交通狀況,如果當前道路排隊較長,
   則繁忙探頭返回0,可臨時延長當前方向直行通道時間10s,一個
   紅綠燈周期最多延長3次。本設計用邏輯狀態輸入端口模擬。


單片機源程序如下:

  1. #include <REGX51.H>
  2. #define uchar   unsigned char



  3. sbit NSgreen = P3^1; //南北人行道綠燈
  4. sbit WEgreen = P3^0; //東西人行道綠燈
  5. sbit Add_Button = P3^5;//加時間按鍵
  6. sbit Sub_Button = P3^4;//減時間按鍵
  7. sbit Reduces_Button = P3^3;//模式選擇按鍵
  8. sbit Y1 = P3^2;
  9. sbit WEbuy_Button = P3^6 ;
  10. sbit NSbuy_Button = P3^7 ;
  11. uchar qiehuan=0;                  
  12. uchar  red = 33,yellow = 3,green_strant = 30,green_left = 30;
  13. uchar Mode = 0;
  14. uchar KeyDown=0;
  15. uchar DisplayTab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79};  // 0 1 2 3 4 5 6 7 8 9 E

  16. uchar led[8];


  17. uchar Display_Number[] = {0x82,0x84,0x28,0x48,0x81,0x84,0x18,0x48}; //路口紅綠燈狀態


  18. //延時
  19. void Delay_ms(unsigned int Cnt )
  20. {
  21. unsigned int t;
  22. while (Cnt--)
  23. {                                                         
  24.   t=100;
  25.   while(t--);
  26. }
  27. }


  28. //動態顯示
  29. void Dynamic_display()
  30. {
  31.         uchar i = 0;
  32.         for(i = 0; i < 8; i++)
  33.         {
  34.                 P0 = DisplayTab[ led[i] ];
  35.             P2 = ~(0x01<<i);
  36.                 Delay_ms(1);
  37.                 P0 = 0x00;
  38.     }
  39. }


  40. /***************中斷程序***********************************/

  41. /*******外部中斷0**********/
  42. void function_isr(void) interrupt 0
  43. {
  44.           EX0=0;  //關中斷
  45.          qiehuan++;
  46.          if(qiehuan == 5)  Mode=0;               
  47.          EX0=1; //開中斷
  48.    
  49. }
  50. //狀態1
  51. void luzhi1()
  52. {
  53.      led[4] = green_strant % 10;
  54.      led[5] = green_strant / 10;
  55.          led[6]        = 1;
  56.          led[7] = 10;
  57. if(WEbuy_Button == 0)  //時間加
  58.        {
  59.             green_strant += 10;   
  60.        }
  61. }
  62. //狀態2
  63. void luzhi2()
  64. {
  65.      led[4] = green_strant % 10;
  66.      led[5] = green_strant / 10;
  67.          led[6]        = 3;
  68.          led[7] = 5;
  69.          if(NSbuy_Button == 0)  //時間加
  70.        {
  71.             green_strant += 10;
  72.                         
  73.        }
  74. }
  75. /******外部中斷2********/
  76. void function_lib(void) interrupt 2
  77. {
  78.         Mode++;
  79.         if(Mode == 5)  Mode=0;
  80.         KeyDown=1;


  81. }


  82. //模式1
  83. void function1()
  84. {        
  85.      led[4] = green_strant % 10;
  86.      led[5] = green_strant / 10;
  87.          led[6]        = 1;
  88.          led[7] = 10;
  89.          if(Add_Button == 0)  //時間加
  90.        {
  91.             green_strant += 5;
  92.             green_left        += 5;
  93.             red += 5;     
  94.        }
  95.      if(Sub_Button == 0) //時間減
  96.        {
  97.             green_strant -= 5;
  98.                         green_left        -= 5;
  99.             red -= 5;                    
  100.            }
  101.             
  102. }

  103. //模式2
  104. void function2()
  105. {
  106.      led[4] = green_left % 10;
  107.      led[5] = green_left / 10;
  108.          led[6]        = 2;
  109.          led[7] = 10;
  110.          if(Add_Button == 0)  //時間加
  111.        {
  112.             green_strant += 5;
  113.                         green_left += 5;
  114.             red += 5;
  115.                              
  116.        }
  117.      if(Sub_Button == 0) //時間減
  118.        {
  119.             green_strant -= 5;
  120.                          green_left -= 5;
  121.             red -= 5;                    
  122.            }   
  123.          
  124. }

  125. //模式3
  126. void function3()
  127. {
  128.      led[4] = green_strant % 10;
  129.      led[5] = green_strant / 10;
  130.          led[6]        = 3;
  131.          led[7] = 5;
  132.          if(Add_Button == 0)  //時間加
  133.        {
  134.             green_strant += 5;
  135.                         green_left += 5;
  136.             red += 5;     
  137.        }
  138.      if(Sub_Button == 0) //時間減
  139.        {
  140.             green_strant -= 5;
  141.                         green_left -= 5;
  142.             red -= 5;                    
  143.            }
  144. }

  145. //模式4
  146. void function4()
  147. {
  148.      led[4] = green_left % 10;
  149.      led[5] = green_left / 10;
  150.          led[6]        = 4;
  151.          led[7] = 5;
  152.          if(Add_Button == 0)  //時間加
  153.        {
  154.             green_strant += 5;
  155.                         green_left += 5;
  156.             red += 5;     
  157.        }
  158.      if(Sub_Button == 0) //時間減
  159.        {
  160.             green_strant -= 5;
  161.                     green_left += 5;
  162.             red -= 5;                    
  163.            }
  164. }





  165. /*************計時程序*************/
  166. void count_down()
  167. {
  168.   uchar time = 0;
  169.   uchar Temp,state;
  170.   uchar Red,Yellow,Greens,Greenl;
  171.   Red = red;
  172.   Yellow = yellow;
  173.   Greens = green_strant;
  174.   Greenl = green_left;
  175.   
  176.   while(1)
  177.   {        
  178.      if(time < green_strant )
  179.          {
  180.            led[0] = Red % 10;
  181.            led[1] = Red        / 10;
  182.            led[2] =        Greens % 10;
  183.            led[3] = Greens / 10;

  184.            state=0;
  185.            WEgreen = 1;
  186.            NSgreen = 0;
  187.            Red--;
  188.            Greens--;

  189.          }

  190.          if(time >= green_strant  & time < (green_strant +yellow ))
  191.          {
  192.            led[0]=Red % 10;
  193.            led[1]=Red / 10;
  194.            led[2]=Yellow % 10;
  195.            led[3]=Yellow / 10;

  196.            state=1;
  197.        WEgreen = 1;
  198.            NSgreen = 0;
  199.            Red--;
  200.            Yellow--;
  201.            Greens=green_strant;  //給直行綠燈恢復初值

  202.          }

  203.          if(time >= (green_strant +yellow ) & time < (green_strant +yellow+green_strant ) )
  204.          {
  205.            if(time == (green_strant +yellow ))
  206.            {
  207.              Red = red;          //給紅燈賦值
  208.            }
  209.            led[0]= Greens % 10;
  210.            led[1]= Greens / 10;
  211.            led[2]= Red % 10;
  212.            led[3]= Red / 10;

  213.            state=2;
  214.            WEgreen = 0;
  215.            NSgreen = 1;
  216.            Red--;
  217.            Greens--;
  218.            Yellow=yellow;   //給黃燈恢復初值
  219.          }

  220.          if(time >= (green_strant +yellow+green_strant ) & time < (green_strant +yellow+green_strant+yellow ) )
  221.          {
  222.            led[0]= Yellow % 10;
  223.            led[1]= Yellow / 10;
  224.            led[2]= Red % 10;
  225.            led[3]= Red / 10;
  226.            
  227.            state=3;
  228.            WEgreen = 0;
  229.            NSgreen = 1;
  230.            Greens=green_strant;  //給直行綠燈恢復初值
  231.            Yellow--;
  232.            Red--;
  233.          
  234.          }

  235.          if(time >= (green_strant +yellow+green_strant+yellow ) & time < (green_strant +yellow+green_strant+yellow+green_left ) )
  236.           {
  237.            if(time == (green_strant +yellow+green_strant+yellow ) )
  238.            {
  239.             Red = red;                //給紅燈賦值
  240.            }
  241.            led[0] = Red % 10;
  242.            led[1] = Red / 10;
  243.            led[2]= Greenl % 10;
  244.            led[3]= Greenl / 10;

  245.            state=4;  
  246.            WEgreen = 1;
  247.            NSgreen = 0;
  248.            Greenl--;
  249.            Red--;
  250.            Yellow = yellow;  //給黃燈賦初值
  251.           }

  252.           if(time >= (green_strant +yellow+green_strant+yellow+green_left )  & time < (green_strant +yellow+green_strant+yellow+green_left+yellow ) )
  253.           {
  254.            led[0] = Red % 10;
  255.            led[1] = Red / 10;
  256.            led[2] = Yellow % 10;
  257.            led[3] = Yellow / 10;
  258.            
  259.            state=5;
  260.            WEgreen = 1;
  261.            NSgreen = 0;
  262.            Yellow--;
  263.            Red--;
  264.            Greenl = green_left;  //給左轉綠燈賦初值
  265.           }

  266.          if(time >= (green_strant +yellow+green_strant+yellow+green_left+yellow ) & time < (green_strant +yellow+green_strant+yellow+green_left+yellow + green_left) )
  267.           {
  268.            if(time == (green_strant +yellow+green_strant+yellow+green_left+yellow ) )
  269.            {
  270.              Red = red;                   //給紅燈賦值
  271.            }
  272.            led[0] = Greenl % 10;
  273.            led[1] = Greenl / 10;
  274.            led[2] = Red % 10;
  275.            led[3] = Red / 10;
  276.            
  277.            state=6;
  278.            WEgreen = 0;
  279.            NSgreen = 1;
  280.            Yellow = yellow;  //給黃燈賦初值
  281.            Greenl--;
  282.            Red--;
  283.           }

  284.           if(time >= (green_strant +yellow+green_strant+yellow+green_left+yellow + green_left) & time < (green_strant +yellow+green_strant+yellow+green_left+yellow + green_left+yellow) )
  285.          {
  286.            led[0]= Yellow % 10;
  287.            led[1]= Yellow / 10;
  288.            led[2]= Red % 10;
  289.            led[3]= Red / 10;

  290.            state=7;
  291.            WEgreen = 0;
  292.            NSgreen = 1;
  293.            Greenl = green_left;  //給左轉綠燈賦初值
  294.            Yellow--;
  295.            Red--;
  296.          }

  297.          if(time >= (green_strant +yellow+green_strant+yellow+green_left+yellow + green_left+yellow))
  298.          {
  299.            Yellow = yellow;  //給黃燈賦初值
  300.            break;
  301.          }

  302.          time++;


  303.          Y1= 1 ;
  304.          Reduces_Button = 1;
  305. ……………………

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

所有資料51hei提供下載:
51單片機交通燈程序_期中測試.zip (307.52 KB, 下載次數: 20)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线播放网址 | 亚洲永久免费观看 | 日韩欧美成人精品 | 91久色| 国产精品久久国产精品 | 蜜桃在线播放 | 欧美成人一区二免费视频软件 | 精品av| 欧美九九 | 99精品一级欧美片免费播放 | 精品一区二区在线观看 | 日韩一区二区在线视频 | 日韩欧美不卡 | 狠狠干av | 久久人爽爽人爽爽 | 亚洲精品在线播放 | 狠狠夜夜 | 色偷偷噜噜噜亚洲男人 | a级黄色片在线观看 | 亚洲字幕在线观看 | 日本免费网 | 国产婷婷色综合av蜜臀av | 欧美一区二区三区四区视频 | 国产视频第一页 | 日韩午夜一区二区三区 | 午夜精品久久久久久久久久久久久 | 欧美成人精品一区二区男人看 | 欧美九九九 | 一级黄色录像片子 | 欧美日韩毛片 | 国产一级视频在线观看 | 亚洲精品一区二区网址 | 国产91综合一区在线观看 | 在线免费国产视频 | 亚洲免费观看 | 亚洲精品乱码久久久久久9色 | 日韩成人精品一区 | 天天插天天操 | 日韩毛片网 | 在线观看国产视频 | 国产精品久久久久久久久久免费看 |