实现 5 种 亮度等级 L ED 灯的切换 (必须用到定时器,不然不给分
利用 两个独立按键控制 L ED 灯的亮暗程度,一个按键按下变亮 一个等级 ,一
个按键按下变暗 一个等级 。 亮暗等级从完全熄灭(最暗)到完全点亮(最亮) 5
等分。
/************************************************
LED 亮 度 切 换(例程)
************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P2 ^6;
sbit Key1 = P2 ^3;
sbit Key2 = P2 ^4;
uchar brightness, count;
void init();
void delay(uint z); // 延时(ms)
void Key_scan(); // 按键扫描
void light(); //发送脉冲
void time0() interrupt 1
{
TH0 = (65536 - 2000) / 256; //2ms
TL0 = (65536 - 2000) % 256;
count++;
light();
count = count % 10; //10ms为一个信号周期
}
void light() {
if (count <= brightness) //亮度与周期内LED发光时间成正比,当发光时间不足时,继续发光
LED = 0;
else
LED = 1;
}
void main() {
while (1)
Key_scan();
}
/* 初始化 */
void init(){
TMOD = 0x01; //16位定时器0
TH0 = (65536 - 2000) / 256; //2ms
TL0 = (65536 - 2000) % 256;
TR0 = 1; //开启定时器0
ET0 = 1; //开启定时器0中断
EA = 1; //开总中断开关
brightness = 1; //初始亮度1档
}
/* 按键扫描 */
void Key_scan() {
if (!Key1) {
delay(5);
if (!Key1)
if (brightness < 5)
brightness++;
while (!Key1); //松手检测
}
if (!Key2) {
delay(5);
if (!Key2)
if (brightness > 1)
brightness--;
while (!Key2);
}
}
/* 延时(ms) */
void delay(uint z) {
uint x, y;
for (x = z; x > 0; x--)
for (y = 110; y > 0; y--);
}
暂无评论
要发表评论,您必须先 登录