C语言程序设计编写一个交通红绿灯的控制,各位高手帮帮忙急!

C语言程序设计编写一个交通红绿灯的控制,各位高手帮帮忙急!,第1张

unsigned char counter

sbit red_nb=P2^0

......

void main()

{

TMOD=

TH0

TL0

ET0

TR0

while(1)//根据楼主所给,有4种状态森巧信

{

state1

state2

state3

state4

}

}

void timer0() interrupt 1 /宽稿/定时器0

{

TH0=0x3c

TL0=0xb0

counter++

}

void state1() //控制南北红灯亮,东西绿灯亮此轮,30s

{

unsigned char temp = 30

red_nb=1

.....

green_dx=1

while(1)

{

if( counter>19){counter=0temp--} //每次counter=20,即1s,temp自减

if(temp) break //当temp为0时,即30秒,退出状态1,进入状态2

}

}

没经过测试,完全是5分诱惑不大。。

通灯显示控制

一、前言

(1)通过8255A实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用.

(2)进一步学习微处理器的编程技术.

二、8255的工作原理:

8255有三种方式可以选择:

方式0:基本输入/输出方式;

方式1:樱禅带选通的输入/输出方式

方式2:双向传输方式。卖世

8255为总线兼容型,可以与CPU的总线直接接口。其中,口地址取决于片选CS和A1、A0

如图所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、中颂肢L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程时六个灯按交通灯变化规律燃灭。

交通灯变化要求:

(1)、南北路口的绿灯,东西路口的红灯同时亮30秒左右;

(2)、南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮;

(3)、南北路口的红灯,东西路口的绿灯同时亮30秒左右;

(4)、南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次;

(5)、转(1)重复。

1.硬件原理图如图

2.硬件线路连接

4.流程图

按上面所述过程得出5.程序

DATA SEGMENT

PC DB ?

MESS DB 'ENTER ANY KEY CAN EXIT TO DOS!',0DH,0AH,'$'

DATA ENDS

STACK SEGMENT STACK

STA DW 200 DUP(?)

TOP EQU LENGTH STA

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AH,09H

MOV DX,OFFSET MESS

INT 21H

MOV DX,28BH

MOV AL,10000001B

OUT DX,AL

MOV DX,28AH

IN AL,DX

MOV PC,AL

MOV DX,28BH

MOV AL,10000000B

OUT DX,AL

MOV DX,28AH

MOV AL,PC

MOV DX,28AH

MOV AL,00000000B

OUT DX,AL

LLL: MOV DX,28AH

MOV AL,00100100B 1绿2红

OUT DX,AL

CALL DONE2

CALL DONE2

MOV DX,28AH

MOV AL,01000100B ;1黄2红

OUT DX,AL

CALL DONE2

MOV DX,28AH

MOV AL,10000001B 1红2绿

OUT DX,AL

CALL DONE2

CALL DONE2

MOV DX,28AH

MOV AL,10000010B 1红2黄

OUT DX,AL

CALL DONE 2

MOV AH,06H

MOV DL,0FFH

INT 21H

JNZ PPP

JMP LLL

PPP: MOV AX,4C00H

INT 21H

DONE1 PROC NEAR

PUSH CX

MOV CX,0FFFFH

CC: LOOP CC

POP CX

RET

DONE1 ENDP

DONE2 PROC NEAR

PUSH AX

PUSH CX

MOV CX,0FFFH

UU: CALL DONE1

LOOP UU

POP CX

POP AX

RET

DONE10 ENDP

CODE ENDS

END START

有些东西发不上来 要的Q我

#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=0j<3j++)

{

for(i=0i<32i++)

{

display[i]=~BMP[j][i]

if (i%2) delay(100)

}

delay(10000)

}

}

}

void delay(uint x)

{

register uchar i,j

for (i=xi>0i--)

for (j=120j>0j--)

}

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//打开显示

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12552861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存