利用c51单片机设计一个交通灯编程程序本程序实现了一个基础的三色交通灯控制系统分别为红、黄、绿三种状态。其中红灯和绿灯分别互斥黄灯在两者切换时闪烁以提示即将要进行状态切换。程序中使用了定时器中断来控制每个状态的时间同时结合了GPIO口的控制来实现LED灯的开关。以下是程序代码:#includereg51h#define uint unsigned int#define uchar unsigned
程序代码:
#include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit RED=P1^0; //红灯控制IO sbit YELLOW=P1^1; //黄灯控制IO sbit GREEN=P1^2; //绿灯控制IO uchar sec=0; //秒数计数 uchar status=0; //交通灯状态标志位,0-红灯,1-黄灯,2-绿灯,3-绿灯闪烁
void delay(uint t){ //延时函数 uint i,j; for(i=0;i<t;i++) for(j=0;j<125;j++); }
void timer0() interrupt 1{ //定时器0中断服务程序 TH0=0xFC; //重新赋初值 TL0=0x67; sec++; //秒数计数 if(sec==30){ //30秒后进行状态切换 sec=0; status++; //状态标志位加1 if(status==4) //状态标志位循环 status=0; } switch(status){ //根据状态标志位控制LED灯状态 case 0: //红灯 RED=0; YELLOW=1; GREEN=1; break; case 1: //黄灯 if(sec%2==0){ //每隔1秒闪烁一次 RED=1; YELLOW=0; GREEN=1; } else{ RED=1; YELLOW=1; GREEN=1; } break; case 2: //绿灯 RED=1; YELLOW=1; GREEN=0; break; case 3: //绿灯闪烁 if(sec%2==0){ //每隔1秒闪烁一次 RED=1; YELLOW=1; GREEN=1; } else{ RED=1; YELLOW=1; GREEN=0; } break; } }
void main(){ TMOD=0x01; //定时器0工作在模式1 TH0=0xFC; //定时器0初值 TL0=0x67; ET0=1; //打开定时器0中断 EA=1; //打开总中断 TR0=1; //启动定时器0 while(1){ delay(100); //主循环延时 }
原文地址: https://www.cveoy.top/t/topic/cvzq 著作权归作者所有。请勿转载和采集!