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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡單的交通燈焊接與程序課程設計報告

[復制鏈接]
跳轉到指定樓層
樓主
簡單的交通燈焊接與程序設計用時:5天

本課程設計報告的word版本及完整的程序代碼下載地址:
http://www.zg4o1577.cn/bbs/dpj-77888-1.html

1 設計目的:

設計一個東西方向和南北方向十字路口的簡單交通燈控制系統。

2 設計要求2.1 可以按鍵設置交通燈東西、南北的倒計時時間
第一次按設置鍵是設置東西方向的時間,第二次按設置鍵是設置南北方向的時間,再按加減鍵就可以設置對應的時間。
22 東西和南北方向各有兩個數碼管分別顯示時間
東西和南北的時間相差5秒,這5秒為黃燈亮的時間。
2.3 當有特殊情況時,可以按緊急模式進行調整.2.4 緊急模式:
當消防車、救護車等特殊車輛通行時按下”緊急模式鍵”全部亮紅燈,待緊急車輛通過后,再恢復后再退出。
2.5 夜間模式:
4個方向黃燈亮起。
2.6 禁止通行
第1次按緊急鍵4個方向全部亮紅燈.
2.7 夜間模式
第2次東西南北4個方向黃燈閃爍
2.8 南北優先通行
第3次南北綠燈亮東西紅燈亮
2.9 東西優先通行
第4次南北紅燈亮東西綠燈亮
2.10 再按一次回到正常顯示
不同的模式適合不同的交通情況(如夜間模式,有交通事故的時候)


3 材料準備
10*15洞洞板1塊,
51芯片(STC89C51RC),
母座(或者40pin芯片座或zip座),
紅色LED燈1個,
103上拉排阻1個(九個引腳),
10K電阻1個,
1K電阻1個,
30pf瓷片電容2個,
10uf電解電容1個,
單排針,
輕觸按鍵4個,
12.288 MHz晶振1個,
自鎖開關(六腳),
杜邦線,
USB轉TTL線(下載與供電),
紅黃綠LED燈各2個,
3641AH數碼管(共陰四位數碼管)
4 電路圖:*注:關于EA
我使用的STC89C52RC單片機芯片(EA管腳已內部上拉到Vcc)
  •                     如外部不加上拉,或外部上拉到Vcc,上電復位后單片機從內部開始執行程序;
  •                     如外部下拉到地,上電復位后單片機從外部開始執行程序。
根據網上找到的資料畫的電路圖:
1)去掉了復位電路和電源插孔:
2)再修改后
5 時鐘電路


5.1 關于單片機的XTAL1和XTAL2
單片機的XTAL1和XTAL2內部有一片內振蕩器結構但仍需要在XTAL1和XTAL2兩端連接一個晶振和兩個電容才能組成時鐘電路,這種使用晶振配合產生信號的方法是內部時鐘方式;
5.2 晶振說明
無源晶振是有2個引腳的無極性元件,需要借助于時鐘電路才能產生振蕩信號,自身無法振蕩起來;
5.3 時鐘電路的重要性
時鐘電路在單片機系統中很重要,它能控制著單片機工作的節奏,是必不可少的部分。單片機運行需要時鐘支持——就像計算機的CPU一樣,如果沒有時鐘電路來產生時鐘驅動單片機,那單片機就不能執行程序。
6 自鎖開關:
六引腳自鎖開關是一個雙刀雙擲開關,除了圖上用黑線相連的部分,其他部分均不相連。
7 A103J排阻:
排阻是具有極性,在焊接的時候一定需要注意,如果方向弄錯可能導致顯示不了。
從圖上可以看到排阻左邊有一個點標記和103數值。那個點表示那一端的第一個引腳為公共引腳。,而103表示該排阻,前兩位數表示數值,最后一位表示倍數即10X10 3=10K。
排阻在原理圖中的符號表示:根據圖可以發現排阻內部的所有電阻都連接到第一個引腳上,所以第一個引腳肯定就是公共端,見下圖。
8 四腳開關:
9 3641AH數碼管引腳圖:

              對應的字母段碼排列            
