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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超詳細的單片機交通信號燈控制程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:523178 發(fā)表于 2020-4-7 21:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用定時器計時,注釋非常詳細,可自己改變定時時間。

單片機源程序如下:
  1. #include "reg52.h"
  2. #define GPIO_TRAFFIC P2
  3. #define GPIO_DIG P0
  4. typedef unsigned char u8;
  5. typedef unsigned int u16;

  6. //3-8譯碼器引腳位定義
  7. sbit LSA = P1^0;
  8. sbit LSB = P1^1;
  9. sbit LSC = P1^2;
  10. //交通信號燈南北方向控制引腳位定義
  11. sbit GREEN10 = P2^0;
  12. sbit RED10 = P2^1;
  13. sbit GREEN11 = P2^2;
  14. sbit YELLOW11 = P2^3;
  15. sbit RED11 = P2^4;
  16. //交通信號燈東西方向控制引腳位定義
  17. sbit GREEN00 = P1^6;
  18. sbit RED00 = P1^7;
  19. sbit GREEN01 = P2^5;
  20. sbit YELLOW01 = P2^6;
  21. sbit RED01 = P2^7;


  22. u8 code smgduan[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  23.                                                 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰
  24. u8 displaydata[8]; //儲存信號燈倒計時

  25. //定義一個全局變量
  26. u8 second;


  27. //各種函數(shù)的聲明
  28. void Timer0Init();
  29. void delay(u16 i);
  30. void Digdisplay();
  31. void trafficpros();
  32. /*******************************
  33.                 主函數(shù):main
  34. *******************************/
  35. void main(void)
  36. {
  37.         second = 1;
  38.         Timer0Init();  //初始化定時器T0;
  39.         while(1)
  40.         {
  41.                  trafficpros();       
  42.         }
  43. }
  44. /*******************************
  45. 定時器T0配置函數(shù),只選擇TCON中TR
  46. 0觸發(fā),定時10ms。
  47. *******************************/
  48. void Timer0Init()
  49. {
  50.         TMOD |= 0x01;
  51.         TH0 = 0xd8;
  52.         TL0 = 0xf0;     //設(shè)定初值55536,定時10ms
  53.         IE = 0x82;      //開啟T0中斷和總中斷
  54.         TR0 = 1;        //開啟定時器T0
  55. }
  56. /*******************************
  57. 中斷處理函數(shù)
  58. *******************************/
  59. void Time0() interrupt 1
  60. {
  61.         static u16 i;
  62.         TH0 = 0xd8;
  63.         TL0 = 0xf0;    //重裝初值
  64.         i++;         //記下中斷的次數(shù),100次為一秒
  65.         if(100 == i)
  66.         {
  67.                  i = 0;
  68.                 second++;
  69.         }       
  70. }
  71. /*******************************
  72. 延時函數(shù),延時約10μs
  73. *******************************/
  74. void delay(u16 i)
  75. {
  76.         while(i--);
  77. }
  78. /*******************************
  79. 8位數(shù)碼管位選函數(shù)
  80. *******************************/
  81. void Digdisplay()
  82. {
  83.         u8 i;
  84.         for(i = 0; i < 8; i++)
  85.         {
  86.                    switch(i)
  87.                 {
  88.                         case 0:
  89.                                 LSA = 0; LSB = 0; LSC = 0; break;
  90.                          case 1:
  91.                                 LSA = 1; LSB = 0; LSC = 0; break;
  92.                         case 2:
  93.                                 LSA = 0; LSB = 1; LSC = 0; break;
  94.                         case 3:
  95.                                 LSA = 1; LSB = 1; LSC = 0; break;
  96.                         case 4:
  97.                                 LSA = 0; LSB = 0; LSC = 1; break;
  98.                         case 5:
  99.                                 LSA = 1; LSB = 0; LSC = 1; break;
  100.                         case 6:
  101.                                 LSA = 0; LSB = 1; LSC = 1; break;
  102.                         case 7:
  103.                                 LSA = 1; LSB = 1; LSC = 1; break;
  104.                 }
  105.                 GPIO_DIG = displaydata[i];
  106.                 delay(100);
  107.                 GPIO_DIG = 0x00;  //消影
  108.         }
  109. }
  110. /*******************************
  111. 交通信號燈控制函數(shù)
  112. *******************************/
  113. void trafficpros()
  114. {
  115.         if(second > 74)
  116.         {
  117.                  second = 1;
  118.         }
  119.         //南北方向通車和人行道
  120.         if(second < 32)
  121.         {
  122.                 displaydata[0] = 0x00; //第一位數(shù)碼管不顯示
  123.                 displaydata[1] = 0x00; //第二位數(shù)碼管不顯示       
  124.                 displaydata[2] = smgduan[(31 - second)/10];
  125.                 displaydata[3] = smgduan[(31 - second)%10];
  126.                 displaydata[4] = 0x00; //第五位數(shù)碼管不顯示
  127.                 displaydata[5] = 0x00; //第六位數(shù)碼管不顯示
  128.                 displaydata[6] = displaydata[2];
  129.                 displaydata[7] = displaydata[3];
  130.                 Digdisplay();
  131.                 //每次先所有的燈進行熄滅
  132.                 GPIO_TRAFFIC = 0xff;
  133.                 GREEN00 = 1;
  134.                 RED00 = 1;

  135.                 GREEN10 = 0;   //人行道綠燈亮
  136.                 GREEN11 = 0;   //車道綠燈亮

  137.                 RED00 = 0;     //東西方向人行道紅燈亮
  138.                 RED01 = 0;     //東西方向車道紅燈亮
  139.         }
  140.         //中間黃燈階段
  141.         else if(second < 38)
  142.         {
  143.                  displaydata[0] = 0x00; //第一位數(shù)碼管不顯示
  144.                 displaydata[1] = 0x00; //第二位數(shù)碼管不顯示       
  145.                 displaydata[2] = smgduan[(37 - second)/10];
  146.                 displaydata[3] = smgduan[(37 - second)%10];
  147.                 displaydata[4] = 0x00; //第五位數(shù)碼管不顯示
  148.                 displaydata[5] = 0x00; //第六位數(shù)碼管不顯示
  149.                 displaydata[6] = displaydata[2];
  150.                 displaydata[7] = displaydata[3];
  151.                 Digdisplay();
  152.                 //每次先所有的燈進行熄滅
  153.                 GPIO_TRAFFIC = 0xff;
  154.                 GREEN00 = 1;
  155.                 RED00 = 1;

  156.                 RED10 = 0;           //南北方向人行道紅燈亮
  157.                 YELLOW11 = 0;  //南北方向車道黃燈亮

  158.                 RED00 = 0;     //東西方向人行道紅燈亮
  159.                 RED01 = 0;     //東西方向車道紅燈亮               
  160.         }
  161.         //東西方向通車和人行道
  162.         else if(second < 69)
  163.         {
  164.                  displaydata[0] = 0x00; //第一位數(shù)碼管不顯示
  165.                 displaydata[1] = 0x00; //第二位數(shù)碼管不顯示       
  166.                 displaydata[2] = smgduan[(68 - second)/10];
  167.                 displaydata[3] = smgduan[(68 - second)%10];
  168.                 displaydata[4] = 0x00; //第五位數(shù)碼管不顯示
  169.                 displaydata[5] = 0x00; //第六位數(shù)碼管不顯示
  170.                 displaydata[6] = displaydata[2];
  171.                 displaydata[7] = displaydata[3];
  172.                 Digdisplay();
  173.                 //每次先所有的燈進行熄滅
  174.                 GPIO_TRAFFIC = 0xff;
  175.                 GREEN00 = 1;
  176.                 RED00 = 1;
  177.                
  178.                 GREEN00 = 0;           //東西方向人行道綠燈亮
  179.                 GREEN01 = 0;                   //東西方向車道綠燈亮

  180.                 RED10 = 0;             //南北方向人行道紅燈亮
  181.                 RED11 = 0;                           //南北方向車道紅燈亮
  182.         }
  183.         //中間黃燈階段
  184.         else
  185.         {
  186.                  displaydata[0] = 0x00; //第一位數(shù)碼管不顯示
  187.                 displaydata[1] = 0x00; //第二位數(shù)碼管不顯示       
  188.                 displaydata[2] = smgduan[(74 - second)/10];
  189.                 displaydata[3] = smgduan[(74 - second)%10];
  190.                 displaydata[4] = 0x00; //第五位數(shù)碼管不顯示
  191.                 displaydata[5] = 0x00; //第六位數(shù)碼管不顯示
  192.                 displaydata[6] = displaydata[2];
  193.                 displaydata[7] = displaydata[3];
  194.                 Digdisplay();
  195.                 //每次先所有的燈進行熄滅
  196.                 GPIO_TRAFFIC = 0xff;
  197.                 GREEN00 = 1;
  198.                 RED00 = 1;
  199.                
  200.                 RED00 = 0;                       //東西方向人行道紅燈亮
  201.                 YELLOW01 = 0;                   //東西方向車道黃燈亮
  202.                
  203.                 RED10 = 0;             //南北方向人行道紅燈亮
  204.                 RED11 = 0;                           //南北方向車道紅燈亮       
  205.         }
  206. }
復(fù)制代碼

所有資料51hei提供下載:
交通信號燈.rar (24.3 KB, 下載次數(shù): 66)


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

使用道具 舉報

沙發(fā)
ID:590833 發(fā)表于 2020-4-9 13:24 | 只看該作者
老哥有沒有整個工程文件
回復(fù)

使用道具 舉報

板凳
ID:523178 發(fā)表于 2020-4-10 09:03 | 只看該作者
爾與一扇窗 發(fā)表于 2020-4-9 13:24
老哥有沒有整個工程文件

所有的Keil工程代碼都在里面了,你還缺啥
回復(fù)

使用道具 舉報

地板
ID:773851 發(fā)表于 2020-6-9 12:49 | 只看該作者
老哥,有圖嗎
回復(fù)

使用道具 舉報

5#
ID:801175 發(fā)表于 2020-7-11 10:40 | 只看該作者
連仿真圖都沒有?
回復(fù)

使用道具 舉報

6#
ID:523178 發(fā)表于 2020-8-25 20:29 | 只看該作者

有,不出
回復(fù)

使用道具 舉報

7#
ID:933536 發(fā)表于 2021-6-5 21:24 | 只看該作者
想要圖
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线免费 | 国产婷婷色一区二区三区 | 欧美一区二区三区在线播放 | 亚洲欧洲激情 | 欧美日韩专区 | 国产综合久久久久久鬼色 | 99爱在线免费观看 | 欧美精品一区在线 | 国产精品区二区三区日本 | 久久人| 国产在线视频在线观看 | 精品在线观看一区二区 | 视频一区在线 | 在线播放亚洲 | 欧美a免费 | 一区二区av | www.日本精品 | 97伦理| 高清久久 | 日本精品视频一区二区 | 国产精品午夜电影 | 久久久久亚洲精品国产 | 欧美综合一区 | 午夜精品久久久久久久久久久久 | 激情 婷婷 | 成人视屏在线观看 | 在线一区二区三区 | 91久久国产综合久久 | 亚洲www | 成人1区| 日韩欧美不卡 | 欧美激情精品久久久久 | 精品1区 | 国产精品日韩欧美一区二区三区 | 老司机深夜福利网站 | 久久久国产精品 | 九九热精品视频在线观看 | 男人av网 | 亚洲视频中文字幕 | 视频一区二区中文字幕 | 国产成人精品免费视频大全最热 |