设计方案一、实训名称;单片机实训二、基本功能; 设计一个交通灯, 模型, 通过红,黄, 绿三色发光二极管仿真红绿交通灯,三色光的状态按照实际的交通灯处理, 各色灯的显示时间自行定义, 能够通过 LED 显示当前状态时间倒计时显示。扩展功能;各色灯的时间可以通过按键来进行修改。三、任务分析 1 一般情况下由南北和东西组成的十字路口,南北道放行 13秒(数码管从 13 秒开始倒数,其中 3 秒用于黄灯时间) ,东西道放行 10 秒(两个数码管从 13 秒开始倒数,其中 3 秒用于黄灯时间)。 2 、编程过程: 显示界面: 采用数码管和 LED 灯相结合的方法, 因为实际既要求倒计时施主输出, 又要求又状态灯输出等, 为方便观看并考虑到现实状况, 用2 个共阴极数码管与 12 个 LED 分别显示时间和灯提示信息。控制端口``0/ 用 p1 口来控制红绿灯的变化 1、用 p3 口来控制数码管的显示 2、用 p2 端口 3、用 p2 口的低四位来控制按键端口 4、用共阴极数码管来显示倒计时 5、 P1 口用低电平点亮灯, 6、设计思路; 51 单片机来作为主控,根据电平的变换来控制红绿灯的状态,时间用数码管的显示来控制, 7、设一个十字路口的初始状态 1 :南北绿灯亮,东西红灯亮;持续一段时间然后转状态 2: 南北绿灯变成黄灯亮, 东西红灯亮; 过后转状态, 持续一段时间 3 :东西绿灯亮,南北红灯亮;持续一段时间再转状态 4 :东西绿灯变成黄灯亮,南北红灯亮。一段时间后,又循环至状态 1。中间可通过中断按键产生中断, 跳入中断程序执行中断。按键方面我用了三个, 一个用来南北、东西互换是时候用来调整红绿灯的状态时间用其他两按键来控制,实现调整。 7 、交通信号灯的状态表如下: (其中, 0 代表灯亮, 1 代表灯灭) 1) P1口: 做为输出口, 与发光二极管相连接, 其状态及对应的十六进制值如下: 方向状态无南北东西十六进制值说明 1 0 0 0 1 1 1 1 0 0x6c 南北绿东西红 2 0 0 1 0 1 1 1 0 0xac 南北黄东西红 3 0 0 1 1 0 0 1 1 0xd8 东西绿南北红 4 0 0 1 1 0 1 0 1 0xd4 东西绿南北黄 2) 对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的, 因此, 采用单片机内部的 I/O 口上的 P1 口中的 6 个引脚即可来控制 12 个信号灯。 3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。每延时一段时间, 灯的显示情况都会按交通灯的显示规律进行状态转换。 4、通过延时时间来实现倒计时显示器,增添和减少显示时间来实现其倒计时和灯持续的时间。 5 、共阴极:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地。这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不亮。 4 控制数码管驱动级的控制电路有静态式和动态式两类: 5 静态驱动:它是指每个数码管都要用一个译码器译码驱动。 6 动态驱动:它是所的数码管使用一个专门的译码驱动器,使各位数码管逐个轮流显示,延时时间比较短所以显示出来电路图红绿灯的源程序#include<> 1=P2^7; // 端 2=P2^6; 3=P2^5; 4=P2^4; sbit k1=P2^3; // 定义开关端口 sbit k2=P2^1; sbit k3=P2^0; unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; // 数码管的代码显示 unsigned char num=0,num1,temp1=10,temp2=13,flag;// 定义变量 void delay(); // 定义延时 void scanfkey(); // 定义按键控制 void display(); // 定义调用程序 unsigned char m1=10,m2=13,m3=13,m4=10,a,b,c,d;// 全局变量的定义 void main() { TMOD=0X01; // 定时计数器工作在方式一 TH0=(65535-50000)/256; // 定义定时计数器每次执行运行 50MS TL0=(65535-50000)%256; ET0=1; // 允许 T0 中断开始 EA=1; //cpu 工作 TR0=1; // 1=1; // 2=1; com3=1; com4=1; P1=0x6c; /
红绿灯源程序 来自淘豆网m.daumloan.com转载请标明出处.