导航:首页 > 操作系统 > 一个红绿黄灯单片机程序

一个红绿黄灯单片机程序

发布时间:2023-06-04 23:18:17

A. 设计一个以单片机为核心的交通灯控制器。 要求红黄绿灯,各自闪烁时间可任意修改 求单片机汇编语言

实验内容:用并口实现模拟交通灯;

要求:

东西向的绿灯亮,接着该方向的黄灯闪烁5次,然后红灯亮;同时南北向的绿灯亮,接着该方向的黄灯闪烁5次,然后红灯亮;如此重复。转向灯可以不需要。

#include<reg51.h>

sbitr1=P2^0;

sbity1=P2^1;

sbitg1=P2^2;

sbitr2=P2^3;

sbity2=P2^4;

sbitg2=P2^5;

voidDelay(unsignedi)

{

unsignedintj;

for(;i>0;i++)

for(j=0;j<125;j--)

简明派{;}

}

voidmain()

{

unsignedchari;

while(1)

{

g1=0;

r2=0;

Delay(2000);

g1=1;

for(i=5;i>0;i--)

{

y1=0;

Delay(500);

槐拿y1=1;

Delay(500);

}

r2=1;

r1=0;

g2=0;

Delay(2000);

g2=1;

for(i=5;i>0;i--)

{y2=0;

Delay(500);

y2=1;

Delay(500);

}

拦贺r1=1;

}

}

B. 单片机C语言红绿灯程序,要求:数码管显示时间倒计时、16*16LED点阵显示模块显示红绿黄灯、

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define BLKN 2 //列锁存器数
sbit G = P1^7; //P1.7为显示允许控制信号端口
sbit RCLK = P2^0; //P2.0为输出锁存器时钟信号端
sbit SCLR = P2^1; //P2.1为移位寄存器清○端
void delay(uint); //延时函数
uchar data display[32]; //显示缓存
uchar code BMP[][32]={{16,0,16,0,37,248,36,64,120,64,8,64,16,64,32,64,124,64,0,64,0,64,12,64,112,64,3,252,0,0,0,0},
{16,0,19,240,32,16,41,240,120,16,19,252,32,64,122,72,1,80,0,224,25,80,102,76,0,64,1,192,0,0,0,0},
{4,64,4,64,63,248,4,64,127,252,1,0,31,240,17,16,31,240,17,16,31,240,8,32,16,16,32,8,0,0,0,0}}; //字模表'红‘’绿‘‘黄’
void main()
{
register uchar i,j;
SCON=0x00; //串口工作模式0:移位寄存器方式
TMOD=0x01; //定时器T0工作方式1:16位方式
P1=0x3f; //P1端口初值:允许接收、锁存、显示
TR0=1; //启动定时器T0
ET0=1; //允许定时器T0中断
EA=1; //开启总中断;
while(1)
{
delay(2000);
for(j=0;j<3;j++)
{
for(i=0;i<32;i++)
{
display[i]=~BMP[j][i];
if (i%2) delay(100);
}
delay(10000);
}
}
}
void delay(uint x)
{
register uchar i,j;
for (i=x;i>0;i--)
for (j=120;j>0;j--);
}
void leddisplay(void) interrupt 1 using 1
{
register uchar i, j=BLKN;
TH0 =(65536-100)/256; //设定显示屏刷新率每秒60帧
TL0 =(65536-100)%256;
i = P1; //读取当前显示的行号
i = ++i & 0x0f; //行号加1,屏蔽高4位
while(j)
{
j--;
SBUF = display[i*BLKN + j]; //送显示数据
while (!TI);
TI = 0;
} //完成一行数据的发送
G = 1; //消隐(关闭显示)
P1 &= 0xf0; //行号端口清○
RCLK = 1; //显示数据打入输出锁存器
P1 |= i; //写入行号
RCLK = 0; //锁存显示数据
G = 0; //打开显示
}

C. 单片机控制红黄绿灯汇编程

RED bit P1.4
YEL bit P1.5
GRE bit P3.6

ORG 0000H
CLR RED ;低电平发光
SETB GRE
CALL DL1S
CALL DL1S
CALL DL1S
CALL DL1S

SETB RED
CLR YEL ;低电平发光
CALL DL1S
CALL DL1S

