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

📄 2key.c

📁 《爱上单片机》配书光盘(书本的制作作品所要的程序)
💻 C
字号:
/*********************************************************************************************
程序名:    两键控制亮度
编写人:    杜洋 
编写时间:  2009年5月15日
硬件支持:  STC12C2052 内部RC或外部12MHZ晶振
接口说明:  8个LED彩灯接P1口,按键接P3.7和P3.3  
修改日志:  
  NO.1-
/*********************************************************************************************
说明:
使用PWM方式调整LED的亮灭周期,达到亮度变化。

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

#include <REG51.h> //51头文件
/*********************************************************************************************/
//《B_无级亮度变化》
#define DY_PORT		P1 //设置LED连接的I/O组
#define DY_PWM		501 //设置明亮的总级数(级数过大会出现闪烁)(值域:0~65535)
#define DY_MAX		500 //设置最大亮度(值域:小于明亮总级数)
#define DY_MIN		1 //设置最小亮度(值域:明亮大于等于1,小于最大亮度)
sbit DY_KEY1 = P3 ^ 3; //亮度加
sbit DY_KEY2 = P3 ^ 7; //亮度减
/*********************************************************************************************
//《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 k=5;
	while (1){
		display(k); //
		if(DY_KEY1 == 0){ //如果按键按下则继续
			delay(20); //延时20mS
			if(DY_KEY1 == 0){ //如果按键按下则继续
				k++;
				if(k>DY_MAX){
					k = DY_MAX;
				}
				//while(DY_KEY1 == 0); //等待按键松开
			}
		}
		if(DY_KEY2 == 0){ //如果按键按下则继续
			delay(20); //延时20mS
			if(DY_KEY2 == 0){ //如果按键按下则继续
				k--;
				if(k<DY_MIN){
					k = DY_MIN;
				}
				//while(DY_KEY2 == 0); //等待按键松开
			}
		}
    }
}
/*********************************************************************************************/
/*************************************************************
* 杜洋工作室 DoYoung Studio
* 与电子爱好者同行 www.DoYoung.net
/*************************************************************/

⌨️ 快捷键说明

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