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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4184|回復: 1
收起左側

用51單片機做的交通燈程序+Proteus仿真圖

[復制鏈接]
ID:328656 發表于 2019-3-4 17:30 | 顯示全部樓層 |閱讀模式
學校的課程設計做的一個小程序,用51單片機做的交通燈。
0.png

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

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define        DIG0 0x01                 
  6. #define DIG1 0x02                 
  7. #define DIG2 0x03                 
  8. #define DIG3 0x04                 // 定義數碼管 1,2,3,4


  9. sbit DIN  = P3^0;                                         //MAX7219 DIN引腳
  10. sbit LOAD = P3^1;                                        //MAX7219 LOAD 引腳
  11. sbit CLK  = P3^2;                                         //MAX7219 CLK 引腳

  12. sbit G1 = P0^0;                                        //A線信號燈
  13. sbit Y1 = P0^1;
  14. sbit R1 = P0^2;
  15.                                                                   
  16. sbit G2 = P1^0;                                        //B線信號燈
  17. sbit Y2 = P1^1;
  18. sbit R2 = P1^2;

  19. uchar NS_S,NS_G,EW_S,EW_G;                                                           //AB線數碼管個位,十位
  20. uchar NS,EW;
  21. uchar temp=0,i;

  22. uchar code table[10]= {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};                //共陰級數碼管數組

  23. void delay(uint i);
  24. void T0_init();
  25. void MAX7219(uchar addr,uchar num);
  26. void MAX7219_init();                       
  27. void display();
  28.                                                          
  29. void delay(uint i)                                                                                 //延時
  30. {
  31.         uint j;
  32.         for(j=0;j<i;j++);
  33. }

  34. void T0_init()                                                                                          //定時器
  35. {                                                         
  36.         TMOD=0X01;                                                                                  
  37.         TH0=0XD8;                                                                                  //裝初值10MS
  38.         TL0=0XF0;
  39.         ET0=1;
  40.         TR0=1;
  41. }
  42. void MAX_write(uchar ch)                                                //以8位一個字節進行寫值
  43. {
  44.         uchar j,ads;
  45.             for(j=0;j<8;j++)                                           //8位
  46.                 {
  47.                               ads=ch&0x80;                                //取最高位
  48.                               CLK = 0;                                               //時鐘位置低
  49.                               if(ads)  DIN = 1;
  50.                               else     DIN = 0;                                               
  51.                               ch=ch<<1;                                                        
  52.                               CLK=1;                                       //上升沿,DIN的數據寫入到7219
  53.                     }
  54. }
  55. void MAX7219(uchar addr, uchar num)                        //寫地址,寫數據
  56. {
  57.     LOAD = 0;         
  58.         _nop_();
  59.     MAX_write(addr);
  60.          _nop_();
  61.     MAX_write(num);  
  62.          _nop_();
  63.     LOAD = 1;                                                  //鎖存
  64. }                                                                           

  65. void MAX7219_init()                                                                         //MAX7219初始化
  66. {                                                                                       
  67.     MAX7219(0x0c,0x01);                                  //正常工作狀態
  68.     MAX7219(0x0b,0x03);                                  //設置掃描范圍SMG0-3
  69.     MAX7219(0x0a,0x05);                                  //設置亮度11/32
  70.     MAX7219(0x09,0x00);                                  //采用譯碼方式 ,不譯碼
  71. }
  72. void display()                                                         //顯示函數
  73. {
  74.         NS_S=NS/10;                              //A線十位                     
  75.         NS_G=NS%10;                                                        //A線個位

  76.         EW_S=EW/10;                         //B線十位         
  77.         EW_G=EW%10;                                                        //B線個位

  78.         MAX7219(DIG0,table[NS_S]);          //A線十位,個位        
  79.             MAX7219(DIG1,table[NS_G]);                                       
  80.                    MAX7219(DIG2,table[EW_S]);          //B線十位,個位
  81.             MAX7219(DIG3,table[EW_G]);
  82. }

  83. void main()
  84. {
  85.         T0_init();
  86.         MAX7219_init();
  87.         EA=1;
  88.         NS=15;                                                                  
  89.         EW=18;                                                                  
  90.                    R2=0,G1=0;                                            //初始通行15秒,A線綠燈亮,B線紅燈亮
  91.                 while (1)
  92.         {
  93.                 uint k;
  94.                 display();        
  95.                               switch(i)                                                                         //選擇信號燈的亮滅方式
  96.                        {
  97.                               case 1: G1=1;Y1=0;                       //關閉A線綠燈,黃燈閃爍
  98.                                       for(k=0;k<3;k++)
  99.                                         {
  100.                                                                         R2=0;
  101.                                               Y1=~Y1;                                                      
  102.                                               delay(10000);
  103.                                            }     
  104.                                                                           R2=1;break;
  105.                               case 2: G2=0,R1=0;break;                    //B線綠燈亮,A線紅燈亮
  106.                               case 3: G2=1,Y2=0;                                //關閉B線綠燈,黃燈閃爍
  107.                                       for(k=0;k<3;k++)                       
  108.                                 {
  109.                                                                 R1=0;
  110.                                                Y2=~Y2;
  111.                                     delay(10000);
  112.                                 }
  113.                                                                 R1=1;break;
  114.                               case 4: R2=0,G1=0;break;                        //B線紅燈亮,A線綠燈亮
  115.              }                        
  116.          }
  117. }

  118. void T0_(void)interrupt 1                                  //中斷
  119. {
  120.           temp++;
  121.           TH0=0XD8;
  122.           TL0=0XF0;
  123.           if(temp==100)                                                          //1s進入
  124.             {
  125.                       temp=0;
  126.                       NS--;
  127.                       EW--;
  128.                      if((NS==0)&&(EW==3))                        //A線倒計時時間結束且B線剩余3s
  129.                        {
  130.                                    NS=3;
  131.                                 EW=3;
  132.                           i=1;
  133.                        }
  134.                      if((NS==0)&&(EW==0)&&(i==1))        //AB線倒計時時間結束且剛結束第一種情況
  135.                  {       
  136.                           NS=18;
  137.                           EW=15;
  138.                           i=2;
  139.                  }
  140.                       if((NS==3)&&(EW==0))                         //B線倒計時時間結束且A線剩余3s
  141.                  {
  142.                                  NS=3;
  143.                                  EW=3;
  144.                           i=3;
  145.                  }
  146.                       if((NS==0)&&(EW==0)&&(i==3))         //AB線倒計時時間結束且剛結束第三種情況
  147.                  {
  148.                           NS=15;
  149.                           EW=18;
  150.                           i=4;
  151.                  }
  152.         }
  153.       display();
  154. }
