新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機實現交通燈控制系統的雙模式

        單片機實現交通燈控制系統的雙模式

        作者: 時間:2011-09-09 來源:網絡 收藏
        初始函數主要是對定時/計數器和一些參數初值的設定:

        本文引用地址:http://www.104case.com/article/172507.htm

          #include

          #define uint unsigned int

          #define uchar unsigned char

          uint aa,num,MODEL1,numa,HMODE1;

          uchar shi,ge,gtime,rtime;

          … …

          sbit dula=P1^0; // 段選

          sbit wela=P1^1; // 位選

          sbit LED1=P1^2; // 東西(紅燈)

          sbit LED2=P1^5; // 南北(紅燈)

          sbit LED3=P1^6; // 南北(黃燈)

          sbit LED4=P1^3; // 東西(黃燈)

          sbit LED5=P1^7; // 南北(綠燈)

          sbit LED6=P1^4; // 東西(綠燈)

          sbit KEY1=P3^5;

          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

          uchar table1[]={0xbf,0x7f};

          void delay(uchar z) // 延時函數

          { uchar x,y;

          for(x=z;x>0;x--)

          for(y=110;y>0;y--); }

          void init()

          { TMOD=0x01; // 選擇方式一,16 位計數器

          TH0=15536/256;

          TL0=15536%256; // 定時器高、低位,置入初值

          EA=1; // 中斷允許總控制位

          ET0=1; // 定時器0 中斷允許控制位

          TR0=1; // 定時器0 運行控制位

          aa=0;

          gtime=60;

          rtime=40;

          num=1;

          numa=1;

          MODEL1=1;

          HMODE1=0;}

          定時的函數及原理:

          當工作于定時狀態時,定時/計數器對機器周期進行計數,每個機器周期包括12個振蕩周期,以晶振頻率為12MHZ 為例,則:

          1 個機器周期=12/晶振頻率=12/12000000=0.001ms定時時間為:TC=XTP。其中,TP 為機器周期,TC 為定時時間。

          則應裝入計數/定時器的初值為:

          

          (注:M=2n , TP 為機器周期,TC 為定時時間)

          對于方式1,一次最大的定時時間為:T=(216-0)×0.001=65.536ms ,為了便于計算,設定每次最大定時時間為50ms,計算應裝入的初值:N = 65536 − 50000 = 15536

          顯示子函數:

          通過對鎖存器進行位選,段選的控制,使數碼管顯示需要的數字。

          void display(shi,ge)

          { dula=1;

          P0=table[shi];

          dula=0;

          wela=1;

          P0=table1[0];

          wela=0;

          delay(5);

          P0=0xff; // 對數碼管消影

          dula=1;

          P0=table[ge];

          dula=0;

          wela=1;

          P0=table1[1];

          wela=0;

          delay(5);

          P0=0xff;}

          一函數:

          void mod1()

          { if(num==1>ime>5) // 東西道紅燈亮,南北道綠燈亮,最后5 秒切換成黃燈

          { LED5=0;

          LED1=0; }

          if(num==2) // 東西道綠燈亮,南北道紅燈亮

          { LED2=0;

          LED6=0;

          LED5=1;

          LED3=1;

          LED1=1; }

          if(num==1>ime==5) // 東西道紅燈亮,南北道黃燈亮5 秒

          { LED5=1;

          LED2=1;

          LED3=0; }

          shi=gtime/10;

          ge=gtime%10;

          if(aa==20) // 50ms×20=1s, 即過1s 數碼管數字減1

          { aa=0;

          gtime--; }

          display(shi,ge);

          if(gtime==0num!=2)

          { gtime=60;

          num=2; }

          if(gtime==0num==2)

          { num=1;

          gtime=60;

          LED2=1;

          LED6=1; } }

          



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 翁牛特旗| 绥宁县| 长葛市| 台南市| 延庆县| 买车| 通许县| 永康市| 温宿县| 梁山县| 平安县| 伊金霍洛旗| SHOW| 永吉县| 调兵山市| 龙里县| 且末县| 榆社县| 枞阳县| 柘荣县| 罗山县| 铅山县| 仙游县| 寻乌县| 鄂温| 喜德县| 奉新县| 郧西县| 金秀| 汝城县| 获嘉县| 金寨县| 吴旗县| 中牟县| 修文县| 黎城县| 鲁山县| 平乐县| 梁河县| 元氏县| 梁山县|