82C55控制交通灯

要求:

用STC89C52单片机扩展一片可编程并行I/O口82C55,用8255做输出口,控制十二个发光二极管亮灭,模拟交通灯的管理。
初始状态:红灯全亮,黄、绿灯灭。
第一状态:1,3路口的绿灯全亮,2、4路口红灯亮。
第二状态:1,3路口绿灯灭,黄灯开始闪烁。
第三状态:1,3路口红灯亮,2,4路口绿灯亮。
第四状态:2,4路口绿灯熄灭,而黄灯闪烁。

C语言:

#include <reg52.h>
#define uint unsigned int 
#define uchar unsigned char
#define XBYTE ((uchar volatile xdata *) 0)
#define COM8255 0XFF7F
#define PORTC8255   0XFF7E

void time(unsigned int _time)
{
    uchar ucCounter,i;
    //for(ucCounter=0;ucCounter<_time;ucCounter++);
    for(ucCounter=0;ucCounter<110;ucCounter++)
    for(i=0;i<_time;i++);

}
void main()
{
    while(1)
    {
    uint i;
    XBYTE[COM8255]=0X80;
    XBYTE[PORTC8255]=0Xc6;
    time(200);
    XBYTE[PORTC8255]=0Xc5;
    time(200);
    for(i=0;i<8;i++)
    {
        XBYTE[PORTC8255]=0XC3;
     time(200);
        XBYTE[PORTC8255]=0XC7;
    time(200);
    }
    XBYTE[PORTC8255]=0Xa6;
    time(200);
    time(200);
    for(i=0;i<8;i++)
    {
        XBYTE[PORTC8255]=0X66;
        time(200);
        XBYTE[PORTC8255]=0XE6;
        time(200);
    }
    }
}

汇编语言:

ORG 0000H
PORTC8255   EQU  0FF7EH     ;8255C
CTRL8255    EQU  0FF7FH     ;8255
NUMB        EQU  08H
MAIN:  MOV A,#80H           ;A,B,C口方式0输出
       MOV DPTR,#CTRL8255   
       MOVX @DPTR,A
       MOV A,#0C6H          ;红灯全亮,绿灯黄灯全灭
       MOV DPTR,#PORTC8255
       MOVX @DPTR,A
       LCALL DL11
START: MOV A,#0C5H          ;1,3路口绿灯全亮,2,4路口红灯亮
       MOVX @DPTR,A
       LCALL DL11
       LCALL DL11
       MOV  R2,#NUMB
LOOP1: MOV A,#0C3H          ;1,3路口黄灯亮
       MOVX @DPTR,A
       LCALL DL12
       MOV A,#0C7H          ;1,3路口黄灯灭
       MOVX  @DPTR,A
       LCALL DL12
       DJNZ R2,LOOP1
       MOV A,#0A6H          ;1,3路口红灯亮,2,4路口绿灯亮
       MOVX @DPTR,A
       LCALL DL11
       LCALL DL11
YELLO24:MOV  R2,#NUMB
LOOP2:  ANL A,#66H          ;2,4路口黄灯亮
        MOVX @DPTR,A
        LCALL DL12          
        MOV  A,#0E6H        ;2,4路口黄灯灭
        MOVX @DPTR,A
        LCALL DL12
        DJNZ R2,LOOP2
        LJMP START

;   
DL11:
        MOV R5,#5H
DL2:    MOV R7,#0FFH
DL3:    MOV R6,#0FFH
DL4:    DJNZ R6,DL4
        DJNZ R7,DL3
        DJNZ R5,DL2
        RET
DL12:
        MOV R7,#0C0H
DL5:    MOV R6,#0FFH
DL6:    DJNZ R6,DL6
        DJNZ R7,DL5
        RET
        END

仿真效果图:
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值