- 打卡等级:偶尔看看I
- 打卡总天数:14
- 最近打卡:2025-06-11 10:21:13
已绑定手机
注册会员
- 积分
- 190
|
发表于 2025-3-28 01:19:06
|
显示全部楼层
打卡交作业,第七课 定时器中断 P32 控制功德状态 ,打印状态 ,P33 加功德(1 或者 2)打印功德数,并控制LED1 亮一秒 或两秒
//按键P3.2控制功德状态
if(P32 == 0)
{
Delay20ms();
if(P32 == 0)
{
State = !State; //功德状态 0:单倍功德 1:双倍功德
if(State == 1)
{
printf("双倍功德时间\r\n");
}
else
{
printf("单倍功德时间\r\n");
}
while(P32 == 0);
}
}
//按键P3.3据功德状态 完成加功德
if(P33 == 0)
{
Delay20ms();
if(P33 == 0)
{
if(State == 1) //双倍功德状态 功德数+2
{
Num1 += 2;
printf("功德+2 当前功德:%d\r\n",Num1);
P00 = 0;
Timer0_Init(); //启动定时器0
}
else //单倍功德状态 功德数+1
{
Num2 += 1;
printf("功德+1 当前功德:%d\r\n",Num2);
P00 = 0;
Timer0_Init(); //启动定时器0
}
while(P33 == 0);
}
}
}
}
void Timer0_Isr(void) interrupt 1
{
if(State == 1)
{
Num3++;
if(Num3 == 2) //灯亮两秒 关灯 关定时器0
{
Num3 = 0;
P00 = 1;
TR0 = 0;
}
}
else
{
P00 = 1; //灯亮一秒 关灯 关定时器0
TR0 = 0;
}
}
void Timer0_Init(void) //1秒@24.000MHz
{
TM0PS = 0x1E; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xFC; //设置定时初始值
TH0 = 0x03; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
|
|