CLR YEL ;低电平发光
CLR GRE ;低电平发光
CALL DL1S

SETB YEL
CALL DL1S
CALL DL1S
CALL DL1S
CALL DL1S

SJMP 0000H

DL1S:
;略,因为题目没有提供晶振频率
RET

END

D. 求大神解答,用51单片机汇编语言实现一个红绿灯的程序,不是一个路口的,大概注释下就好

;------------------------------------

;程序实现功能

;西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。

;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。

;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。

;工作寄存器及存储单元分配

;1.工作寄存器

;R2设置为定时器定时中断次数,R6、R7用于延时程序中的寄存器

;2.片内存储单元

;30H、31H作为两组数码管显示数据存储单元;32H、33H作为交通灯初始状态存储单元;40H、41H作为交通灯显示数据存储单元

;3.标志位

;00H:南北通行标志位 ; 01H:东西通行标志位;02H:紧急事件标志位

;-----------------------------------

SNF EQU 00H ;;;南北通行标志位

EWF EQU 01H ;;;东西通行标志位

URF EQU 02H ;;;紧急事件标志位

ORG 0000H

LJMP MAIN ;;;上电转主程序

ORG 000BH ;;;定时中断入口

LJMP DSZD

ORG 0003H ;;;紧急中断入口

LJMP URZD

ORG 0030H

MAIN: LCALL INIT ;;;调用初始化子程序

LOOP: LCALL DIS ;;;循环执行显示子程序

AJMP LOOP

;///////////初始化程序

INIT: SETB SNF

SETB EWF

SETB URF

MOV R2,#20 ;;;定时器中断20次为1s

MOV TMOD,#01H ;;;初始化定时器

MOV TL0,#0B0H

MOV TH0,#3CH

SETB EA ;;;开定时中断与紧急中断

SETB ET0

SETB TR0

SETB EX0

SETB IT0 ;;;设置中断程控方式

MOV DPTR,#TAB ;;;数值首地址放入DPTR中

MOV 40H,#40 ;;;东南西北通行时间设置

MOV 41H,#40

MOV 30H,#40 ;;;通行时间初始化

MOV 31H,#60

MOV P0,#4CH ;;;初始化时南北通行并把交通灯状态分别放在32H和33H中

MOV 32H,#4CH

MOV P2,#15H

MOV 33H,#15H

RET

;////////////显示子程序

DIS: MOV P3,#0DFH ;;;选中南北方向的十位数码管

MOV A,30H ;;;把显示数据送人数码管显示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A ;;;

LCALL D1MS

MOV P3,#0EFH ;;;选中南北方向的个位数码管

MOV A,B ;;;送入数码管显示

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#7FH ;;;选中第东西方向的十位数码管

MOV A,31H ;;;送入数码管显示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#0BFH ;;;选中第东西方向的个位数码管

MOV A,B

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

SETB P3.0

SETB P3.1

JNB P3.0,DIS_S ;;;查询是否第一个按键按下

JNB P3.1,DIS_E ;;;查询是否第二个按键按下

AJMP DIS_R ;;;没有键按下则返回

DIS_S:LCALL D5MS ;;;按键去抖

JNB P3.0,DIS_SN

AJMP DIS_R

DIS_SN:MOV 40H,#50 ;;;对通行时间从新分配,南北通行时间加长

MOV 41H,#30

AJMP DIS_R

DIS_E:LCALL D5MS ;;;按键去抖

JNB P3.1,DIS_EW

AJMP DIS_R

DIS_EW:MOV 40H,#30 ;;;东西通行时间加长

MOV 41H,#50

DIS_R:RET

;///////定时中断处理程序

DS_C: LJMP DS_R ;;;接力跳转

DSZD: PUSH ACC ;;;保护现场

PUSH PSW

CLR TR0 ;;;关定时器及中断标志位并重新赋值

CLR TF0

MOV TL0,#0B0H

MOV TH0,#3CH

DJNZ R2,DS_C ;;;判断1m时间是否到达

MOV R2,#20 ;;;到达重新赋值

DEC 30H ;;;南北方向通行时间减一

MOV A,30H ;;;把减一后的时间送入显示存储单元

;;;;;;;南北通行到达最后4秒时黄灯闪烁

