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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于80C51的交通燈設計 仿真及代碼

[復制鏈接]
跳轉到指定樓層
樓主
基于80C51單片機的交通燈設計 仿真及代碼

交通燈的所有資料下載:
jtd.zip (69.79 KB, 下載次數: 12)


下面是交通燈的仿真原理圖:


交通燈的單片機源程序:
  1. #include<reg51.h>

  2. //--定義使用的IO口--//
  3. #define GPIO_DIG   P0         //宏定義數碼管的段選接在P1口
  4. #define GPIO_PLACE P1
  5. #define GPIO_TRAFFIC P2         //宏定義紅綠燈接在P2口

  6. sbit RED10   = P2^0;    //上人行道紅燈
  7. sbit GREEN10 = P2^1;    //上人行道綠燈

  8. sbit RED11   = P2^2;    //主干道紅燈
  9. sbit YELLOW11= P2^3;        //主干道黃燈
  10. sbit GREEN11 = P2^4;    //主干道綠燈

  11. sbit RED00   = P3^0;    //右人行道紅燈
  12. sbit GREEN00 = P3^1;    //右人行道綠燈

  13. sbit RED01   = P2^5;        //副干道紅燈
  14. sbit YELLOW01= P2^6;        //副干道黃燈
  15. sbit GREEN01 = P2^7;        //副干道綠燈

  16. sbit k1=P3^4;         //定義P3^4口是k1


  17. //--定義全局變量--//
  18. unsigned char code DIG_PLACE[8] = {
  19. 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選控制   查表的方法控制

  20. unsigned char code DIG_CODE[17] = {
  21. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  22. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  23. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼

  24. unsigned char DisplayData[8];
  25. //用來存放要顯示的8位數的值

  26. unsigned char Time, Second;                 
  27. //用來存放定時時間


  28. //--聲明全局函數--//
  29. void DigDisplay(); //動態顯示函數
  30. void Timer0Cofig(void);


  31. void delay(int z)
  32. {
  33.         int x,y;
  34.         for(x=z;z>0;z--)
  35.                 for(y=110;y>0;y--);
  36. }
  37. void keypros()
  38. {
  39.         if(k1==0)                  //檢測按鍵K1是否按下
  40.         {       
  41.                 delay(1000);   //消除抖動 一般大約10ms
  42.                 if(k1==0)         //再次判斷按鍵是否按下
  43.                 {
  44.                 RED10=0;     //上人行道紅燈
  45.                 RED00=0;         //右人行道紅燈       
  46.             RED11=0;         
  47.                 RED01=0;         
  48.                 YELLOW11= 1;
  49.                 YELLOW01= 1;
  50.                 GREEN11 = 1;
  51.                 GREEN00 = 1;        //右人行道綠燈
  52.                 GREEN01 = 1;       
  53.                 GREEN10 = 1;        //上人行道綠燈
  54.                 }
  55.                 while(!k1);         //檢測按鍵是否松開
  56.         }               
  57. }


  58. /*******************************************************************************
  59. * 函 數 名         : main
  60. * 函數功能                   : 主函數
  61. *******************************************************************************/

  62. void main(void)
  63. {
  64.         Second = 1;

  65.         Timer0Cofig(); //調用定時器
  66.        
  67.         keypros();

  68.         while(1)
  69.         {
  70.                 if(Second == 70)
  71.                 {
  72.                         Second = 1;
  73.                 }

  74.                 //--主干道通行,30秒--//
  75.                 if(Second < 31)
  76.                 {
  77.                         keypros();

  78.                         DisplayData[0] = 0x00;
  79.                         DisplayData[1] = 0x00;
  80.                         DisplayData[2] = DIG_CODE[(30 - Second) % 100 / 10];
  81.                         DisplayData[3] = DIG_CODE[(30 - Second) %10];
  82.                         DisplayData[4] = 0x00;
  83.                         DisplayData[5] = 0x00;
  84.                         DisplayData[6] = DisplayData[2];
  85.                         DisplayData[7] = DisplayData[3];
  86.                         DigDisplay();

  87.                         //--主干道通行--//

  88.                         GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  89.                         RED00 = 1;
  90.                         GREEN00 = 1;

  91.                         GREEN11 = 0;    //主干道綠燈亮                       
  92.                         GREEN10        = 0;    //上人行道綠燈亮

  93.                         RED01 = 0;      //副干道紅燈亮
  94.                         RED00 = 0;      //右人行道紅燈亮
  95.                 }

  96.                 //--黃燈等待切換狀態,5秒--//
  97.                 else if(Second < 36)
  98.                 {
  99.                         keypros();

  100.                         DisplayData[0] = 0x00;
  101.                         DisplayData[1] = 0x00;
  102.                         DisplayData[2] = DIG_CODE[(35 - Second) % 100 / 10];
  103.                         DisplayData[3] = DIG_CODE[(35 - Second) %10];
  104.                         DisplayData[4] = 0x00;
  105.                         DisplayData[5] = 0x00;
  106.                         DisplayData[6] = DisplayData[2];
  107.                         DisplayData[7] = DisplayData[3];
  108.                         DigDisplay();

  109.                         //--黃燈階段--//

  110.                         GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  111.                         RED00 = 1;
  112.                         GREEN00 = 1;

  113.                         YELLOW11 = 0;    ////主干道黃燈亮                       
  114.                         RED10        = 0;     //上人行道紅燈亮

  115.                         YELLOW01 = 0;    //副干道紅燈亮
  116.                         RED00 = 0;       //右人行道紅燈亮
  117.                 }

  118.                 //--副干道通行  30秒--//
  119.                 else if(Second < 66)
  120.                 {
  121.                         keypros();

  122.                         DisplayData[0] = 0x00;
  123.                         DisplayData[1] = 0x00;
  124.                         DisplayData[2] = DIG_CODE[(65 - Second) % 100 / 10];
  125.                         DisplayData[3] = DIG_CODE[(65 - Second) %10];
  126.                         DisplayData[4] = 0x00;
  127.                         DisplayData[5] = 0x00;
  128.                         DisplayData[6] = DisplayData[2];
  129.                         DisplayData[7] = DisplayData[3];
  130.                         DigDisplay();

  131.                         //--副干道通行--//

  132.                         GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  133.                         RED00 = 1;
  134.                         GREEN00 = 1;

  135.                         RED11 = 0;       //主干道紅燈亮                       
  136.                         RED10 = 0;       //上人行道紅燈亮

  137.                         GREEN01 = 0;     //副干道綠燈亮
  138.                         GREEN00 = 0;     //右人行道綠燈亮
  139.                 }

  140.                 //--黃燈等待切換狀態,5秒--//
  141.                 else
  142.                 {
  143.                         keypros();

  144.                         DisplayData[0] = 0x00;
  145.                         DisplayData[1] = 0x00;
  146.                         DisplayData[2] = DIG_CODE[(70 - Second) % 100 / 10];
  147.                         DisplayData[3] = DIG_CODE[(70 - Second) %10];
  148.                         DisplayData[4] = 0x00;
  149.                         DisplayData[5] = 0x00;
  150.                         DisplayData[6] = DisplayData[2];
  151.                         DisplayData[7] = DisplayData[3];
  152.                         DigDisplay();

  153.                         //--黃燈階段--//

  154.                         GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  155.                         RED00 = 1;
  156.                         GREEN00 = 1;

  157.                         YELLOW11 = 0;    //主干道黃燈亮                       
  158.                         RED10        = 0;     //上人行道紅燈亮

  159.                         YELLOW01 = 0;    //主干道紅燈亮
  160.                         RED00 = 0;       //右人行道紅燈亮
  161.                 }
  162.         }                               
  163. }

  164. /*******************************************************************************
  165. * 函 數 名         : DigDisplay
  166. * 函數功能                   : 使用數碼管顯示
  167. *******************************************************************************/

  168. void DigDisplay()
  169. {
  170.         unsigned char i;
  171.         unsigned int j;


  172.         for(i=0; i<8; i++)
  173.         {
  174.                 GPIO_PLACE = DIG_PLACE[i];           //發送位選
  175.                 GPIO_DIG = DisplayData[i];     //發送段碼
  176.                 j = 10;                                                   //掃描間隔時間設定
  177.                 while(j--);       
  178.                 GPIO_DIG = 0x00;               //消隱
  179.         }
  180. }

  181. /*******************************************************************************
  182. * 函 數 名         : Timer0Cofig
  183. * 函數功能                   : 配置定時器
  184. *******************************************************************************/

  185. void Timer0Cofig(void)
  186. {
  187.         TMOD = 0x01;     //定時器0選擇工作方式1
  188.     TH0  = 0x3C;         //設置初始值,定時50MS
  189.     TL0  = 0xB0;
  190.     EA   = 1;             //打開總中斷
  191.     ET0  = 1;                 //打開定時器0中斷
  192.     TR0  = 1;                 //啟動定時器0
  193.         EX0  = 1;
  194.     IT0  = 1;       
  195. }

  196. /*******************************************************************************
  197. * 函 數 名         : Timer0
  198. * 函數功能                   : 定時器0中斷函數
  199. *******************************************************************************/                  

  200. void Timer0() interrupt 1
  201. {
  202.         TH0 = 0x3C;         //設置初始值
  203.         TL0 = 0xB0;
  204.         Time++;
  205.         if(Time == 20)
  206.         {
  207.                 Second ++;
  208.                 Time = 0;
  209.         }
  210. }
  211. void inter0() interrupt 0
  212. {
  213.         TH0 = 0x3C;         
  214.         TL0 = 0xB0;
  215. Second = 1;
  216. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天爽夜夜骑 | 日韩欧美福利视频 | 国产视频中文字幕 | 高清一区二区 | 久久亚洲高清 | 日本久久综合网 | 久久草在线视频 | 日韩欧美视频网站 | 国产1区| www.国产精 | 干干干日日日 | 亚洲网站观看 | 91在线视频观看免费 | 青青草免费在线视频 | 中文字幕国产日韩 | 91精品久久久久久久久 | 久久亚洲精品国产精品紫薇 | 欧美国产精品一区二区三区 | 午夜精品久久久久久久久久久久 | 毛片com| 精品视频一区二区在线观看 | 亚洲午夜网 | 中文字幕视频在线观看 | 午夜视频免费网站 | 99pao成人国产永久免费视频 | 91精品国产一区二区三区蜜臀 | 欧美一区二区三区国产 | 天天天天操| 91麻豆精品国产91久久久更新资源速度超快 | 午夜精品久久久久久久星辰影院 | 精品国产乱码久久久久久88av | 日韩精品一区二区三区中文在线 | 国产区在线 | 国产精品国产精品国产专区不卡 | 日韩免费一区 | 免费一级黄 | 国产精品不卡 | 中文字幕视频一区 | 91传媒在线观看 | 黄色国产视频 | 国产999精品久久久 精品三级在线观看 |