这次用的是AT89S52单片机,下面是俺的小程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED10 = P2^0; //要控制的LED 灯
sbit K1= P3^2; //按键K1
uchar scale; //用于保存占空比的输出0 的时间份额,总共10 份
void initial();
/*************************************************/
/* 主程序 */
/*************************************************/
void main(void)
{
uint n;
initial();
while(1)
{ ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作
if(!K1) //如果读到K1 为0
{
for(n=0;n<1000;n++); //等待按键稳定
while(!K1); //等待按键松开
for(n=0;n<1000;n++); //等待按键稳定松开
//for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度
scale++;
if(scale==10)scale=0;
}
}
}
/***********************************************/
/* 初始化子程序 */
/***********************************************/
void initial()
{
RCAP2H =0xF3; //赋T2 的预置值,溢出1 次是1/1200 秒钟
RCAP2L =0x98;
TR2=1; //启动定时器
ET2=1; //打开定时器2 中断
EA="1";
}
/*************************************************/
/* 1/1200 秒定时器2 中断 */
/*************************************************/
timer2() interrupt 5
{
static uchar tt; //tt 用来保存当前时间在一秒中的比例位置
TF2=0;
tt++;
if(tt==10) //每1/120 秒整开始输出低电平
{
tt="0";
if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影
LED10=0;
}
if(scale==tt) //按照当前占空比切换输出高电平
LED10=1;
}
#define uchar unsigned char
#define uint unsigned int
sbit LED10 = P2^0; //要控制的LED 灯
sbit K1= P3^2; //按键K1
uchar scale; //用于保存占空比的输出0 的时间份额,总共10 份
void initial();
/*************************************************/
/* 主程序 */
/*************************************************/
void main(void)
{
uint n;
initial();
while(1)
{ ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作
if(!K1) //如果读到K1 为0
{
for(n=0;n<1000;n++); //等待按键稳定
while(!K1); //等待按键松开
for(n=0;n<1000;n++); //等待按键稳定松开
//for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度
scale++;
if(scale==10)scale=0;
}
}
}
/***********************************************/
/* 初始化子程序 */
/***********************************************/
void initial()
{
RCAP2H =0xF3; //赋T2 的预置值,溢出1 次是1/1200 秒钟
RCAP2L =0x98;
TR2=1; //启动定时器
ET2=1; //打开定时器2 中断
EA="1";
}
/*************************************************/
/* 1/1200 秒定时器2 中断 */
/*************************************************/
timer2() interrupt 5
{
static uchar tt; //tt 用来保存当前时间在一秒中的比例位置
TF2=0;
tt++;
if(tt==10) //每1/120 秒整开始输出低电平
{
tt="0";
if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影
LED10=0;
}
if(scale==tt) //按照当前占空比切换输出高电平
LED10=1;
}
K1键用来控制亮度,每按一次增加一个亮度级别
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/3318/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表