新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机实现交通灯控制系统的双模式

单片机实现交通灯控制系统的双模式

作者: 时间:2011-09-09 来源:网络 收藏
初始函数主要是对定时/计数器和一些参数初值的设定:

本文引用地址://m.amcfsurvey.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; } }



评论


相关推荐

技术专区

关闭