DS_10:CJNE A,#4,DS_11 ;;;如果通行时间剩余4秒

JNB SNF,DS_11 ;;;判断是否是南北通行

MOV P0,#8AH

MOV 32H, #8AH ;;;把交通灯状态存入存储单元(后面类似)

DS_11:CJNE A,#3,DS_12 ;;;不是剩余3秒,返回

JNB SNF,DS_12 ;;;不是南北通行时间,返回

MOV P0,#88H

MOV 32H, #88H

DS_12:CJNE A,#2,DS_13

JNB SNF,DS_13

MOV P0,#8AH

MOV 32H, #8AH

DS_13:CJNE A,#1,DS_14

JNB SNF,DS_14

MOV P0,#88H

MOV 32H, #88H

;------------------------

DS_14:JNZ DS_NE ;;;通行时间没有结束转向改变东西方向的数码管

CPL SNF ;;;如果通行时间结束则对标志位取反

JNB SNF,DS_1 ;;;判断是否南北通行

MOV 30H,40H ;;;是,点亮相应的交通灯

MOV P0,#4CH

MOV 32H,#4CH ;;;存储交通灯状态

MOV P2,#15H

MOV 33H, #15H ;;;存储交通灯状态

DS_NE:DEC 31H ;;;东西方向通行时间减一

MOV A,31H ;;;把通行剩余时间送入显示存储单元

;;;;;;;;东西方向通行时间剩余4秒钟黄灯闪烁(程序注释与南北方向类似 略)

DS_20:CJNE A,#4,DS_21

JB EWF,DS_21

MOV P0,#51H

MOV 32H, #51H

DS_21:CJNE A,#3,DS_22

JB EWF,DS_22

MOV P0,#41H

MOV 32H, #41H

DS_22:CJNE A,#2,DS_23

JB EWF,DS_23

MOV P0,#51H

MOV 32H, #51H

DS_23:CJNE A,#1,DS_24

JB EWF,DS_24

MOV P0,#41H

MOV 32H, #41H

;-----------------------------

DS_24:JNZ DS_R ;;;东西方向时间没有结束,返回

CPL EWF ;;;对通行状态取反

JNB EWF,DS_2 ;;;东西方向通行时间到来,跳转

MOV 31H,#80 ;;;东西方向通行结束,重新显示时间

MOV P0,#89H ;;;点亮相应的交通灯

MOV 32H, #89H

MOV P2,#29H

MOV 33H, #29H

AJMP DS_R

DS_1: MOV 30H,#80 ;;;南北通行时间结束,重新对显示存储单元赋值

MOV P0,#89H ;;;执行转弯状态1

MOV 32H, #89H

MOV P2,#26H

MOV 33H, #26H

AJMP DS_NE

DS_2: MOV 31H,41H ;;;东西方向开始通行,赋值予显示存储单元

MOV P0,#61H ;;;点亮相应的交通灯

MOV 32H, #61H

MOV P2,#15H

MOV 33H, #15H

DS_R: SETB TR0

POP PSW ;;;恢复现场

POP ACC

RETI

;/////////////紧急中断处理程序

URZD: PUSH ACC ;;;保护现场

PUSH PSW

CLR IE0 ;;;清除中断标志位

CLR TR0 ;;;关定时器

CPL URF ;;;紧急事件标志位

JB URF,UR_CON ;;;紧急结束;跳转

MOV P0,#49H ;;;各路口灯全显示红灯亮

MOV P2,#15H

AJMP UR_R

UR_CON:SETB TR0 ;;;恢复正常交通

MOV A,32H

MOV P0,A

MOV A,33H

MOV P2,A

UR_R: POP PSW ;;;恢复现场

POP ACC

RETI

;////////////查表指令0,1,2,3,4,5,6,7,8,9

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH

DB 7DH, 07H, 7FH, 6FH

;//////////延时5ms与1ms

D5MS: MOV R7,#5

D1MS: MOV R7,#10

MOV R6,#50

L1: DJNZ R6,$

DJNZ R7,L1

RET

E. 89C51单片机红绿灯程序是什么

