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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4675|回復: 0
收起左側

有5個狀態的單片機交通燈仿真和源代碼

[復制鏈接]
ID:126992 發表于 2016-6-16 15:07 | 顯示全部樓層 |閱讀模式
我覺得,厲害的是可以直接做PCB,仿真的和真實的還是有差距的,建議升級的8.2版本哦

交通燈仿真原理圖
0.png

單片機交通燈源代碼:
  1. /**************************************************************

  2. **                                                                 *
  3. *第一個狀態:主干道、支干道均亮紅燈5S                             *
  4. *第二個狀態:主干道亮綠燈30S、支干道亮紅燈                        *
  5. *第三個狀態:主干道綠燈閃3次轉亮黃燈、支干道亮紅燈3S              *
  6. *第四個狀態:主干道亮紅燈、支干道亮綠燈25S                        *
  7. *第五個狀態:主干道亮紅燈、支干道綠燈閃3次轉亮黃燈3S              *
  8. *返回到第二個狀態                                                 *
  9. *                                                                 *
  10. ***************************************************************

  11. /
  12. /* 11.0952M晶振*/
  13. #include<reg51.h>//頭文件
  14. #include<intrins.h>//頭文件
  15. #define  uchar  unsigned  char//宏定義
  16. #define  uint   unsigned   int//宏定義
  17. sbit   RED_ZHU    =  P1^0;
  18. sbit   YELLOW_ZHU =  P1^1;
  19. sbit   GREEN_ZHU  =  P1^2;
  20. sbit   RED_ZHI    =  P1^3;
  21. sbit   YELLOW_ZHI =  P1^4;
  22. sbit   GREEN_ZHI  =  P1^5;
  23. uint aa, bai,shi,ge,bb; //定義變量
  24. /*數碼管顯示0-9*/
  25. uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  26. /*子函數聲明*/
  27. void  delay(uint z);
  28. void  delay0(uint z);
  29. //void  init(uint a);
  30. void  display(uint ge,uint shi);
  31. void  xtimer0();
  32. void  init1();
  33. void  init2();
  34. void  init3();
  35. void  init4();
  36. void  init5();
  37. void xint1();
  38. void xint0();
  39. void  LED_ON();
  40. void  LED_OFF();
  41. /*********************************************************
  42.    主函數
  43. *********************************************************/
  44. void main()
  45. {       
  46.         P0=0XFF;
  47.         P1=0xFF;
  48.            P2=0xFF;
  49.         EA=1;//打開外部中斷
  50.         EX1=1;//允許外部中斷1中斷
  51.         IT1=0;//INT0為沿觸發方式
  52.           init1();
  53.   while(1)
  54.   {
  55.                   init2();//第2個狀態
  56.                 init3(); //第3個狀態
  57.                 init4(); //第4個狀態
  58.                  init5();//第5個狀態       
  59.   }
  60. }

  61. void  init1()//第一個狀態:主干道、支干道均亮紅燈5S
  62. {
  63.         uint temp;
  64.         temp=6;//變量賦初值
  65.         TMOD=0x01;//定時器0工作于方式1
  66.         TH0=0x4c;
  67.         TL0=0x00;//定時器賦初值
  68.         EA=1;//開外部中斷
  69.         ET0=1;//開定時中斷
  70.         TR0=1;//開定時器0
  71.         while(1)
  72.         {
  73.                 RED_ZHU=0;              //第一個狀態主干道、支干道均亮紅燈5S
  74.                    RED_ZHI=0;
  75.                 GREEN_ZHU=1;
  76.                 GREEN_ZHI=1;
  77.                 YELLOW_ZHU=1;
  78.                 YELLOW_ZHI=1;
  79.                 if(aa==20)//定時20*50MS=1S
  80.                 {
  81.                         aa=0;//定時完成一次后清0
  82.                         temp--;//變量自增
  83.                         //delay(10);
  84.                         if(temp>250)//定時100S
  85.                         {
  86.                                 temp=6;//變量清0
  87.                                 break;
  88.                         }
  89.                         shi=temp%100/10;//顯示十位
  90.                         ge=temp%10;//顯示個位         
  91.                 }
  92.                 display(ge,shi);
  93.         }
  94. }

  95. void  init2()//第二個狀態:主干道亮綠燈30S、支干道亮紅燈
  96. {
  97.         uint temp;
  98.         temp=31;//變量賦初值
  99.         TMOD=0x01;//定時器0工作于方式1
  100.         TH0=0x4c;
  101.         TL0=0x00;//定時器賦初值
  102.         EA=1;//開外部中斷
  103.         ET0=1;//開定時中斷
  104.         TR0=1;//開定時器0
  105.         while(1)
  106.         {         
  107.                 RED_ZHU=1;
  108.                 RED_ZHI=0;
  109.                 GREEN_ZHU=0;
  110.                 GREEN_ZHI=1;
  111.                 YELLOW_ZHU=1;//第二個狀態:主干道亮綠燈30S、支干道亮紅燈
  112.                    YELLOW_ZHI=1;
  113.                
  114.                 if(aa==20)//定時20*50MS=1S
  115.                 {
  116.                         aa=0;//定時完成一次后清0
  117.                         temp--;//變量自增
  118.                         if(temp==3)//定時100S
  119.                         {
  120.                                 temp=30;//變量清0
  121.                                 break;
  122.                         }
  123.                         shi=temp%100/10;//顯示十位
  124.                         ge=temp%10;//顯示個位
  125.                 }
  126.                 display(ge,shi);
  127.         }
  128. }

  129. void  init3() //第三個狀態:主干道綠燈閃3次轉亮黃燈、支干道亮紅燈3S
  130. {
  131.         uint temp;
  132.         temp=4;//變量賦初值
  133.         TMOD=0x01;//定時器0工作于方式1
  134.         TH0=0x4c;
  135.         TL0=0x00;//定時器賦初值
  136.         EA=1;//開外部中斷
  137.         ET0=1;//開定時中斷
  138.         TR0=1;//開定時器0
  139.         while(1)
  140.         {
  141.                 RED_ZHI=0;
  142.                 GREEN_ZHU=1;
  143.                 //YELLOW_ZHU=~YELLOW_ZHU;
  144.                 if(aa==20)//定時20*50MS=1S
  145.                 {
  146.                         aa=0;//定時完成一次后清0
  147.                         temp--;//變量自增
  148.                         YELLOW_ZHU=~YELLOW_ZHU;
  149.                         if(temp>200)//定時100S
  150.                         {
  151.                                 temp=4;//變量清0
  152.                                 break;
  153.                         }
  154.                         shi=temp%100/10;//顯示十位
  155.                         ge=temp%10;//顯示個位         
  156.                 }
  157.                 display(ge,shi);;
  158.         }
  159. }
  160. void  init4()//第四個狀態:主干道亮紅燈、支干道亮綠燈25S
  161. {
  162.         uint temp;
  163.         temp=26;//變量賦初值
  164.         TMOD=0x01;//定時器0工作于方式1
  165.         TH0=0x4c;
  166.         TL0=0x00;//定時器賦初值
  167.         EA=1;//開外部中斷
  168.         ET0=1;//開定時中斷
  169.         TR0=1;//開定時器0
  170.         while(1)
  171.         {       
  172.                 RED_ZHU=0;
  173.                 RED_ZHI=1;
  174.                 YELLOW_ZHU=1;//第一個狀態主干道、支干道均亮紅燈5S
  175.                    GREEN_ZHI=0;
  176.                 if(aa==20)//定時20*50MS=1S
  177.                 {
  178.                         aa=0;//定時完成一次后清0
  179.                         temp--;//變量自增
  180.                         if(temp==3)//定時100S
  181.                         {
  182.                                 temp=25;//變量清0
  183.                                 break;
  184.                         }
  185.                         shi=temp%100/10;//顯示十位
  186.                         ge=temp%10;//顯示個位         
  187.                 }
  188.                 display(ge,shi);
  189.         }
  190. }

  191. void  init5()//第五個狀態:主干道亮紅燈、支干道綠燈閃3次轉亮黃燈3S
  192. {
  193.         uint temp;
  194.         temp=4;//變量賦初值
  195.         TMOD=0x01;//定時器0工作于方式1
  196.         TH0=0x4c;
  197.         TL0=0x00;//定時器賦初值
  198.         EA=1;//開外部中斷
  199.         ET0=1;//開定時中斷
  200.         TR0=1;//開定時器0
  201.         while(1)
  202.         {
  203.                 RED_ZHI=1;
  204.                 RED_ZHU=0;
  205.                 GREEN_ZHU=1;
  206.                 GREEN_ZHI=1;
  207.                 //YELLOW_ZHI=~YELLOW_ZHI;
  208.                 if(aa==20)//定時20*50MS=1S
  209.                 {
  210.                         aa=0;//定時完成一次后清0
  211.                         temp--;//變量自增
  212.                         YELLOW_ZHI=~YELLOW_ZHI;
  213.                         if(temp>200)//定時100S
  214.                         {
  215.                                 temp=4;//變量清0
  216.                                 break;
  217.                         }
  218.                         shi=temp%100/10;//顯示十位
  219.                         ge=temp%10;//顯示個位         
  220.                 }
  221.                 display(ge,shi);
  222.         }
  223. }               
  224. /*顯示子函數*/
  225. void  display(uint ge,uint shi)
  226. {
  227.         P0=0xfd;
  228.         P2=table[shi];//顯示十位
  229.         delay0(5);
  230.         P0=0xfe;
  231.         P2=table[ge];//顯示個位
  232.         delay0(5);

  233. }
  234. void  xint0()  interrupt  2 //外部中斷1,這里用2是INT1的優先級為0
  235. {
  236.         LED_ON();
  237.        
  238. }

  239. void  LED_ON()//外部中斷0顯示子程序
  240. {
  241.                         RED_ZHI=0;
  242.                         RED_ZHU=0;
  243.                         GREEN_ZHI=1;
  244.                         GREEN_ZHU=1;
  245.                     YELLOW_ZHI=1;
  246.                         YELLOW_ZHU=1;
  247.                         delay0(1000);
  248.                         return ;
  249.        
  250. }
  251. /*定時中斷子函數*/
  252. void  xtimer0()  interrupt 1
  253. {
  254.         TH0=0x4c;
  255.         TL0=0x00;
  256.         aa++;
  257. }
  258. /*延時子函數*/
  259. void  delay0(uint z)
  260. {
  261.         uint i,j;
  262.         for(i=0;i<z;i++)
  263.                 for(j=0;j<110;j++);
  264. }

  265. /*********************************************************
  266.    500ms延時函數
  267.    晶振:11.0592MHz
  268. *********************************************************/
  269. void delay(unsigned char j)
  270. {
  271.    unsigned char k;
  272.    unsigned int i;
  273.    for(;j>0;j--)
  274.   {
  275.      for(i=1250;i>0;i--)
  276.      {
  277.        for(k=180;k>0;k--);
  278.      }
  279.    }
  280. }
