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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡單的基于51單片機交通燈,需要的拿走

[復制鏈接]
跳轉到指定樓層
樓主
  1. #include <reg51.h>                                //頭文件
  2. #define uchar unsigned char
  3. #define uint  unsigned int                //宏定義

  4. uchar data buf[5];                                        //秒顯示的變量
  5. uchar data sec_dx=20;                          //東西數默認
  6. uchar data sec_nb=20;                        //南北默認值
  7. uchar data set_timedx=20;                //設置東西方向的時間
  8. uchar data set_timenb=20;                //設置南北方向的時間

  9. uchar data countt0,countt1;//定時器0中斷次數
  10. //定義6組開關

  11. sbit  k1=P3^1;               
  12. sbit  k2=P3^4;               
  13. sbit  k3=P3^3;
  14. sbit  k4=P3^0;
  15. sbit Red_nb=P2^6;                //南北紅燈標志
  16. sbit Yellow_nb=P2^5;        //南北黃燈標志
  17. sbit Green_nb=P2^4;     //南北綠燈標志

  18. sbit Red_dx=P2^3;                //東西紅燈標志
  19. sbit Yellow_dx=P2^2;        //東西黃燈標志
  20. sbit Green_dx=P2^1;                //東西綠燈標志
  21.                
  22. bit set=0;                                //調時方向切換鍵標志 =1時,南北,=0時,東西
  23. bit dx_nb=0;                        //東西南北控制位
  24. bit shanruo=0;                        //閃爍標志位
  25. bit key1=1;
  26. bit key2=1;
  27. uchar code table[11]={        0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  28.                         0x7d,0x07,0x7f,0x6f,0x00};

  29. //函數的聲明部分
  30. void delay(int ms);                        //延時子程序
  31. void key();                                        //按鍵掃描子程序
  32. void key_to1();                                //鍵處理子程序
  33. void key_to2();
  34. void key_to3();
  35. void display();                                //顯示子程序
  36. //主程序
  37. void main()
  38. {
  39.         TMOD=0X11;                                           //定時器設置
  40.         TH1=0X3C;               
  41.         TL1=0XB0;
  42.         TH0=0X3C;                                        //定時器0置初值 0.05S
  43.         TL0=0XB0;
  44.         EA=1;                                                //開總中斷
  45.         ET0=1;                                                //定時器0中斷開啟
  46.         ET1=1;                                           //定時器1中斷開啟
  47.         TR0=1;                                                //啟動定時0
  48.         TR1=1;                                                         //關閉定時1
  49.         EX0=1;                                                //開外部中斷0
  50.         EX1=1;                                                //開外部中斷1
  51.   
  52.         P2=0Xc3;                                        // 開始默認狀態,東西綠燈,南北黃燈   
  53.                             //默認南北通行時間比東西多5秒
  54.         while(1)                                          //主循環
  55.         {         
  56.                 key();                                         //調用按鍵掃描程序
  57.                 display();                                 //調用顯示程序
  58.         }       
  59. }
  60. //函數的定義部分
  61. void key(void)        //按鍵掃描子程序
  62. {         
  63.        
  64. if(k1!=1)                                                        //當K1(禁止)鍵按下時
  65. {
  66.          if(dx_nb==0)
  67.         {
  68.                 sec_dx=10;
  69.         sec_nb=10;                       
  70.         }
  71.          if(dx_nb==1)
  72.         {
  73.                 sec_dx=10;
  74.         sec_nb=10;                       
  75.         }
  76. }
  77.         if(k2!=1)                                                        //當K2(確認)鍵按下時
  78.         {               
  79.          if(dx_nb==0)
  80.                 {  key1=0;
  81.                 sec_dx=10;
  82.         sec_nb=10;               
  83.                 }
  84.                  if(dx_nb==1)
  85.                  {
  86.         TR0=0;                                                                //關定時器0
  87.         TR1=0;
  88.         Green_nb=1;
  89.         sec_nb=99;                                                        //四個方向的時間都為00
  90.         sec_dx=99;
  91.                 }
  92.         }       
  93. if(k3!=1)                                                        //當K2(確認)鍵按下時
  94.         {               
  95.          if(dx_nb==1)
  96.                 {  key2=0;
  97.                 sec_dx=10;
  98.         sec_nb=10;               
  99.                 }
  100.                  if(dx_nb==0)
  101.                  {
  102.         TR0=0;                                                                //關定時器0
  103.         TR1=0;
  104.         Green_dx=1;
  105.         sec_nb=99;                                                        //四個方向的時間都為00
  106.         sec_dx=99;
  107.                 }
  108.         }

  109. void display(void) //顯示子程序
  110. {               
  111.         buf[1]=sec_nb/10;                 //第1位 東西秒十位
  112.         buf[2]=sec_nb%10;                 //第2位 東西秒個位
  113.         buf[3]=sec_dx/10;                 //第3位 南北秒十位
  114.         buf[0]=sec_dx%10;                 //第4位 南北秒個位               
  115.         P1=0xff;                          // 初始燈為滅的
  116.         P0=0x00;                                     //滅顯示
  117.        
  118.         P1=0xfe;                           //片選LED1
  119.         P0=table[buf[1]];                //送東西時間十位的數碼管編碼                       
  120.         delay(1);                                //延時
  121.         P1=0xff;                                //關顯示
  122.         P0=0x00;                                //滅顯示
  123.                                                   
  124.         P1=0xfd;                     //片選LED2
  125.         P0=table[buf[2]];                 //送東西時間個位的數碼管編碼
  126.         delay(1);                                 //延時
  127.         P1=0xff;                                //關顯示
  128.         P0=0x00;                                //關顯示
  129.        
  130.         P1=0Xfb;                                  //片選LED3
  131.         P0=table[buf[3]];        //送南北時間十位的數碼管編碼
  132.         delay(1);                                //延時
  133.         P1=0xff;                                 //關顯示
  134.         P0=0x00;                                 //關顯示
  135.        
  136.         P1=0Xf7;                                 //片選LED4       
  137.         P0=table[buf[0]];        //送南北時間個位的數碼管編碼
  138.         delay(1);                                //延時
  139. }
  140. void time1(void) interrupt 3 using 1
  141. {    TH1=0X3C;                                                        //重賦初值
  142.          TL1=0XB0;
  143.          TR1=1;
  144.        
  145.         if(key1==0&&sec_dx==1)
  146.         {
  147.                
  148.         sec_dx=99;                        //重賦東西方向的起始值
  149.         sec_nb=99;
  150.         Green_dx=0;
  151.                 Green_nb=1;
  152.                 Red_dx=1;
  153.                 Red_nb=0;
  154.                
  155.                 TR0=0;       
  156.         }
  157.         if(key2==0&&sec_nb==1)
  158.         {
  159.                
  160.         sec_dx=99;                        //重賦東西方向的起始值
  161.         sec_nb=99;
  162.         Green_nb=0;
  163.                 Green_dx=1;
  164.                 Red_nb=1;
  165.                 Red_dx=0;
  166.                
  167.                 TR0=0;       
  168.         }
  169. }       
  170. void time0(void) interrupt 1 using 1          //定時中斷子程序
  171. {
  172.         TH0=0X3C;                                                        //重賦初值
  173.         TL0=0XB0;                                                        //12m晶振50ms//重賦初值
  174.         TR0=1;                                                                //重新啟動定時器
  175.         countt0++;        //軟件計數加1

  176.        
  177.         if(countt0==10)                                                //加到10也就是半秒
  178.         {
  179.                 if((sec_dx<=10)&&(dx_nb==0)&&(shanruo==1))                  //東西黃燈閃               
  180.         {
  181.                         Green_dx=0;
  182.                        
  183.                 }                                                  
  184.             if((sec_nb<=10)&&(dx_nb==1)&&(shanruo==1))                  //南北黃燈閃               
  185.         {  
  186.                         Green_nb=0;
  187.                
  188.                 }       
  189.         }
  190.        
  191.                
  192.         if(countt0==20)              // 定時器中斷次數=20時(即1秒時)
  193.         {        countt0=0;                                        //清零計數器
  194.                 sec_dx--;                                                //東西時間減1
  195.                 sec_nb--;                                                //南北時間減1

  196.                 if((sec_dx<=10)&&(dx_nb==0)&&(shanruo==1))                  //東西黃燈閃               
  197.         {
  198.                         Green_dx=1;
  199.                
  200.                 }                                                  
  201.             if((sec_nb<=10)&&(dx_nb==1)&&(shanruo==1))                  //南北黃燈閃               
  202.         {  
  203.                         Green_nb=1;
  204.                        
  205.                 }                                                                
  206.                
  207.                 if(dx_nb==0&&sec_dx==0)                        //當黃燈閃爍時間倒計時到0時,
  208.                 {
  209.                         P2=0x00;                                               //重置東西南北方向的紅綠燈
  210.                         Green_nb=1;
  211.                         Red_dx=1;
  212.                         dx_nb=!dx_nb;
  213.                         shanruo=0;
  214.                         sec_nb=set_timenb;                        //重賦南北方向的起始值
  215.                         sec_dx=set_timenb;                //重賦東西方向的起始值
  216.                 }               
  217.                 if(dx_nb==1&&sec_nb==0)                        //當黃燈閃爍時間到
  218.                 {
  219.                         P2=0X00;                                         //重置東西南北的紅綠燈狀態
  220.                         Green_dx=1;                         //東西綠燈亮
  221.                         Red_nb=1;                          //南北紅燈亮
  222.                         dx_nb=!dx_nb;         //取反
  223.                         shanruo=0;          //閃爍
  224.                         sec_dx=set_timedx;                        //重賦東西方向的起始值
  225.                         sec_nb=set_timedx;                //重賦南北方向的起始值
  226.                 }
  227.         }       
  228.         if(sec_dx==10&&dx_nb==0)
  229.         {
  230.                 shanruo=1;         
  231.         }
  232.         if(sec_nb==10&&dx_nb==1)
  233.         {
  234.                 shanruo=1;         
  235.         }
  236.        
  237.        
  238.        
  239. }


  240. //外部中斷0

  241. void delay(int ms)                //延時子程序
  242. {
  243.         uint j,k;
  244.         for(j=0;j<ms;j++)                        //延時ms
  245.            for(k=0;k<124;k++);                //大約1毫秒的延時
  246. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:746907 發表于 2022-3-23 09:49 | 只看該作者
樓主能給個清楚點的仿真圖嗎?
你這個壓縮包里沒有仿真
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线超碰| 一区二区三区在线观看视频 | 天天激情综合 | 精品国产免费人成在线观看 | 亚洲欧美中文日韩在线v日本 | 亚洲3级| 亚洲精品日韩精品 | 99精彩视频 | 精品国产久| 国产激情视频在线 | 欧美国产精品一区二区三区 | 亚洲精品中文在线观看 | 国产成人短视频在线观看 | 夜夜爽99久久国产综合精品女不卡 | 欧美综合一区 | 久热免费| 国产成人午夜精品影院游乐网 | 特级特黄特色的免费大片 | 日日夜精品视频 | 综合久久久 | 欧美日本在线 | 日韩午夜场 | 在线观看欧美一区 | 成人一区二区三区在线观看 | 黄色一级大片视频 | 夜夜草天天草 | 中文字幕一区在线观看视频 | 91中文 | 成年无码av片在线 | 欧美在线亚洲 | 欧美乱做爰xxxⅹ久久久 | 色综合天天天天做夜夜夜夜做 | 亚洲欧美日韩精品久久亚洲区 | 亚洲精品久久久久久一区二区 | 欧美日韩精品一区二区三区蜜桃 | 欧美精品欧美精品系列 | 国产精品污www一区二区三区 | 九九热九九 | 精品欧美乱码久久久久久 | 成人av网站在线观看 | 蜜臀久久99精品久久久久久宅男 |