注p0口为东西红灯x0dx0a; p1口为东西黄灯x0dx0a;p2口为东西绿灯x0dx0a;p3南北红灯x0dx0a;p4南北黄灯x0dx0a;p5南北绿灯x0dx0ax0dx0a;绿灯停留3s;黄灯闪烁5次,每次0.2s,红的停留4s x0dx0aORG 0000Hx0dx0a LJMP MAINx0dx0a ORG 0030Hx0dx0aMAIN:MOV DPTR,#B1x0dx0a MOV R2,#4x0dx0a MOV A,#0Hx0dx0aF3:MOV R1,Ax0dx0a MOVC A,@A+DPTRx0dx0a JNB ACC.4,SS1 ;判断东西方向黄灯是否亮,若亮则转移到黄灯闪烁程序x0dx0a JNB ACC.1,SS2 ;判断南北方向黄灯是否亮,若亮则转移到黄灯闪烁程序x0dx0a MOV P1,Ax0dx0a LCALL DY1Sx0dx0aSS:MOV A,R1x0dx0a INC Ax0dx0a DJNZ R2,F3x0dx0a SJMP MAINx0dx0ax0dx0aSS1:MOV R0,#10x0dx0aXH1:CPL ACC.4x0dx0a MOV P1,Ax0dx0a LCALL DYSx0dx0a DJNZ R0,XH1x0dx0a SJMP SSx0dx0aSS2:MOV R0,#10x0dx0aXH2:CPL ACC.1x0dx0a MOV P1,Ax0dx0a LCALL DYSx0dx0a DJNZ R0,XH2x0dx0a SJMP SSx0dx0ax0dx0aDY1S:MOV R5,#30x0dx0aDLP0:MOV R6,#100x0dx0aDLP1:MOV R7,#250 ;F=6MHZx0dx0aDLP2:DJNZ R7,DLP2 ;2X250X2uS=1msx0dx0a DJNZ R6,DLP1 ;1x100=0.1Sx0dx0a DJNZ R5,DLP0 ;0.1X30=3sx0dx0a RETx0dx0ax0dx0aDYS:MOV R6,#200x0dx0aDLP3:MOV R7,#250 ;F=6MHZx0dx0aDLP4:DJNZ R7,DLP4 ;2X250X1uS=500us=1msx0dx0a DJNZ R6,DLP3 ;1x200=0.2Sx0dx0a RETx0dx0aB1: DB 11011110B,11101110B,11110011B,11110101Bx0dx0a END

F. 单片机交通灯汇编语言程序,只需红黄绿灯顺序亮就行了

#include<reg51.h>

#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)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//交通灯切换

void Traffic_Light()

{

switch(Operation_Type)

{

case1: //东西向绿灯与南北向红灯亮

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_Type=2;

break;

case2: //东西向黄灯闪烁,绿灯关闭

DelayMS(300);

YELLOW_A=~YELLOW_A;GREEN_A=1;

if(++Flash_Count!=10)return; //闪烁5次

Flash_Count=0;

Operation_Type=3;

break;

case3: //东西向红灯,南北向绿灯亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

Operation_Type=4;

break;

case4: //南北向黄灯闪烁5次

DelayMS(300);

YELLOW_B=~YELLOW_B;GREEN_B=1;

if(++Flash_Count!=10)return;

Flash_Count=0;

Operation_Type=1;

}

}

//主程序

void main()

{

while(1)Traffic_Light();

}

G. 51单片机交通灯红灯绿灯19秒黄灯闪烁三秒

51单片机交通灯红灯绿灯19秒黄灯闪烁三秒可以采用4行4列的矩阵开关显示。用单片机做一交通信号灯控制装置,要求A东西绿灯亮5秒后闪2秒熄灭,黄灯闪2秒后熄灭,红灯亮9秒,B南北绿灯亮5秒后闪2秒熄灭,黄灯闪2秒后熄灭,红灯亮9秒C循环10个开关,2个控制交通灯,共输出3种状态红、绿、黄、全灭。其中全灭开关状态为00,黄灯开关状态为01,绿灯开关状态为10,红灯状态为11.8个开关控制两位数码管,数码管采用7段数码管,2位数码管共14段显示。可以采用4行4列的矩阵开关显示。这样正好需要8个开关。每个数码管可显示0-9.例如交通灯规律是绿灯40秒,闪烁4秒(也就是绿灯和全灭间隔显示),黄灯3秒,红灯20秒。

