调节⼩灯亮度的c语⾔程序,需要⼀个⽤按键控制⼀个LED灯亮
度的C语⾔程序
匿名⽤户
1级
2012-02-21 回答
/**52系列单⽚机,晶振12MHz,P1.0输出100Hz⽅波(即周期10ms),⽅波由T0定时器产⽣
P1.3接按键 K1,每按⼀次按键,⽅波占空⽐改变⼀次,依次为:1/10→2/10→……→9/10→1/10,如此循环**/
#include"reg52.h"//包含52系列头⽂件
#define uchar unsigned char//定义 ⽆符号字符型
#define uint unsigned int//定义 ⽆符号整型
#define TRUE1//定义 逻辑真
#define FALSE0//定义 逻辑假
#define th00xfc//100Hz(10ms),占空⽐分母10,则其最⼩时间单位应该为10ms/10=1ms,故定时器T0定时时间为 1ms
#define tl00x18//1ms at 12HMz Fosc
#define DutyDeno10//定义 占空⽐分母 为:10一个完整的c语言程序
sbit WaveOut=P1^0;//定义 ⽅波输出 接⼝
sbit Key1=P1^3;//定义 按键Key1 接⼝
uchar DutyNume=1;//定义 占空⽐分⼦ 变量,并初始化为 1(即 占空⽐ 为:1/10)
void Timer0() interrupt 1//定时器T0 中断 函数
{
static uchar duty_time=0;//定义静态变量,作为 占空⽐ 输出时间的参考值(1ms)
TL0=tl0;
TH0=th0;//重赋定时器初值,1ms
duty_time=++duty_time%DutyDeno;//该句等效于:duty_time++;duty_time%=DutyDeno;
if(duty_time
else WaveOut=0;//若计时时间⼤于 占空⽐分⼦,则输出应为 低电平
}
void TimerInit()//定时器初始化 函数
{
TMOD=0x01;//T0 16位定时器
EA=1;//允许系统中断
ET0=1;//允许T0中断
TH0=th0;
TL0=tl0;//1ms 初值
TR0=1;//T0开始计时
}
void KeyResp()//按键响应 函数
{
static bit KeyDownFlag,KeyReadyFlag;//定义 静态标志位,KeyDownFlag 按键按下标志,KeyReadyFlag 按键准备(响应)标志if(!Key1)//若按键Key1 被按下
{
KeyDownFlag=TRUE;//按键按下标志 置位
KeyReadyFlag=TRUE;//按键准备标志 置位
}
else KeyDownFlag=FALSE;//若按键Key1 ⽆按下,则清空 按键按下标志
if(!KeyDownFlag && KeyReadyFlag)//若 按键已准备,且按键⽆按下(即 松⼿状态)
{
DutyNume++;//占空⽐分⼦ 加1
if(DutyNume==DutyDeno) DutyNume=1;//若 占空⽐分⼦=分母,则返回 1
KeyReadyFlag=FALSE;//按键处理完毕,清 按键准备标志
}
}
void main()//主函数
{
TimerInit();//调⽤ 定时器初始化 函数
while(1)//循环系统
{
KeyResp();//调⽤ 按键响应 函数
}
}
⽅波输出接⼝接灯;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论