基于单片机的交通灯信号控制器设计(含源程序和电路图)

[09-11 23:01:37]   来源:http://www.88dzw.com  单片机学习   阅读:8906

文章摘要:在初始化变量与寄存器后,主程序进入一个循环结构,在循环中只做动态扫描的工作,根据东西、南北两向的剩余时时间进行动态扫描显示。 计时以及状态的切换通过定时器的中断服务程序来实现,在中断服务程序中,每计时到一秒时,则各方向当前状态的剩余时间减1,一直减到0时触发下一个状态的开始,改变交通灯的指示。 ③程序流程(4)软硬件调试方案 软件调试方案:伟福软件中,在“文件\新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件\新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。 在 “项目\编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.

基于单片机的交通灯信号控制器设计(含源程序和电路图),标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
在初始化变量与寄存器后,主程序进入一个循环结构,在循环中只做动态扫描的工作,根据东西、南北两向的剩余时时间进行动态扫描显示。
    计时以及状态的切换通过定时器的中断服务程序来实现,在中断服务程序中,每计时到一秒时,则各方向当前状态的剩余时间减1,一直减到0时触发下一个状态的开始,改变交通灯的指示。
 ③程序流程

(4)软硬件调试方案
     软件调试方案:伟福软件中,在“文件\新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件\新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。
 在 “项目\编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.hex”和“*.bin” 后缀的目标文件。
硬件调试方案:在设计平台中,将单片机的P3.0-P3.5分别与独立式键盘的相应位通过插线连接起来。
在伟福中将程序文件编译成目标文件后,运行“MCU下载程序”,选择相应的flash 数据文件,点击“编程”按钮,将程序文件下载到单片机的Flash中。
然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试题的内容。

3.2.2  程序设计(仅供参考的C语言源程序)
//晶振:11.0592M  T1-250微秒溢出一次
/*变量的定义:
  show_val_sn,show_val_ew:  显示的值0-59
  state_val_sn,state_val_ew: 状态值 南北方向0-绿灯亮;1-黄灯亮;2-红灯亮
  T1_cnt:    定时器计数溢出数
  cnt_sn,cnt_ew:   倒计时的数值
  init_sn[3],init_ew[3] 倒计时
  led_seg_code:数码管7段码
*/
#include "reg51.h"
sbit SN_green=P3^2 ;//南北方向绿灯
sbit SN_yellow=P3^1 ;//南北方向黄灯
sbit SN_red=P3^0 ;//南北方向红灯
sbit EW_green=P3^5 ;//东西方向绿灯
sbit EW_yellow=P3^4 ;//东西方向黄灯
sbit EW_red=P3^3 ;//东西方向红灯
unsigned char data cnt_sn,cnt_ew;
unsigned int  data T1_cnt;
unsigned char data state_val_sn,state_val_ew;
char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char code init_sn[3]={24,4,29};
char code init_ew[3]={29,24,4};
//------------------------
void delay(unsigned int i)//延时
{  while(--i);  }
//------------------------
void led_show(unsigned int u,unsigned int v)
{ unsigned char i;
  i=u%10;       //暂存个位
  P0=led_seg_code[i];
  P2=0xbf;
  delay(100);  //延时
  i=u%100/10;   //暂存十位
  P0=led_seg_code[i];
  P2=0x7f;
  delay(100);  //延时
  i=v%10;       //暂存个位
  P0=led_seg_code[i];
  P2=0xfe;
  delay(100);  //延时
  i=v%100/10;   //暂存十位
  P0=led_seg_code[i];
  P2=0xfd;
  delay(100);  //延时
}
//-------------------------
void  timer1() interrupt 3     //T1中断
{ T1_cnt++;
  if(T1_cnt>3999)      //如果计数>3999, 计时1s
  {  T1_cnt=0;
     if (cnt_sn!=0) //南北方向计时
     { cnt_sn--; }
     else

上一页  [1] [2] [3] [4]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行