H. 关于单片机简单的红绿灯程序问题

代码修改如下,经keil编译,proteus仿真结果为 P1.0亮10秒,然后P1.1亮2秒,然后P1.2亮10秒,最后P1.0亮10秒,,,

#include<reg51.h>
sbitR=P1^0;//HONG
sbitW=P1^1;//HUANG
sbitL=P1^2;//LV
unsignedinta,b=0;
//unsignedcharcodec[]={0xfe,0xfc,0xfb};//1110,1100,1011
unsignedcharcodec[]={0xfe,0xfD,0xfb,0xfd};//1110,1101,1011,1101//红黄绿黄//修正黄灯的值,增加一个状态
voidtimer10s()interrupt1
{

if(a<2000)
{
TH0=0xec;//5ms
TL0=0x78;
a++;
//b=0;//这里不能对b赋值
TR0=1;
TR1=0;//【增加】
}
if(a>=2000)
{
TH0=0xec;
TL0=0x78;
a=0;
b++;//b=1;
if(b==4)b=0;//【增加】
TR1=1;
TR0=0;//【增加】
}
}
voidtimer2s()interrupt3
{

if(a<400)
{
TH1=0xec;
TL1=0x78;
a++;
TR1=1;
TR0=0;
}
if(a>=400)
{
TH1=0xec;
TL1=0x78;
a=0;
b++;//b=2;
//
if(b==4)b=0;//【增加】
TR0=1;
TR1=0;//【增加】
}
}
voidmain()
{
EA=1;
ET0=1;
ET1=1;
TMOD=0X11;
TH0=0xec;//5MS
TL0=0x78;
TH1=0xec;
TL1=0x78;
TR0=1;
TR1=0;
P1=c[0];
b=0;////【增加】
while(1)
{
switch(b)
{
case0x00:P1=c[0];break;
case0x01:P1=c[1];break;
case0x02:P1=c[2];break;
case0x03:P1=c[3];break;//增加一个状态
}
}
}

以上代码可以优化,如下:


#include<reg51.h>
sbitR=P1^0;//HONG
sbitW=P1^1;//HUANG
sbitL=P1^2;//LV
unsignedinta,b=0;
unsignedcharcodec[]={0xfe,0xfD,0xfb,0xfd};
voidtimer10s()interrupt1
{
TH0=0xec;//5ms
TL0=0x78;
a++;
if(TR1==1)TR1=0;

if(a>=2000)
{
a=0;
b++;
if(b==4)b=0;
TR1=1;
TR0=0;
}
}
voidtimer2s()interrupt3
{
TH1=0xec;
TL1=0x78;
a++;
if(TR0==1)TR0=0;

if(a>=400)
{
a=0;
b++;
if(b==4)b=0;
TR0=1;
TR1=0;
}
}
voidmain()
{
EA=1;
ET0=1;
ET1=1;
TMOD=0X11;
TH0=0xec;//5MS
TL0=0x78;
TH1=0xec;
TL1=0x78;
TR0=1;
TR1=0;
a=0;//
b=0;//
while(1)
{
switch(b)
{
case0x00:P1=c[0];break;
case0x01:P1=c[1];break;
case0x02:P1=c[2];break;
case0x03:P1=c[3];break;
}
}
}
阅读全文

与一个红绿黄灯单片机程序相关的资料

热点内容
时间算法与现在有什么区别 浏览:160
7zip解压后没文件夹 浏览:900
为什么安卓送玫瑰ios收不到 浏览:6
美篇文章加密是什么意思 浏览:80
ilasm编译dll 浏览:36
呼吸灯单片机程序 浏览:950
linux域socket 浏览:246
qq分身怎么样才能加密 浏览:453
windows打开linux 浏览:995
新建文件夹为什么不能发送微信 浏览:600
交警app怎么绑定本人几辆车 浏览:985
彩虹六号如何人工服务器 浏览:632
mc服务器地址怎么登入 浏览:556
苹果app怎么扫描二维码下载 浏览:961
css文件在线解压 浏览:156
36岁程序员近况 浏览:285
哪里可以下载不加密的歌 浏览:936
隐藏文件夹是什么梗 浏览:920
插件注册命令 浏览:498
梁一端加密一端不加密规范 浏览:84