哈尔滨工业大学(威海)
课程实验报告
课程单片机原理及接口技术B
实验题目交通信号灯
学号 110140214
姓名陈鹏
指导教师金涛
2014 年 6 月 30 日
实验一交通信号灯
实验目的
熟悉中断初始化编程方法。
使用的模块
单片机及晶振模块
本实验选用的是Atmel公司的AT89C51单片机,由石英晶体振荡器产生单片机工作时所需的时钟信号,振荡器采用的是12M的晶振,使其机器周期为1us,方便程序的计算和编译。
LED显示模块
该部分由12个LED分成南北,东西两组作为十字路口交通信号灯,每个路口分别有红黄绿三种颜色的LED,同一方向的亮灭状态相同,不同方向的相反。每个LED灯串联一个220Ω的电阻,以限定通过LED的电流。
原理图
步骤简述
连续运行程序,LED显示信号灯状态。程序运行时模拟了十字路口交通信号灯的切换过程与显示效果。
源程序中用6行sbit对东西和南北向的红、黄、绿指示灯分别进行定义,这样便于对它们进行单独控制;交通灯的四种状态由switch case语句进行控制。
此外,可将交通指示灯切换时间设置得较短,这样可在调试的时候较快观察到运行效果,可在调试运行本题目后修改代码,使指示灯切换过程更接近于实际的交通指示灯切换过程。
结果和分析
信号灯状态转换过程:初始状态0为南北红灯,东西绿灯通车;状态1
,东西绿灯灭、黄灯闪烁5次,南北红灯不变;状态2东西红灯,南北绿灯通车;状态3南北绿灯灭、黄灯闪烁5次,东西红灯不变。最后循环到状态0。各个状态的持续时间由程序调定。
程序流程图
开始
系统初始化
东西绿灯亮南北红灯亮
东西黄灯闪烁南北红灯亮
东西南北换向
源程序
#include <> /*头文件*/
#define uchar unsigned char
#define uint unsigned int
/*定义两组红绿黄灯共六个标志位*/
sbit RED_A = P0^0;
sbit YELLOW_A = P0^1;
sbit GREEN_A = P0^2;
sbit RED_B = P0^3;
sbit YELLOW_B = P0^4;
sbit GREEN_B = P0^5;
uchar Flash_Count = 0, Operation_Type=1;
void DelayMS(uint x) /*500ms延迟函数*/
{
uchar i;
while (x--) for (i=0;i<120;i++);
}
void Traffic_Light() /*交通灯函数,包含四个状态*/
{
switch (Operation_Type)
{
case 1: /*东西方向绿灯亮,南北方向红灯亮*/
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELL
单片机 交通信号灯 来自淘豆网m.daumloan.com转载请标明出处.