新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機實現(xiàn)交通燈控制系統(tǒng)的雙模式

單片機實現(xiàn)交通燈控制系統(tǒng)的雙模式

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

本文引用地址:http://m.butianyuan.cn/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) // 延時函數(shù)

  { uchar x,y;

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

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

  void init()

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

  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;}

  定時的函數(shù)及原理:

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

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

  則應裝入計數(shù)/定時器的初值為:

  

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

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

  顯示子函數(shù):

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

  void display(shi,ge)

  { dula=1;

  P0=table[shi];

  dula=0;

  wela=1;

  P0=table1[0];

  wela=0;

  delay(5);

  P0=0xff; // 對數(shù)碼管消影

  dula=1;

  P0=table[ge];

  dula=0;

  wela=1;

  P0=table1[1];

  wela=0;

  delay(5);

  P0=0xff;}

  一函數(shù):

  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 數(shù)碼管數(shù)字減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; } }

  



評論


相關推薦

技術專區(qū)

關閉