復制代碼

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

評分

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

查看全部評分

回復

使用道具 舉報

ID:530358 發表于 2019-5-8 17:31 | 顯示全部樓層
你好,請問這個芯片除了c51還有個什么芯片?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品欧美精品 | 天天干夜夜操视频 | 九七午夜剧场福利写真 | 亚洲欧美成人 | 精品视频一区二区三区在线观看 | 国产精品嫩草影院精东 | 日韩av在线一区 | 国产高清在线 | 国产精品一卡 | 久久久久久国产一区二区三区 | 久久成人av | 综合网中文字幕 | 国产黄色大片在线免费观看 | 日韩在线 | 全免一级毛片 | 在线观看黄色大片 | 中文字幕爱爱视频 | 91色综合 | 中文字幕在线播放不卡 | 欧美亚洲另类丝袜综合网动图 | 国产激情网站 | 亚洲色图综合 | 国产日日操| 久久夜夜 | 精品国产乱码久久久久久闺蜜 | 日韩成人一区 | 欧美欧美欧美 | 日本高清中文字幕 | www狠狠干 | 亚洲一区二区成人 | 超碰欧美 | 日韩字幕一区 | 91成人免费| 97在线播放 | 中文字幕人成乱码在线观看 | 国产a视频 | 伊人网一区 | av影音资源| 精品国产欧美 | 亚洲欧美日韩电影 | 日韩成人在线免费视频 |