欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于stc89c52單片機的人工可控交通燈

[復制鏈接]
跳轉到指定樓層
樓主




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

  2. typedef unsigned int u16;   //對數據類型進行聲明定義
  3. typedef unsigned char u8;
  4. sbit L1=P0^7;
  5. sbit L2=P0^6;
  6. sbit k1=P0^5;

  7. //--定義使用的IO口--//
  8. #define GPIO_DIG   P1
  9. #define GPIO_TRAFFIC P2

  10. sbit RED11   = P2^0;
  11. sbit YELLOW11= P2^1;
  12. sbit GREEN11 = P2^2;
  13. sbit RED01   = P2^5;
  14. sbit YELLOW01= P2^4;
  15. sbit GREEN01 = P2^3;
  16. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  17.      0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
  18. u8 DisplayData[2];
  19. u8 Second;
  20. u16 temp;

  21. void delay(u16 i)
  22. {
  23. while(i--);
  24. }

  25. void DigDisplay()
  26. {
  27. u8 i;
  28. for(i=0;i<2;i++)
  29. {
  30.   switch(i)  //位選,選擇點亮的數碼管,
  31.   {
  32.    case(0):
  33.     L1=0;L2=1; break;//顯示第0位
  34.    case(1):
  35.     L2=0;L1=1; break;//顯示第1位
  36.    
  37.   }
  38.   GPIO_DIG=DisplayData[i];//發送段碼
  39.   delay(100); //間隔一段時間掃描
  40.   GPIO_DIG=0x00;//消隱
  41. }
  42. }


  43. void Timer0Init()
  44. {
  45. TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
  46. TH0=0XFC; //給定時器賦初值,定時1ms
  47. TL0=0X18;
  48. ET0=1;//打開定時器0中斷允許
  49. EA=1;//打開總中斷
  50. TR0=1;//打開定時器   
  51. }


  52. void Timer0() interrupt 1
  53. {
  54. static u16 i;
  55. TH0=0XFC; //給定時器賦初值,定時1ms
  56. TL0=0X18;
  57. i++;
  58. if(i==1000)
  59. {
  60.   i=0;
  61.   Second ++;
  62. }
  63. }  
  64. void main()
  65. {
  66. Second = 1;

  67. k1=0;
  68. Timer0Init();
  69. while(1)
  70. {
  71.   if(Second == 70)
  72.   {
  73.    Second = 1;
  74.   }
  75.   //--寶田路通行,30秒--//
  76.   if(Second < 31)
  77.   {
  78.    
  79.    DisplayData[0] = smgduan[(30 - Second) % 100 / 10];
  80.    DisplayData[1] = smgduan[(30 - Second) %10];
  81.    
  82.    DigDisplay();
  83.    //--寶田路通行--//
  84.    GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  85.    GREEN11 = 0;    //寶田路綠燈亮   
  86.   
  87.    RED01 = 0;      //前進路紅燈亮
  88.   }
  89.   //--黃燈等待切換狀態,5秒--//
  90.   else if(Second < 36)
  91.   {
  92.   
  93.    DisplayData[0] = smgduan[(35 - Second) % 100 / 10];
  94.    DisplayData[1] = smgduan[(35 - Second) %10];
  95.   
  96.    DigDisplay();
  97.    //--黃燈階段--//
  98.    GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  99.    YELLOW11 = 0;    //寶田路黃燈亮   
  100.    YELLOW01 = 0;    //前進路紅燈亮
  101.   }
  102.   //--前進路通行--//
  103.   else if(Second < 66)
  104.   {
  105.    
  106.    DisplayData[0] = smgduan[(65 - Second) % 100 / 10];
  107.    DisplayData[1] = smgduan[(65 - Second) %10];
  108.    
  109.    DigDisplay();
  110.    //--黃燈階段--//
  111.    GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  112.   
  113.    RED11 = 0;       //寶田路紅燈亮   
  114.   
  115.    GREEN01 = 0;     //前進路綠燈亮
  116.   
  117.   }
  118.   //--黃燈等待切換狀態,5秒--//
  119.   else
  120.   {
  121.   
  122.    DisplayData[0] = smgduan[(70 - Second) % 100 / 10];
  123.    DisplayData[1] = smgduan[(70 - Second) %10];
  124.    DigDisplay();
  125.    //--黃燈階段--//
  126.    GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  127.   
  128.    YELLOW11 = 0;    //寶田路黃燈亮   
  129.    YELLOW01 = 0;    //前進路紅燈亮
  130.   
  131.   }
  132.    
  133.   if(k1==1)    //檢測按鍵K1是否按下
  134.   {
  135.    delay(1000);   //消除抖動 一般大約10ms
  136.    if(k1==1)  //再次判斷按鍵是否按下
  137.    {
  138.     temp=0x1E;
  139.     P2=temp;
  140.     L1=0;L2=0;
  141.    
  142.    }
  143.    while(!k1);  //檢測按鍵是否松開
  144.   }  
  145. }
  146.       
  147. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:189362 發表于 2017-8-7 12:21 | 只看該作者
好東西,值得學習
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表