復制代碼




51Protues.rar (64.1 KB, 下載次數: 31)


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线中文 | 久久中文视频 | 亚洲免费在线视频 | 中文字幕在线观看一区 | 欧美日韩精品免费观看 | 99热精品在线观看 | 欧美日韩在线电影 | 男女午夜激情视频 | a级片在线观看 | 亚洲精品视频三区 | 中文字幕日韩一区 | 日韩字幕一区 | 91国自视频 | 久久久久久久久99精品 | 国产视频福利在线观看 | 高清久久| 国产精品视频中文字幕 | 综合久久综合久久 | 中文字幕 国产 | 亚洲精品高清视频在线观看 | 日韩欧美视频 | 美女黄网 | 国产精品一区久久久 | 羞羞视频网站 | 欧美日韩精品一区二区三区视频 | 久久精品一区 | 久久精品99 | 一级片免费视频 | 欧美日韩成人 | 日本欧美视频 | 久热精品免费 | 欧美久久一区 | 国产99视频精品免视看9 | 亚洲精品一区国产精品 | 成人免费淫片aa视频免费 | 亚洲69p| 一区二区三区免费观看 | 久久久久久国产精品免费免费男同 | 欧美视频偷拍 | 亚洲一卡二卡 | 亚洲va在线va天堂va狼色在线 |