P1.3接按键
K1,每按一次按键,方波占空比改变一次,依次为:1/10→2/10→……→9/10→1/10,如此循环**/
#include"reg52.h"
//包含52系列头文件
#define
uchar
unsigned
char
//定义
无符号字符型
#define
uint
unsigned
int
//定义
无符号整型
#define
TRUE
1
//定义
逻辑真
#define
FALSE
0
//定义
逻辑假
#define
th0
0xfc
//100Hz(10ms),占空比分母10,则其最小时间单位应该为10ms/10=1ms,故定时器T0定时时间为
1ms
#define
tl0
0x18
//1ms
at
12HMz
Fosc
#define
DutyDeno
10
//定义
占空比分母
为:10
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<DutyDeno)
WaveOut=1
//若计时时间小于
占空比分子,则输出应为
高电平
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()
//调用
按键响应
函数
}
}
方波输出接口接灯;
/**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
TRUE
1
//定义
逻辑真
#define
FALSE
0
//定义
逻辑假
#define
th0
0xfc
//100Hz(10ms),占空比分母10,则其最小时间单位应该为10ms/10=1ms,故定时器T0定时时间为
1ms
#define
tl0
0x18
//1ms
at
12HMz
Fosc
#define
DutyDeno
10
//定义
占空比分母
为:10
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<DutyDeno)
WaveOut=1
//若计时时间小于
占空比分子,则输出应为
高电平
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()
//调用
按键响应
函数
}
}
方波输出接口接灯;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)