#include
sbit LED = P1 ^ 0; sbit ONOFF = P2 ^ 0; sbit ADD = P2 ^ 1; sbit DEC = P2 ^ 2;
unsigned int Brightne; bit MARK;
//库文件定义(定义单片机为8952系列) //台灯控制端口(LED) //开关键 //变亮键
//变暗键
//亮度值,值域0~255(全局变量)
//状态标志位(目前是开灯还是关灯状态)
/***************************************************************************** 延时程序:时间为1mS /*****************************************************************************/ void Delay1mS(unsigned int a){ //延时程序(ms)
unsigned char i; while( --a != 0){
for(i = 0; i
} } /**************************************************************************** 延时程序:驱动程序专用
/****************************************************************************/ void delay (unsigned char d){
// 延时功能函数--由d决定延时长度
unsigned char i; while( --d != 0){
for(i = 0; i
/**************************************************************************** 灯泡驱动程序:根据亮度值驱动灯泡
/****************************************************************************/ void drive (void){
unsigned char a;
} /**************************************************************************** 开灯判断:
/****************************************************************************/ void open (void){
// a = Brightne; LED = 0; delay (a); a = ~a; LED = 1; delay (a); a = ~a;
// a值取反 使a回到原值继续循环
//
// a控制延时长度
//取得亮度值数据 //点亮灯泡
// 延时长度随a而改变
// a值取反 决定灯灭时的占空比
if(ONOFF == 0){
}
//如果ONOFF为0则证明开关键按下 //等待20毫秒躲过按键不稳定的状态 //再看开关键是否被按下 //将标志位变成开灯状态 //等待按键放开 Delay1mS(20);
if(ONOFF == 0){
MARK = 1;
while(ONOFF == 0); }
} /**************************************************************************** 关灯判断:
/****************************************************************************/ void close (void){
//
} /**************************************************************************** 变亮判断:
/****************************************************************************/ void add (void){
// if(ADD == 0){
//如果ADD为0则证明变亮键按下
} Brightne++; if(Brightne > 254){ }
//亮度值加1
//如果亮度值大于最大值时 //则保持最大值状态 if(ONOFF == 0){ Delay1mS(20);
} if(ONOFF == 0){ MARK = 0;
}
//将标志位变成关灯状态
while(ONOFF == 0);
Brightne = 254;
} /**************************************************************************** 变暗判断:
/****************************************************************************/ void dec (void){
if(DEC == 0){
} Brightne--; if(Brightne
//
} /**************************************************************************** 初始化: /****************************************************************************/ void init (void){ LED
} ONOFF ADD DEC Brightne MARK =
1;
//
//灯泡和按键初始状态设置
= 1; = 1; = 1; = 130; = 0;
//初始化亮度值
//状态切换标志位
/**************************************************************************** 主循环体:
/****************************************************************************/ void main (void){
// 主函数 实现程序流程
init();
//调用初始化程序
while (1){
if(MARK == 0){
}
} open();
} if(MARK == 1){
} drive(); close(); add(); dec();
//状态标志为关灯状态时 //等待开关键按下(开灯) //状态标志为开灯状态时
//驱动灯泡
//判断开关键按下(关灯)
//判断变亮键按下 //判断变暗键按下