写一个红绿灯C语言程序
时间: 2023-09-06 19:07:34 浏览: 839
以下是一个简单的红绿灯程序,使用 C 语言编写:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
int main()
{
int red = 1, green = 0;
while (1)
{
if (red == 1)
{
printf("\n\nRed Light ON");
Sleep(5000);
red = 0;
green = 1;
}
else if (green == 1)
{
printf("\n\nGreen Light ON");
Sleep(5000);
green = 0;
red = 1;
}
}
return 0;
}
```
程序使用了 Windows.h 库中的 Sleep 函数,让程序在红灯和绿灯之间暂停 5 秒钟。程序的逻辑很简单,当红灯亮起时,等待 5 秒然后将红灯关掉,绿灯亮起;当绿灯亮起时,等待 5 秒然后将绿灯关掉,红灯亮起。程序会一直循环执行下去,直到手动终止程序。
相关问题
基于c51单片机的十字路口红绿灯c语言程序
以下是一个基于C51单片机的十字路口红绿灯C语言程序,它使用了定时器和外部中断来控制红绿灯的亮灭,模拟了十字路口的交通信号控制。
```
#include <reg52.h>
// 定义端口地址
#define PORT_LIGHT P0
#define PORT_BTN P3
// 定义端口位掩码
#define RED 0x01
#define YELLOW 0x02
#define GREEN 0x04
// 定义定时器初值和重载值
#define TIMER_INIT 65536-10000 // 10ms
#define TIMER_RELOAD 65536-10000 // 10ms
// 定义中断向量
#define INT_VECTOR_T0 1
// 定义延时函数
void delay(int time) {
int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 50; j++);
}
}
// 定义定时器中断处理函数
void timer0_isr(void) interrupt INT_VECTOR_T0 {
static unsigned char cnt = 0;
cnt++;
if (cnt == 50) { // 500ms
cnt = 0;
// 红绿灯状态切换
if (PORT_LIGHT == RED) {
PORT_LIGHT = GREEN;
} else if (PORT_LIGHT == GREEN) {
PORT_LIGHT = YELLOW;
} else if (PORT_LIGHT == YELLOW) {
PORT_LIGHT = RED;
}
}
TH0 = TIMER_INIT / 256;
TL0 = TIMER_INIT % 256;
}
// 定义外部中断处理函数
void int0_isr(void) interrupt 0 {
// 检测按钮是否按下
if (PORT_BTN == 0) {
// 切换红绿灯状态
if (PORT_LIGHT == RED) {
PORT_LIGHT = GREEN;
} else if (PORT_LIGHT == GREEN) {
PORT_LIGHT = YELLOW;
} else if (PORT_LIGHT == YELLOW) {
PORT_LIGHT = RED;
}
}
delay(20);
// 消除按键抖动
while (PORT_BTN == 0);
}
// 程序入口
void main() {
// 初始化定时器
TMOD = 0x01; // 定时器0,模式1
TH0 = TIMER_INIT / 256;
TL0 = TIMER_INIT % 256;
TR0 = 1; // 启动定时器
ET0 = 1; // 允许定时器中断
// 初始化外部中断
IT0 = 1; // 下降沿触发
EX0 = 1; // 允许外部中断
// 初始化端口
PORT_LIGHT = RED;
PORT_BTN = 0xff; // 上拉
// 无限循环
while (1);
}
```
上述程序使用了定时器和外部中断来控制红绿灯的亮灭,模拟了十字路口的交通信号控制。定时器中断处理函数timer0_isr每500ms切换一次红绿灯状态,外部中断处理函数int0_isr检测到按钮按下后切换红绿灯状态,并使用延时函数消除按键抖动。程序入口是main函数,初始化定时器、外部中断和端口后,进入无限循环等待中断事件的发生。
请写一个单片机红绿灯十字路口的c语言程序
本题为考察单片机的基础控制能力,以下提供一种基本的红绿灯十字路口的C语言程序。
```
#include <reg52.h> //引入头文件
sbit red1 = P1^0; //定义红灯1接口
sbit yellow1 = P1^1; //定义黄灯1接口
sbit green1 = P1^2; //定义绿灯1接口
sbit red2 = P1^3; //定义红灯2接口
sbit yellow2 = P1^4; //定义黄灯2接口
sbit green2 = P1^5; //定义绿灯2接口
void delay(int time) //定义延时函数
{
int i,j;
for(i=0;i<time;i++)
for(j=0;j<1275;j++);
}
void main()
{
while(1) //无限循环
{
red1 = 1; //1号红灯亮
yellow1 = 0;
green1 = 0;
red2 = 0; //2号绿灯亮
yellow2 = 0;
green2 = 1;
delay(50); //等待50秒
red1 = 0; //1号绿灯亮
yellow1 = 0;
green1 = 1;
red2 = 1; //2号红灯亮
yellow2 = 0;
green2 = 0;
delay(50); //等待50秒
red1 = 0; //1号黄灯亮
yellow1 = 1;
green1 = 0;
red2 = 1; //2号红灯亮
yellow2 = 0;
green2 = 0;
delay(10); //等待10秒
red1 = 0; //1号红灯亮
yellow1 = 0;
green1 = 0;
red2 = 0; //2号黄灯亮
yellow2 = 1;
green2 = 0;
delay(10); //等待10秒
}
}
```
上述代码中,我们利用了单片机的IO接口控制LED灯的亮灭,通过循环实现了红绿灯的轮流切换。在程序中,我们通过定义延时函数实现了红绿灯的变换时间,可以根据需要自行调整。同时,由于程序是在无限循环中执行,因此红绿灯的变换也会一直循环执行。
阅读全文