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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機交通燈設(shè)計 原理圖與代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:205712 發(fā)表于 2017-5-28 22:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
proteus交通信號燈仿真原理圖

  吉首大學(xué)單片機交通燈設(shè)計
原理圖
局部放大

單片機源程序如下:
  1. <font color="rgb(0, 0, 0)">#include<reg51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={     //共陰極數(shù)碼管碼表
  5. 0x3f,0x06,0x5b,0x4f,
  6. 0x66,0x6d,0x7d,0x07,
  7. 0x7f,0x6f,0x77,0x7c,
  8. 0x39,0x5e,0x79,0x71,

  9. 0xC9,0xFF,0x40};//設(shè)置碼,測試碼,不計時碼

  10. void delay(uint x);//延時函數(shù)
  11. void display(uchar,uchar,uchar,uchar);    //數(shù)碼管顯示函數(shù)
  12. void mkeys();    //鍵盤函數(shù)
  13. void traffic();    //交通燈函數(shù)

  14. uchar num,num1,num2,  //1南北 2東西
  15. shi1,ge1,shi2,ge2,
  16. value1,value2,//南北 綠燈時間 黃燈時間
  17. value3,value4,//東西 綠燈時間 黃燈時間
  18. count1,count2,flag1,flag2; //南北標(biāo)記 東西標(biāo)記

  19. void main()
  20. {   
  21.         
  22.         TMOD=0x01;
  23.         TH0=(65536-45872)/256;
  24.         TL0=(65536-45872)%256;
  25.         EA=1;
  26.         ET0=1;
  27.         TR0=1;
  28.         /*初狀態(tài)*/
  29.         value1=15;         //南北 黃綠燈默認(rèn)值
  30.         value2=5;      
  31.         value3=10;      //東西 黃綠燈默認(rèn)值
  32.         value4=5;

  33.         num1=value1; //南北數(shù)碼管先綠燈時間
  34.         num2=value2+value1;//東西紅燈時間
  35.         shi1=num1/10;
  36.         ge1=num1%10;
  37.         shi2=num2/10;
  38.         ge2=num2%10;
  39.         P1=0x41;//初始狀態(tài):東西紅燈 南北綠燈      20 15

  40.         while(1){
  41.             if(num==20)       //定時器1s
  42.             {
  43.                 num=0;
  44.                 num1--;
  45.                 num2--;
  46.                 traffic();
  47.                     
  48.                 shi1=num1/10;
  49.                 ge1=num1%10;

  50.                 shi2=num2/10;
  51.                 ge2=num2%10;

  52.             }
  53.               mkeys();
  54.                   display(shi1,ge1,shi2,ge2);
  55.               
  56.         }

  57. }

  58. void traffic() //紅綠燈主控制程序
  59. {
  60.     if(num1==0){
  61.             count1++;
  62.             if(count1==1){
  63.                 P1=0x42;//東西紅燈 南北黃燈    5 5
  64.                 num1=value2;
  65.             }
  66.             if(count1==2){
  67.                 num1=value3+value4;//東西綠燈 南北紅燈    10 15
  68.                 P1=0x14;
  69.             }
  70.             if(count1==3){
  71.                 P1=0x41;// 東西黃燈 南北紅燈    5 5
  72.                 num1=value4;
  73.                 count1=0;                           
  74.             }
  75.     }
  76.     if(num2==0){
  77.             count2++;
  78.             if(count2==1){
  79.                 //P1=0x14;//東西綠燈 南北紅燈
  80.                 num2=value3;
  81.             }
  82.             if(count2==2){
  83.                 P1=0x24;//東西黃燈 南北紅燈
  84.                 num2=value4;
  85.             }
  86.             if(count2==3){
  87.                 num2=value1+value2; //東西紅燈 南北綠燈
  88.                 num1=value1;
  89.                 count2=0;
  90.             }
  91.                     
  92.     }
  93. }

  94. void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2)    //數(shù)碼管顯示子函數(shù)
  95. {        
  96.         uchar temp;
  97.         temp=P2;
  98.         P2=0xfe;
  99.         P0=table[shi1];
  100.         delay(5);
  101.         
  102.         P2=0xfd;
  103.         P0=table[ge1];
  104.         delay(5);
  105.    
  106.         P2=0xfb;
  107.         P0=table[shi2];
  108.         delay(5);
  109.         
  110.         P2=0xf7;
  111.         P0=table[ge2];
  112.         delay(5);        
  113. }

  114. void delay(uint x)//延時子函數(shù)
  115. {
  116.     uint i,j;
  117.     for(i=x;i>0;i--)
  118.         for(j=110;j>0;j--);
  119. }

  120. void mkeys()  //4*4矩陣鍵盤功能子函數(shù)
  121. {
  122.     uchar temp,key;
  123.     P3=0xfe;//第一行線
  124.     temp=P3;
  125.     temp=temp&0xf0;
  126.     if(temp!=0xf0)
  127.     {
  128.         delay(10);
  129.         temp=P3;
  130.         temp=temp&0xf0;
  131.         if(temp!=0xf0){
  132.             temp=P3;
  133.             switch(temp)
  134.             {
  135.                 case 0xee:
  136.                     key=0;
  137.                     break;
  138.                 case 0xde:
  139.                     key=1;
  140.                     break;
  141.                 case 0xbe:
  142.                     key=2;
  143.                     break;
  144.                 case 0x7e:
  145.                     key=3;
  146.                     break;
  147.             }
  148.         while(temp!=0xf0)
  149.         {
  150.             temp=P3;
  151.             temp=temp&0xf0;
  152.         }
  153.         if(key==0) {//按鍵1:暫停
  154.             TR0=~TR0;  //定時器取反
  155.             flag1=~flag1;//南北能夠設(shè)置標(biāo)志 0有效
  156.             flag2=~flag2;//東西能夠設(shè)置標(biāo)志
  157.         }

  158.         if(key==1&&flag1==0){    //按鍵2:設(shè)置時間按鈕
  159.             TR0=0;
  160.             P1=0x44;//禁止東南西北車輛 全為紅燈 可以設(shè)置
  161.             shi1=ge1=shi2=ge2=16;
  162.         }

  163.         if(key==2&&flag2==0){//按鍵3:設(shè)置完成 重啟
  164.             TR0=1;
  165.             num=0;     //定時器 初始化
  166.             P1=0x41; //重新開始初狀態(tài)
  167.             num1=value1; //南北數(shù)碼管先綠燈時間
  168.             num2=value2+value1;//東西紅燈時間
  169.             shi1=num1/10;
  170.             ge1=num1%10;
  171.             shi2=num2/10;
  172.             ge2=num2%10;
  173.         }

  174.         if(key==3&&P1==0x44){ //按鍵4:測試交通燈各個設(shè)備的好壞
  175.             P1=0xff;
  176.             delay(1000);
  177.             P1=~P1;
  178.             shi1=ge1=shi2=ge2=17;
  179.             P1=0x44;
  180.         }

  181.         }
  182.     }

  183.     P3=0xfd;//第二行線
  184.     temp=P3;
  185.     temp=temp&0xf0;
  186.     if(temp!=0xf0)
  187.     {
  188.         delay(10);
  189.         temp=P3;
  190.         temp=temp&0xf0;
  191.         if(temp!=0xf0){
  192.             temp=P3;
  193.             switch(temp)
  194.             {
  195.                 case 0xed:
  196.                     key=0;
  197.                     break;
  198.                 case 0xdd:
  199.                     key=1;
  200.                     break;
  201.                 case 0xbd:
  202.                     key=2;
  203.                     break;
  204.                 case 0x7d:
  205.                     key=3;
  206.                     break;
  207.             }
  208.         while(temp!=0xf0)
  209.         {
  210.             temp=P3;
  211.             temp=temp&0xf0;
  212.         }
  213.          
  214.         if(key==0&&P1==0x44){    //按鍵5:設(shè)置南北綠燈時間+

  215.             num1=value1;
  216.             if(num2!=159){ //@@@@保證交通合理,紅燈最大值計時159s,綠燈不再增加
  217.                 num1++;
  218.                 value1=num1;
  219.             }

  220.             shi1=num1/10;
  221.             ge1=num1%10;

  222.             num2=value1+value2;//顯示東西紅燈時間
  223.             shi2=num2/10;
  224.             ge2=num2%10;


  225.         }
  226.         if(key==1&&P1==0x44){    //按鍵6:設(shè)置南北黃燈時間+
  227.             num1=value2;
  228.             if(num2!=159){
  229.                 num1++;
  230.                 value2=num1;
  231.             }

  232.             shi1=num1/10;
  233.             ge1=num1%10;
  234.             num2=value1+value2;//顯示東西紅燈時間
  235.             shi2=num2/10;
  236.             ge2=num2%10;

  237.         }
  238.         if(key==2&&P1==0x44&&value1>3){    //按鍵7:設(shè)置南北綠燈時間- @@@@保證交通合理,綠燈最小值計時3s,綠燈不再減少
  239.             num1=value1;

  240.             num1--;
  241.             value1=num1;

  242.             shi1=num1/10;
  243.             ge1=num1%10;
  244.             num2=value1+value2;//顯示東西紅燈時間
  245.             shi2=num2/10;
  246.             ge2=num2%10;

  247.         }
  248.         if(key==3&&P1==0x44&&value2>3){    //按鍵8:設(shè)置南北黃燈時間-      
  249.             num1=value2;

  250.             num1--;
  251.             value2=num1;

  252.             shi1=num1/10;
  253.             ge1=num1%10;
  254.             num2=value1+value2;//顯示東西紅燈時間
  255.             shi2=num2/10;
  256.             ge2=num2%10;

  257.         }
  258.         }
  259.    
  260.     }
  261.    ////||||||||||||||||||

  262.     P3=0xfb;//第三行線
  263.     temp=P3;
  264.     temp=temp&0xf0;
  265.     if(temp!=0xf0)
  266.     {
  267.         delay(10);
  268.         temp=P3;
  269.         temp=temp&0xf0;
  270.         if(temp!=0xf0){
  271.             temp=P3;
  272.             switch(temp)
  273.             {
  274.                 case 0xeb:
  275.                     key=0;
  276.                     break;
  277.                 case 0xdb:
  278.                     key=1;
  279.                     break;
  280.                 case 0xbb:
  281.                     key=2;
  282.                     break;
  283.                 case 0x7b:
  284.                     key=3;
  285.                     break;
  286.             }
  287.         while(temp!=0xf0)
  288.         {
  289.             temp=P3;
  290.             temp=temp&0xf0;
  291.         }
  292.         if(key==0&&P1==0x44){    //按鍵9:設(shè)置東西綠燈時間+
  293.    
  294.             num2=value3;
  295.             if(num1!=159){
  296.                 num2++;
  297.                 value3=num2;
  298.             }

  299.             shi2=num2/10;
  300.             ge2=num2%10;

  301.             num1=value3+value4;//顯示南北紅燈時間
  302.             shi1=num1/10;
  303.             ge1=num1%10;



  304.         }
  305.         if(key==1&&P1==0x44){    //按鍵10:設(shè)置東西黃燈時間+
  306.             num2=value4;

  307.             if(num1!=159){
  308.                 num2++;
  309.                 value4=num2;
  310.             }

  311.             shi2=num2/10;
  312.             ge2=num2%10;
  313.             num1=value3+value4;//顯示南北紅燈時間
  314.             shi1=num1/10;
  315.             ge1=num1%10;

  316.         }
  317.         if(key==2&&P1==0x44&&value3>3){    //按鍵11:設(shè)置東西綠燈時間-
  318.             num2=value3;

  319.             num2--;
  320.             value3=num2;

  321.             shi2=num2/10;
  322.             ge2=num2%10;

  323.             num1=value3+value4;//顯示南北紅燈時間
  324.             shi1=num1/10;
  325.             ge1=num1%10;


  326.         }
  327.         if(key==3&&P1==0x44&&value4>3){    //按鍵12:設(shè)置東西黃燈時間-
  328.             num2=value4;

  329.             num2--;
  330.             value4=num2;

  331.             shi2=num2/10;
  332.             ge2=num2%10;
  333.             num1=value3+value4;//顯示南北紅燈時間
  334.             shi1=num1/10;
  335.             ge1=num1%10;


  336.         }
  337.         }
  338.    
  339.     }

  340.     P3=0xf7;//第四行線          2未用
  341.     temp=P3;
  342.     temp=temp&0xf0;
  343.     if(temp!=0xf0)
  344.     {
  345.         delay(10);
  346.         temp=P3;
  347.         temp=temp&0xf0;
  348.         if(temp!=0xf0){
  349.             temp=P3;
  350.             switch(temp)
  351.             {
  352.                 case 0xe7:
  353.                     key=0;
  354.                     break;
  355.                 case 0xd7:
  356.                     key=1;
  357.                     break;
  358.                 case 0xb7:
  359.                     key=2;
  360.                     break;
  361.                 case 0x77:
  362.                     key=3;
  363.                     break;
  364.             }
  365.         while(temp!=0xf0)
  366.         {
  367.             temp=P3;
  368.             temp=temp&0xf0;
  369.         }
  370.         if(key==0&&P1==0x44){    //按鍵13:南北緊急情況:南北綠燈常亮 東西紅燈常亮
  371.             P1=0x41;
  372.             shi1=ge1=shi2=ge2=18;   

  373.         }
  374.         if(key==1&&P1==0x44){    //按鍵14:東西緊急情況:東西綠燈常亮 南北紅燈常亮
  375.             P1=0x14;
  376.             shi1=ge1=shi2=ge2=18;   
  377.         }
  378.         if(key==2&&P1==0x44){//按鍵15:
  379.             
  380.         }
  381.         if(key==3&&P1==0x44){//按鍵16:
  382.             
  383.         }
  384.         }
  385.    
  386.     }



  387. }
  388. void T0_time() interrupt 1     //定時器T0 中斷子程序
  389. {
  390.     TH0=(65536-45872)/256;
  391.     TL0=(65536-45872)%256;
  392.     num++;
  393. }
  394. </font>
