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

標題: 用51單片機做的交通燈程序+Proteus仿真圖 [打印本頁]

作者: CHL666    時間: 2019-3-4 17:30
標題: 用51單片機做的交通燈程序+Proteus仿真圖
學校的課程設計做的一個小程序,用51單片機做的交通燈。


單片機源程序如下:
  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)



作者: 佳豪爸爸    時間: 2019-5-8 17:31
你好,請問這個芯片除了c51還有個什么芯片?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线一区视频 | 亚洲精品福利视频 | 日本一区二区不卡 | 久久久久久国产精品 | 欧美一级欧美三级在线观看 | 超碰97av| 精品一区二区三区在线观看国产 | 伊人二区 | 黄色在线免费观看视频网站 | 国内在线视频 | av在线天天 | 精品成人 | 成人精品久久 | 午夜影院在线 | 日韩视频中文字幕 | 在线观看日本网站 | 国产激情亚洲 | 久久精品亚洲精品国产欧美kt∨ | 欧美三级成人理伦 | 在线国产视频观看 | 97精品超碰一区二区三区 | 欧美日韩综合视频 | 青青久视频 | 99精品一区二区 | 四虎影音 | 视频在线一区二区 | 国产中文字幕在线观看 | 美女视频一区 | 久久久久久成人 | 精品伊人久久 | 一级片aaa | 免费观看a级毛片在线播放 黄网站免费入口 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 欧美一区二区三区视频 | 国产精品视屏 | 成人久久久久久久久 | 国产精品一区二区三区99 | 久久久一区二区三区四区 | 91黄色免费看 | 国产精品成人一区二区三区 | 美女张开腿露出尿口 |