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

📄 c彩灯.c

📁 《爱上单片机》配书光盘(书本的制作作品所要的程序)
💻 C
字号:
/*********************************************************************************************
程序名:    渐明渐暗的闪烁彩灯
编写人:    杜洋 
编写时间:  2009年5月13日
硬件支持:  STC12C2052 内部RC或外部12MHZ晶振
接口说明:  8个LED彩灯接P1口  
修改日志:  
  NO.1-2009年5月14日 在程序前面加入参数定义项 
/*********************************************************************************************
说明:
使用PWM方式调整LED的亮灭周期,达到亮度变化。

/*********************************************************************************************/

#include <REG51.h> //51头文件
/*********************************************************************************************
//《C_无级亮度闪烁》
#define DY_PORT		P1 //设置LED连接的I/O组
#define DY_SPEED	1 //设置每一个明亮级的停留时间(值域:0~65535)
#define DY_PWM		50 //设置明亮的总级数(级数过大会出现闪烁)(值域:0~65535)
#define DY_MAX		50 //设置最大明亮(值域:小于明亮总级数)
/*********************************************************************************************/
//《B_无级亮度变化》
#define DY_PORT		P1 //设置LED连接的I/O组
#define DY_SPEED	1 //设置每一个明亮级的停留时间(值域:0~65535)
#define DY_PWM		500 //设置明亮的总级数(级数过大会出现闪烁)(值域:0~65535)
#define DY_MAX		500 //设置最大明亮(值域:小于明亮总级数)
/*********************************************************************************************
//《A_8级亮度变化》
#define DY_PORT		P1 //设置LED连接的I/O组
#define DY_SPEED	100 //设置每一个明亮级的停留时间(值域:0~65535)
#define DY_PWM		500 //设置明亮的总级数(级数过大会出现闪烁)(值域:0~65535)
#define DY_MAX		8 //设置最大明亮(值域:小于明亮总级数)
/*********************************************************************************************

bit [自定义名] ; //定义一个位(位的值只能是0或1)例:bit LED
#define [代替名]	[原名]  //用代替名代替原名(可以方便修改常改或调试的值)例:#define LED P1
sbit  [自定义名] = [系统位名] ; //自定义系统位名。例:sbit Add_Key = P3 ^ 1;
unsigned char [自定义名] ; //定义一个0~255的整数变量.例:unsigned char a;
unsigned int [自定义名] ; //定义一个0~65535的整数变量

/*********************************************************************************************/
void delay (unsigned int a){ // 0.1ms延时程序(12MHz 10倍于51单片机速度时)
	unsigned char i;
	while( --a != 0){
		for(i = 0; i < 12; i++); 
	}   				   
}
/*********************************************************************************************/
void display (unsigned int a){ //显示程序(50ms的PWM宽度)
	DY_PORT = 0x00; //LED小灯亮
	delay (a); 		//延时a的长度
	DY_PORT = 0xff; //LED小灯灭
	delay (DY_PWM-a);//延时总PWM长度减a
}
/*********************************************************************************************/
void main (void){ //主程序 
    unsigned int t=1;
	unsigned int i;
	bit LOOP=0; //LOOP是循环切换标志

	while (1){
		if(LOOP == 0){ //变亮循环
			for(i = 0; i < DY_SPEED; i++){
				display(t);
			}
			t++;
			if(t>(DY_MAX-2)){
				LOOP = 1;
			}
		}
		if(LOOP == 1){ //变暗循环
			for(i = 0; i < DY_SPEED; i++){
				display(t);
			}
			t--;
			if(t<2){
				LOOP = 0;
			}
		}
    }
}
/*********************************************************************************************/
/*************************************************************
* 杜洋工作室 DoYoung Studio
* 与电子爱好者同行 www.DoYoung.net
/*************************************************************/

⌨️ 快捷键说明

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