程序代码:

#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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录