復(fù)制代碼

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

使用道具 舉報

沙發(fā)
ID:297634 發(fā)表于 2018-3-30 00:13 | 只看該作者
獲益良多!!
回復(fù)

使用道具 舉報

板凳
ID:411657 發(fā)表于 2018-10-18 18:35 | 只看該作者
想獲得全部代碼
回復(fù)

使用道具 舉報

地板
ID:447674 發(fā)表于 2018-12-17 09:17 | 只看該作者
樓主學(xué)的是否是通用式單片機
回復(fù)

使用道具 舉報

5#
ID:552378 發(fā)表于 2019-6-10 10:32 | 只看該作者
要是有仿真文件就好了,自己連的仿真有點小問題
回復(fù)

使用道具 舉報

6#
ID:728994 發(fā)表于 2020-4-14 14:55 來自手機 | 只看該作者
想要全部代碼
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久久成人 | 亚洲国产精品久久久久秋霞不卡 | 亚洲一页| 欧美日韩一二三区 | 婷婷中文在线 | 日日操夜夜干 | 999久久久 | 欧美成人a∨高清免费观看 欧美日韩中 | 超碰97人人人人人蜜桃 | 米奇狠狠鲁 | 欧美日韩国产一区二区 | 亚州春色 | 国产精品视频二区三区 | 欧美一区二区三区一在线观看 | 日本特黄a级高清免费大片 国产精品久久性 | 欧美日韩视频在线 | 一级aaaaaa毛片免费同男同女 | 毛片一区二区三区 | 国产伦精品一区二区三区视频金莲 | 国久久 | 欧美成人激情视频 | 精品国产鲁一鲁一区二区张丽 | 国产最好的av国产大片 | 亚洲国产乱码 | 久久一区精品 | 久久99精品久久久久久 | 精品国产乱码久久久久久图片 | 亚洲品质自拍视频 | 一区二区三区国产 | 亚洲精品国产成人 | 精品人伦一区二区三区蜜桃网站 | 国产综合网站 | 国产资源网 | 国产视频精品在线观看 | 亚洲一级av毛片 | 亚洲精品电影网在线观看 | 国产精品国产精品 | 激情六月丁香婷婷 | 亚洲成人网在线播放 | av成年人网站 | 精彩视频一区二区三区 |