10 仿真圖
11 電路連接測試1正面圖:
2背面圖:

12 程序分析

  1. #include
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4.               /* I/O口的定義 */
  5. sbit w1_NS=P1^0;              //數碼管南北時間的位選               
  6. sbit w2_NS=P1^1;
  7. sbit w1_WE=P1^4;              //數碼管東西時間的位選
  8. sbit w2_WE=P2^7;
  9. sbit k1=P3^2;                            //按鍵的定義
  10. sbit k2=P3^5;
  11. sbit k3=P3^6;
  12. sbit k4=P3^7;
  13. sbit red_NS=P2^1;                            //南北紅綠黃燈的定義
  14. sbit yellow_NS=P1^6;
  15. sbit green_NS=P1^5;
  16. sbit red_WE=P2^6;                            //東西紅綠黃燈的定義
  17. sbit yellow_WE=P2^4;
  18. sbit green_WE=P2^3;

  19. uchar seconds_NS,seconds_WE,seconds_WE_set,seconds_NS_set,flag_NS,flag_WE,t0,k1num,k4num;            
  20. uchar code table[]={                                          
  21. 0xeb,0x28,0xb3,0xba,0x78,                                                        //數碼管譯碼:分別對應數字0~9
  22. 0xda,0xdb,0xa8,0xfb,0xfa
  23. };                             
  24.                            
  25. void delay(uint z);                              //延時函數
  26. void init();                                            //初始化函數
  27. void display_NS();                              //南北時間顯示函數
  28. void display_WE();                              //東西時間顯示函數
  29. void LED_display();                              //紅路燈的正常模式函數
  30. void keyscan();                                            //按鍵掃描函數

  31. void main()
  32. {
  33.               init();            
  34.               while(1)
  35.               {               
  36.                             keyscan();
  37.                             display_NS();
  38.                             display_WE();
  39.                             LED_display();                           
  40.               }                                 
  41. }

  42. void delay(uint z)                                                        //延時函數
  43. {
  44.               uint x,y;
  45.               for(x=z;x>0;x--)
  46.                             for(y=110;y>0;y--);
  47. }

  48. void init()                                                                        //初始化函數
  49. {
  50.               t0=0;
  51.               flag_NS=0;
  52.               flag_WE=0;
  53.               seconds_NS_set=10;
  54.               seconds_WE_set=15;
  55.               seconds_NS=seconds_NS_set;
  56.               seconds_WE=seconds_WE_set;
  57.               TMOD=0x01;                                                                      //設置定時器的工作方式為1,定時器工作方式
  58.               TH0=(65536-50000)/256;                              
  59.               TL0=(65536-50000)%256;
  60.               EA=1;                                                        //開總中斷
  61.               ET0=1;                                                        //開定時器0的中斷
  62.               TR0=1;                                                        //開啟定時器0的運行開關
  63.                            
  64. }

  65. void display_NS()                                            //南北時間顯示函數
  66. {
  67.               P0=0x00;            
  68.               w1_NS=0;
  69.               P0=table[seconds_NS/10];                            //顯示南北時間的十位
  70.               delay(1);                                                                     
  71.               w1_NS=1;                                                                     
  72.                                                                         
  73.               P0=0x00;
  74.               w2_NS=0;
  75.               P0=table[seconds_NS%10];                            ////顯示南北時間的個位
  76.               delay(1);                                                                     
  77.               w2_NS=1;
  78.                            
  79. }

  80. void display_WE()                                            //東西時間顯示函數
  81. {
  82.               P0=0x00;            
  83.               w1_WE=0;
  84.               P0=table[seconds_WE/10];                //顯示東西時間的十位
  85.               delay(1);                                                                     
  86.               w1_WE=1;                                                                     
  87.                                                                         
  88.               P0=0x00;
  89.               w2_WE=0;
  90.               P0=table[seconds_WE%10];                            //顯示東西時間的個位
  91.               delay(1);                                                                     
  92.               w2_WE=1;
  93.                            
  94. }                             

  95. void timer0() interrupt 1                 //中斷函數,16位加1計數器
  96. {
  97.               TH0=(65536-50000)/256;
  98.               TL0=(65536-50000)%256;
  99.               t0++;
  100.               if(t0==20)
  101.               {
  102.                             t0=0;
  103.                             seconds_NS--;
  104.                             seconds_WE--;                                                      
  105.               }
  106. }

  107. void LED_display()                            //紅路燈的正常模式
  108. {
  109.               if(flag_NS==0)                            //flag_NS為0時
  110.               {
  111.                             if(seconds_NS>5)                //南北時間大于5s
  112.                             {
  113.                                           red_NS=1;                              //紅燈滅
  114.                                           yellow_NS=1;                //黃燈滅
  115.                                           green_NS=0;                            //綠燈亮                           
  116.                             }
  117.                             else
  118.                             {                                                           //5s內亮黃燈5s
  119.                                           red_NS=1;                           
  120.                                           yellow_NS=0;
  121.                                           green_NS=1;               
  122.                                           if(seconds_NS==0)
  123.                                           {
  124.                                             seconds_NS=seconds_WE_set;
  125.                                             flag_NS=1;
  126.                                           }                                                                                                               
  127.                             }
  128.               }
  129.               if(flag_NS==1)                            // flag_NS為1時
  130.               {
  131.                             if(seconds_NS>5)
  132.                             {
  133.                                           red_NS=0;                            //紅燈亮
  134.                                           yellow_NS=1;                //黃燈滅
  135.                                           green_NS=1;                            //綠燈滅            
  136.                             }
  137.                             else
  138.                             {                                                                      //5s內亮黃燈5s
  139.                                           red_NS=1;                             
  140.                                           yellow_NS=0;
  141.                                           green_NS=1;
  142.                                           if(seconds_NS==0)
  143.                                           {
  144.                                             seconds_NS=seconds_NS_set;
  145.                                             flag_NS=0;
  146.                                           }                                                                                                               
  147.                             }            
  148.               }

  149.               if(flag_WE==0)                            //flag_WE為0時
  150.               {
  151.                             if(seconds_WE>5)
  152.                             {
  153.                                           red_WE=0;                              //紅燈亮
  154.                                           yellow_WE=1;                //黃燈滅
  155.                                           green_WE=1;                              //綠燈滅
  156.                             }
  157.                             else
  158.                             {                                                           //5s內黃燈亮5s
  159.                                           red_WE=1;
  160.                                           yellow_WE=0;
  161.                                           green_WE=1;
  162.                                           if(seconds_WE==0)
  163.                                           {
  164.                                                         seconds_WE=seconds_NS_set;
  165.                                                         flag_WE=1;
  166.                                           }                           
  167.                             }
  168.               }
  169.               if(flag_WE==1)
  170.               {
  171.                             if(seconds_WE>5)
  172.                             {
  173.                                           red_WE=1;                               //紅燈滅
  174.                                           yellow_WE=1;                 //黃燈滅
  175.                                           green_WE=0;                               //綠燈亮
  176.                             }
  177.                             else
  178.                             {                                                          //黃燈亮5s
  179.                                           red_WE=1;
  180.                                           yellow_WE=0;
  181.                                           green_WE=1;
  182.                                           if(seconds_WE==0)
  183.                                           {
  184.                                                         seconds_WE=seconds_WE_set-3;
  185.                                                         flag_WE=0;
  186.                                           }                           
  187.                             }            
  188.               }
  189. }

  190. void keyscan()                            //按鍵掃描
  191. {
  192.               if(k1==0)
  193.               {            
  194.                             while(!k1);                            //等待按鍵釋放(消抖)
  195.                             k1num++;
  196.                             TR0=0;                           
  197.               }
  198.               if(k1num==1)
  199.               {
  200.                             if(k2==0)
  201.                             {
  202.                                           while(!k2);
  203.                                           seconds_NS_set++;
  204.                                           seconds_NS=seconds_NS_set;
  205.                             //              display_NS();                                                      
  206.                                           if(seconds_NS==100)
  207.                                                         seconds_NS=0;                           
  208.                             }
  209.                             if(k3==0)
  210.                             {
  211.                                           while(!k3);
  212.                                           seconds_NS_set--;
  213.                                           seconds_NS=seconds_NS_set;
  214.                             //              display_NS();
  215.                                           if(seconds_NS==0)
  216.                                                         seconds_NS=99;            
  217.                             }
  218.               }
  219.               if(k1num==2)
  220.               {
  221.                             if(k2==0)
  222.                             {
  223.                                           while(!k2);
  224.                                           seconds_WE_set++;
  225.                                           seconds_WE=seconds_WE_set;            
  226.                             //              display_WE();                                         
  227.                                           if(seconds_WE==100)
  228.                                                         seconds_WE=0;                           
  229.                             }
  230.                             if(k3==0)
  231.                             {
  232.                                           while(!k3);
  233.                                           seconds_WE_set--;
  234.                                           seconds_WE=seconds_WE_set;
  235.                             //              display_WE();
  236.                                           if(seconds_WE==0)
  237.                                                         seconds_WE=99;            
  238.                             }
  239.               }
  240.               if(k1num==3)
  241.               {
  242.                             k1num=0;
  243.                             TR0=1;
  244.               }

  245.               if(k4==0)
  246.               {
  247.                             while(!k4);
  248.                             k4num++;
  249.               }

  250.               /*特殊情況選擇模式*/
  251.               switch(k4num)                                                                       
  252.               {
  253.                             case 1:                                                                      //按第1次為緊急模式,禁止通行
  254.                                                         red_WE=0;
  255.                                                         yellow_WE=1;
  256.                                                         green_WE=1;
  257.                                                         red_NS=0;
  258.                                                         yellow_NS=1;
  259.                                                         green_NS=1;
  260.                                                         TR0=0;
  261.                                                         flag_NS=-1;
  262.                                                         flag_WE=-1;
  263.                                                         seconds_NS=99;
  264.                                                         seconds_WE=99;
  265.                                                         break;
復制代碼
13 心得體會
本次是第一次焊接,剛開始出現許多錯誤,修改修改再修改;上網查資料,請教師兄,最后做出來了。這次從中收獲許多,學會從網上檢索有用的資料,這對我們學習有很大的幫助。對單片機也有了進一步的了解,動手能力、分析能力也增強了,實踐很重要,再好的理論如果不能用于實踐,那么它就是沒有用的。
紙上得來終覺淺,絕知此事要躬行。
感謝。
  





參考資料:
1、單片機最小系統電路圖:


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久久 | 日本免费视频在线观看 | 亚洲国产精品久久久 | 欧洲精品一区 | 欧美亚洲国产一区二区三区 | 美女一级毛片 | 蜜桃视频在线观看www社区 | 97国产精品视频人人做人人爱 | 欧洲免费毛片 | 99久久久久 | 欧美日韩综合一区 | 老司机久久| www国产成人免费观看视频,深夜成人网 | 日本不卡免费新一二三区 | 久草视频在线播放 | 中文亚洲视频 | 日本在线黄色 | 午夜影院黄 | 久久久久久国产精品免费免费 | 久久国产视频网站 | 精品国产一区二区三区性色av | 色就干 | a级网站 | 先锋资源在线 | 亚洲三级在线 | 作爱视频免费观看 | 日韩av在线免费 | 中文字幕亚洲无线 | 精品一区二区三区日本 | 999久久久久久久久6666 | 久久久91 | 99久久99| 亚州成人 | 精品久久久久久亚洲综合网 | 男人的天堂中文字幕 | 成人亚洲一区 | 日韩福利一区 | 成人精品国产免费网站 | 黄网免费看 | 国产一区中文字幕 | 久久精品亚洲成在人线av网址 |