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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機原理及應用課程設計論文模板-交通信號燈模擬控制系統

[復制鏈接]
跳轉到指定樓層
樓主
資料包內容:



課程設計論文模板:


目錄
摘要    I
1    課程論文內容與要求:    I
2    硬件系統的設計    I
2.1    各元器件選擇及其功能介紹    I
2.2    STC89C5X    II
2.3    單片機最小系統    VI
2.4    緊急通行模塊    IX
2.5    忙等通行模塊    X
2.6    總電路圖    X
3    軟件系統的設計    XII
3.1    概要設計    XII
3.1.1    程序流程圖    XII
4    系統調試    XIII
4.1    功能測試    XIII
4.1.1    正常運行模塊    XIII
4.1.2    緊急通行模塊    XIV
4.1.3    忙等通行模塊    XIV
5    收獲與體會    XVI
附錄    I
源程序清單    I
參考文獻    I

單片機源程序如下:
  1. /**************************************************************************************
  2. *                              交通燈實驗                                                                                                  *
  3. 實現現象:模仿交通燈運作
  4. 注意事項:無                                                                                                                                                                  
  5. ***************************************************************************************/

  6. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

  7. void delay();
  8. void display();
  9. void TrafficStart();
  10. void TrafficStop();
  11. void ledInit();
  12. void changeNSpass();
  13. void changeEWpass();

  14. typedef unsigned int u16;          //對數據類型進行聲明定義
  15. typedef char u8;

  16. u8 code table[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,  
  17.                                         0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
  18. u8 code stop[]={0xbf};                           //1011 1111                  

  19. u8 time1=3;                 //東西方向  第一位數字
  20. u8 time2=0;                 //東西方向  第二位數字

  21. u8 time3=2;                 //南北方向  第一位數字
  22. u8 time4=5;                 //南北方向  第一位數字

  23. u8 change=0;         //東西方向狀態改變,初始為0        0為紅燈    1為綠燈    2為黃燈
  24. u8 change1=2;         //南北方向狀態改變,初始為2        0為紅燈    1為綠燈    2為黃燈

  25. u8 ledset=0;         //緊急狀態標志位,0為允許緊急狀態啟動
  26. u8 templed=2;         //LED燈臨時記錄,初始為2                        0為綠燈           1為黃燈          2為紅燈
  27. u8 templed1=5;         //LED燈臨時記錄,初始為5                        3為綠燈           4為黃燈          5為紅燈

  28. u8 count=0;                  //緊急狀態按鍵計數   
  29. u8 count1=0;          //方向轉變計數

  30. sbit led0=P1^0;           //將P1^0口定義為led0          綠色1
  31. sbit led1=P1^1;           //將P1^1口定義為led1                 黃色1
  32. sbit led2=P1^2;           //將P1^2口定義為led2                 紅色1
  33. sbit led3=P1^3;           //將P1^0口定義為led3                 綠色2
  34. sbit led4=P1^4;           //將P1^1口定義為led4                 黃色2
  35. sbit led5=P1^5;           //將P1^2口定義為led5                 紅色2

  36. sbit CK1 = P2^3;   //東西方向第一位數碼管
  37. sbit CK2 = P2^2;   //東西方向第二位數碼管

  38. sbit CK3 = P2^1;   //南北方向第一位數碼管
  39. sbit CK4 = P2^0;   //南北方向第二位數碼管

  40. sbit key2 = P3^0;
  41. sbit key3 = P3^1;
  42. sbit key4 = P3^2;

  43. void delay(u16 i)
  44. {
  45.         while(i--);       
  46. }

  47. void display(u8 time1,u8 time2,u8 time3,u8 time4);
  48. /*******************************************************************************
  49. * 函 數 名         : Timer1Init
  50. * 函數功能                   : 定時器1初始化
  51. * 輸    入         : 無
  52. * 輸    出         : 無
  53. *******************************************************************************/
  54. void Timer1Init()
  55. {
  56.         TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。

  57.         TH1=0X3c;        //給定時器賦初值,定時50ms
  58.         TL1=0Xb0;       
  59.         ET1=1;//打開定時器1中斷允許
  60.         EA=1;//打開總中斷
  61.         TR1=1;//打開定時器                       
  62. }

  63. /*******************************************************************************
  64. * 函 數 名       : main
  65. * 函數功能                 : 主函數
  66. * 輸    入       : 無
  67. * 輸    出             : 無
  68. *******************************************************************************/
  69. void main()
  70. {       
  71.         CK1=0;
  72.         CK2=0;
  73.         led2=0;
  74.         led3=0;
  75.         Timer1Init();  //定時器1初始化
  76.         while(1)
  77.         {
  78. //*******************************************************************************
  79.                 if(key3==0&&count%2==0){          //當按下key3并且狀態為運行狀態時有效
  80.                         delay(1000);
  81.                         if(key3==0&&count%2==0)
  82.                         {       
  83.                                 TR1=0;        //關閉定時器,防止切換時仍然計時
  84.                                 count1++;
  85.                                 if(count1%2==1){        //(非紅燈狀態下允許執行)
  86.                                         TR1=1;        //打開定時器
  87.                                         changeEWpass();
  88.                                         }
  89.                                 if(count1%2==0){
  90.                                         TR1=1;
  91.                                         changeNSpass();
  92.                                         }
  93.                         }
  94.                         while(!key3);
  95.                    }
  96. //*******************************************************************************
  97.                 if(key2==0){
  98.                         delay(1000);
  99.                         if(key2==0)
  100.                         {
  101.                                 count++;
  102.                         }
  103.                         while(!key2);
  104.                 }

  105.                 if(count%2==0){                         //為0則將狀態恢復為運行狀態
  106.                         if(ledset==0){                //判斷上次是否為緊急狀態
  107.                                 ledset=1;               
  108.                                 ledInit();
  109.                                 templed=2;                //東西方向初始化為紅燈,由于執行了ledInit()會改變它的值,所以需要初始化,防止上個數值再次被利用(實際上只需要非0或1就行)
  110.                                 templed1=5;                //南北方向初始化為紅燈,由于執行了ledInit()會改變它的值,所以需要初始化,防止上個數值再次被利用(實際上只需要非3或4就行)
  111.                                 }
  112.                         TrafficStart();                //正常狀態下while會死循環該語句,該語句為動態顯示數字函數
  113.                 }
  114.                 if(count%2==1){                                        //為1將狀態修改為緊急狀態
  115.                         ledset=0;                                       
  116.                         TrafficStop();
  117.                 }
  118.        
  119.         }                       
  120. }

  121. /*******************************************************************************
  122. * 函 數 名         : void Timer1() interrupt 3
  123. * 函數功能                   : 定時器1中斷函數
  124. * 輸    入         : 無
  125. * 輸    出         : 無
  126. *******************************************************************************/
  127. void Timer1() interrupt 3
  128. {
  129.         static u16 i;
  130.         TH1=0X3c;        //給定時器賦初值,定時50ms
  131.         TL1=0Xb0;
  132.         i++;
  133.         if(i==20)           //i等20時為1秒
  134.         {
  135.                 i=0;
  136. //-------------------------------------東西  方向-------------------------------------
  137.                 time2--;
  138.                 if(time2==-1&&time1!=0){               
  139.                         time1--;
  140.                         time2=9;
  141.                 }
  142.                 if((time2==0&&time1==0)){
  143.                         if(change==0){        //東西方向  如果為紅燈
  144.                                 change=1;        //下次為綠燈
  145.                                 time1=5;
  146.                                 time2=0;
  147.                                 led2=1;
  148.                                 led1=1;
  149.                                 led0=0;                //綠燈亮
  150.                                 count1++;  //紅燈轉綠燈時計數加1,否則執行方向轉變時按鍵會無效(閃一下而不變向)
  151.                         }
  152.                         else if(change==1){          //東西方向  如果為綠燈
  153.                                 change=2;                  //下次為黃燈
  154.                                 time1=1;
  155.                                 time2=0;
  156.                                 led2=1;
  157.                                 led1=0;
  158.                                 led0=1;
  159.                         }
  160.                         else if(change==2){  //東西方向  如果為黃燈
  161.                                 change=0;                 //下次為紅燈
  162.                                 time1=3;
  163.                                 time2=0;
  164.                                 led2=0;
  165.                                 led1=1;
  166.                                 led0=1;
  167.                                
  168.                         }
  169.                 }
  170. //-------------------------------------南北  方向-------------------------------------
  171.                 time4--;
  172.                 if(time4==-1&&time3!=0){
  173.                         time3--;
  174.                         time4=9;

  175.                 }
  176.                 if(time4==0&&time3==0){
  177.                         if(change1==2){          //南北方向  如果為綠燈
  178.                                 change1=1;          //下次為黃燈
  179.                                 time3=0;
  180.                                 time4=5;
  181.                                 led3=1;
  182.                                 led4=0;
  183.                                 led5=1;        
  184.                         }
  185.                         else if(change1==1){  //南北方向  如果為黃燈
  186.                                 change1=0;                  //下次為紅燈
  187.                                 time3=6;
  188.                                 time4=0;
  189.                                 led3=1;
  190.                                 led4=1;
  191.                                 led5=0;
  192.                         }
  193.                         else if(change1==0){   //南北方向  如果為紅燈
  194.                                 change1=2;                   //下次為綠燈
  195.                                 time3=2;
  196.                                 time4=5;
  197.                                 led3=0;
  198.                                 led4=1;
  199.                                 led5=1;
  200.                                 count1++;  //紅燈轉綠燈時計數加1,否則執行方向轉變時按鍵會無效(閃一下而不變向)
  201.                                
  202.                         }
  203.                 }
  204. //------------------------------------------------------------------------------------
  205.         }
  206. }

  207. void display(u8 time1,u8 time2,u8 time3,u8 time4)        //顯示程序
  208. {  
  209.         P0=table[time1];
  210.         CK1=0;
  211.         delay(100);
  212.         CK1=1;

  213.         P0=table[time2];
  214.         CK2=0;
  215.         delay(100);
  216.         CK2=1;

  217.         P0=table[time3];
  218.         CK3=0;
  219.         delay(100);
  220.         CK3=1;

  221.         P0=table[time4];
  222.         CK4=0;
  223.         delay(100);
  224.         CK4=1;
  225. }

  226. void TrafficStart()
  227. {
  228.         TR1=1;//打開定時器
  229.         display(time1,time2,time3,time4);
  230. }

  231. void TrafficStop()
  232. {   
  233.         TR1=0;//關閉定時器
  234.         CK1=CK2=CK3=CK4=0;
  235.         P0=stop[0];
  236.         if(led0==0){
  237.                 templed=0;        //記錄當前燈狀態  東西方向
  238.                 led0=1;                //將原來燈熄滅
  239.                 led2=0;                //亮紅燈
  240.                 }
  241.         if(led1==0){
  242.                 templed=1;
  243.                 led1=1;
  244.                 led2=0;
  245.                 }
  246.         if(led3==0){
  247.                 templed1=3;        //記錄當前燈狀態  南北方向
  248.                 led3=1;
  249.                 led5=0;
  250.                 }
  251.         if(led4==0){
  252.                 templed1=4;
  253.                 led4=1;
  254.                 led5=0;
  255.                 }
  256. }

  257. void ledInit()
  258. {
  259.         if(templed==0){         //恢復緊急狀態前時的燈狀態  東西方向
  260.                 led2=1;                 //熄滅其他燈
  261.                 led1=1;                 //熄滅其他燈
  262.                 led0=0;                 //恢復燈的狀態
  263.                 }
  264.         if(templed==1){
  265.                 led2=1;
  266.                 led1=0;
  267.                 led0=1;
  268.                 }
  269.         if(templed1==3){ //恢復緊急狀態前時的燈狀態  南北方向
  270.                 led5=1;                 //熄滅其他燈
  271.                 led4=1;                 //熄滅其他燈
  272.                 led3=0;                 //恢復燈的狀態
  273.                 }
  274.         if(templed1==4){
  275.                 led5=1;
  276.                 led4=0;
  277. ……………………

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

所有資料51hei提供下載:
單片機大作業.rar (3.65 MB, 下載次數: 46)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一二三视频 | 亚洲国产精品人人爽夜夜爽 | 国产激情精品视频 | av香蕉 | 成人亚洲视频 | 国产91精品在线 | 99久久久国产精品免费消防器 | 91久久久久久 | a久久久久久 | 日本久草 | 亚洲欧美日本在线 | 二区视频 | 国产精品久久 | 欧美黄色一区 | 亚洲欧美综合精品另类天天更新 | 日韩在线精品视频 | 亚洲香蕉在线视频 | 伊人国产精品 | 成人免费看片 | 国产精品视频在线免费观看 | 久久av.com| 韩日一区二区 | 在线欧美小视频 | 亚洲一区精品在线 | 日韩精品一区二区三区中文在线 | 亚洲精品一区二区三区在线观看 | 91久久精品 | 91av在线不卡| 又爽又黄axxx片免费观看 | 欧美精品tv | 九九热精品视频 | 日本精品久久 | 欧美日本久久 | 91久久久久久 | 天天操天天干天天透 | 毛片电影 | 日韩在线免费视频 | 精品欧美一区二区精品久久久 | 国产精品久久久久久久久久久久久久 | 国产免费一区二区三区 | 午夜丰满少妇一级毛片 |