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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機實現紅綠燈控制的代碼+Proteus仿真

  [復制鏈接]
跳轉到指定樓層
樓主
51實現紅綠燈控制仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg51.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. //定義共陰數碼管段碼0-9
  5. uchar code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};

  6. sbit A_R = P2 ^ 0;        // 定義A路的紅燈
  7. sbit A_Y = P2 ^ 1;        // 定義A路的黃燈
  8. sbit A_G = P2 ^ 2;        // 定義A路的綠燈

  9. sbit B_R = P2 ^ 3;        // 定義B路的紅燈
  10. sbit B_Y = P2 ^ 4;        // 定義B路的黃燈
  11. sbit B_G = P2 ^ 5;        // 定義B路的綠燈

  12. sbit A_SEG_EN_1 = P0 ^0;        // 定義A路的數碼管的第一個位的使能
  13. sbit A_SEG_EN_2 = P0 ^1;        // 定義A路的數碼管的第二個位的使能
  14. sbit B_SEG_EN_1 = P0 ^2;        // 定義B路的數碼管的第一個位的使能
  15. sbit B_SEG_EN_2 = P0 ^3;        // 定義B路的數碼管的第二個位的使能

  16. sbit key = P0 ^ 7;        // 緊急按鍵

  17. bit flag = 0;        // 標志是否處于緊急狀態,緊急狀態flag=1

  18. //作用:延時 z ms
  19. //參數:z
  20. //返回值:
  21. void delay(uint z)        // 利用不停的運行空代碼來消耗時間
  22. {
  23.         uint x, y;
  24.         for (x = z; x>0; x--)
  25.         for (y = 110; y>0; y--);
  26. }

  27. void check_buttn()
  28. {
  29.         //檢測按鍵key
  30.         if (key == 0)                        // 如果按鍵被按下
  31.         {
  32.                 delay(10);                        // 消抖
  33.                 if (key == 0)                // 確認按鍵被按下
  34.                 {
  35.                         flag = !flag;        // 緊急標志位取反
  36.                         while (!key);        // 等待按鍵釋放
  37.                 }
  38.         }
  39. }

  40. void seg_display(int numA, int numB)
  41. {
  42.         P0 |= 0x7F;                                // 關閉所有數碼管的片選
  43.         P3 = segment[numA/10];        // 顯示A路計時的十位
  44.         A_SEG_EN_1 = 0;                        // 打開A路的十位的使能
  45.        
  46.         P1 = segment[numB/10];        // 顯示B路計時的十位
  47.         B_SEG_EN_1 = 0;                        // 打開B路的十位的使能
  48.         delay(5);                                // 延時,是數據在數碼管上停留一段時間
  49.        
  50.        
  51.         P0 |= 0x7F;                                // 關閉所有數碼管的片選
  52.         P3 = segment[numA%10];        // 顯示A路計時的個位
  53.         A_SEG_EN_2 = 0;                        // 打開A路的個位的使能
  54.        
  55.         P1 = segment[numB%10];        // 顯示B路計時的個位
  56.         B_SEG_EN_2 = 0;                        // 打開B路的個位的使能
  57.         delay(5);                                // 延時,是數據在數碼管上停留一段時間
  58. }

  59. void display(int numA, int numB)
  60. {
  61.         int i = 0;
  62.         int temp = P2;        // 保存紅綠燈的狀態
  63.        
  64.         for(i=0; i<50; i++)
  65.         {
  66.                 check_buttn();        // 按鍵檢測
  67.                 if(flag)                // 如果處于緊急狀態
  68.                 {
  69.                         while(flag)        // 緊急狀態中
  70.                         {
  71.                                 P2 = 0x09;        // 將AB路都變成紅燈
  72.                                 seg_display(numA, numB);        // 顯示計時
  73.                                 check_buttn();        // 按鍵檢測
  74.                         }
  75.                         P2 = temp;        // 還原進入緊急之前的狀態
  76.                 }
  77.                 seg_display(numA, numB);        // 顯示計時
  78.         }
  79. }

  80. void main()
  81. {
  82.         int j=0;
  83.         P2 = 0;        //先關閉所有的紅綠燈,為了防止剛打開仿真的時候有閃爍
  84.         while(1)
  85.         {
  86.                 A_G = 1;
  87.                 B_R = 1;
  88.                 for (j=10; j>=0; j--)
  89.                         display(j/2, j/2);
  90.                 P2 = 0;
  91.                
  92.                 for (j=5; j>=0; j--)
  93.                 {
  94.                        
  95.                 A_Y = 1;
  96.                 B_R = 1;
  97.                         display(j, j+25);
  98.                        
  99.                 A_Y = 0;
  100.                 B_R = 1;
  101.                         display(j, j+25);
  102.                 }
  103.                 P2 = 0;
  104.                
  105.                 A_R = 1;
  106.                 B_G = 1;
  107.                 for (j=25; j>=0; j--)
  108.                         display(j+5, j);
  109.                 P2 = 0;
  110.                
  111.                 A_R = 1;
  112.                 B_Y = 1;
  113.                 for (j=5; j>=0; j--)
  114.                         display(j, j);
  115.                 P2 = 0;
  116.         }
  117. }
復制代碼

所有資料51hei提供下載:
交通燈.rar (48.19 KB, 下載次數: 228)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:436768 發表于 2018-11-30 20:07 | 只看該作者
可以,頂一下
回復

使用道具 舉報

板凳
ID:855891 發表于 2020-12-7 11:50 | 只看該作者
這個還是十字路口的
回復

使用道具 舉報

地板
ID:993146 發表于 2021-12-16 13:09 | 只看該作者
能發一下元件表嗎
回復

使用道具 舉報

5#
ID:1024801 發表于 2022-5-8 15:49 | 只看該作者
有原件表嗎
回復

使用道具 舉報

6#
ID:1141125 發表于 2024-12-24 14:58 來自手機 | 只看該作者
AINA2019 發表于 2022-5-8 15:49
有原件表嗎

原件圖
回復

使用道具 舉報

7#
ID:1141125 發表于 2024-12-24 14:58 來自手機 | 只看該作者
有原件圖不
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美一区二区三区1000 | 日韩精品在线一区 | 免费一区 | 国产高清视频 | 视频在线h| 国产午夜精品一区二区三区 | 91精品国产乱码麻豆白嫩 | 成人做爰www免费看视频网站 | 久久久精品 | 国产欧美一区二区三区另类精品 | 国产一区精品在线 | 一区二区三区在线观看免费视频 | 国产成人99久久亚洲综合精品 | 久草在线在线精品观看 | 亚洲精品乱码久久久久久蜜桃91 | 日本韩国电影免费观看 | av国产在线观看 | 亚洲国产一区二区视频 | 在线观看亚 | 亚洲精品国产精品国自产在线 | 日韩高清在线观看 | 日韩在线播放网址 | 日本不卡在线观看 | 天天天天天天操 | 欧美精品1区2区 | aaa在线观看 | 亚洲色片网站 | 精品成人一区二区 | 91久久精品 | 龙珠z国语版在线观看 | 亚洲第一视频网 | 男女免费视频网站 | 久久久久久久久久久久久9999 | 男女精品久久 | 九九在线精品视频 | 日本精品视频一区二区三区四区 | 亚洲最大av| 狠狠干影院 | 野狼在线社区2017入口 | 欧美日韩久久精品 | 久久中文字幕一区 |