⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 LED控制器程序
💻 C
字号:
#include"reg51.h"
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int

#define ON 0
#define OFF 1
/*
//led
sbit R_led=P1^0;
sbit G_led=P1^1;
sbit B_led=P1^2;
*/
//key
sbit MODE=P1^7;
sbit PUSE=P3^7;
sbit B_ADD=P3^5;
sbit B_DEC=P3^4;
sbit S_ADD=P3^0;
sbit S_DEC=P3^1;

extern void Pwm_delay(); //占空比延时
 
uchar //C_time1,
	  C_time2, //切换速度
	  Pwm_time,//占空比
	  Pwm_s,   //LED状态
	  MODE_ID, //运行模式
	  R_time,  //速度计数器
	  Max_ID,  //状态最大值
	  Min_ID,  //状态最小值
	  Run_ID;  //运行状态
/*
uchar bdata F;
sbit F_run=F^0;
*/
uchar code Run_s[]={ 0x01,0x02,0x04,      0x01,0x02,0x04,      0x01,0x02,0x04,      0x01,0x02,0x04,      0x01,0x02,0x04,0x07,0x00,

					  0x07,0x06,0x04,0x00, 0x07,0x06,0x04,0x00, 0x07,0x06,0x04,0x00, 0x07,0x06,0x04,0x00, 0x07,0x06,0x04,0x00, 
					  
					  0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
					  0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
					  0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
					  0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
					  0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00 };//led输出状态表

uchar code Max_tab[]= { 16,36,96 };//状态最大值表

uchar code Min_tab[]= { 0,17,37 };//状态最小值表


void Int0()interrupt 0 {
	EX0=0;//暂停键盘扫描
	if(!MODE) {	//模式切换
		MODE_ID++;
		if(MODE_ID==3)MODE_ID=0;
		Max_ID=Max_tab[MODE_ID];
		Min_ID=Min_tab[MODE_ID]; 
		Run_ID=Min_ID;
		R_time=C_time2;
	}	
	if(!PUSE)ET1=~ET1;//开始/暂停
	if(!S_ADD){	//运行速度加速
		if(C_time2==48)C_time2=16;
		else C_time2+=16;
		R_time=C_time2;
	}
	if(!S_DEC) { //运行速度减速
		if(C_time2==16)C_time2=48;
		else C_time2-=16;
		R_time=C_time2;
	}
	if(!B_ADD) { //占空比增加
		if(Pwm_time==12)Pwm_time=4;
		else Pwm_time+=4;
	}
	if(!B_DEC){	//占空比减少
		if(Pwm_time==4)Pwm_time=12;
		else Pwm_time-=4;
	}
	EX0=1;//开始键盘扫描
}

void Timer1()interrupt 3 {
	TH1=0x0b;
	TL1=0xdc;
	R_time--;
	if(R_time==0) {//切换LED输出状态
		R_time=C_time2;
		if(Run_ID==Max_ID) { Run_ID=Min_ID;/*ET1=0;return;*/ }
		else Run_ID++;
		Pwm_s=~Run_s[Run_ID];
	}
}

void Init_system(){
	//初始化运行状态
	MODE_ID=0;
	Max_ID=Max_tab[MODE_ID];
	Run_ID=Min_ID=Min_tab[MODE_ID];
	Pwm_time=12;
	Pwm_s=~Run_s[Run_ID];

	//INT0中断设置
	IT0=1;
	EX0=1;

	//Timer0中断设置
	TH1=0x0b;
	TL1=0xdc;
	C_time2=R_time=16; 
	TR1=1;
	ET1=1;
	EA=1;	
}

void Pwm_delay() {//占空比延时
	uchar i;
	for(i=0;i<5;i++)_nop_();
}


void main() {
	uchar Pwm;//占空比计数器
	Init_system();
	while(1) {
		//启动时间
		Pwm=Pwm_time;
		P1=Pwm_s;
		while(Pwm--)Pwm_delay();

		//关闭时间
		Pwm=12-Pwm_time;
		if(Pwm) {
			P1=0xff;
			while(Pwm--)Pwm_delay();
		}
	}
}
	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -