标题: 如何添加按键使单片机程序通过按键启动? [打印本页]
作者: 1102285881 时间: 2023-6-20 20:04
标题: 如何添加按键使单片机程序通过按键启动?
现在是接通电源后,流水灯直接亮,那如何修改让它接通电源后,按下按键P2.0后流水灯开始运行/**********************************************************
霓虹灯模拟控制主程序
**********************************************************/
#include<AT89X52.h>
unsigned char i10,i8,i6;
unsigned charmod1,mod2;
void main(void)
{
i10=10; //设置软件计数10次,每次100ms
i8=8; //设置循环点亮阶段输出次数
i6=6; //设置间隔闪烁阶段输出次数
mod1=0x01; //设置循环点亮阶段控制码初值
mod2=0xAA; //设置间隔闪烁阶段控制码初值
F0=0; //设置循环点亮阶段标志,F0=0为循环点亮阶段
TMOD=0x10; //设置T1方式1定时
TH1=0x3C; //送100ms定时初值
TL1=0xB0;
IE=0x88; //允许T1中断
P1_0=1 //
TR1=1; //启动T1定时
while(1); //等待中断
}
/**********************************************************
T1中断服务程序
**********************************************************/
void timer0(void) interrupt 3 using 1
{
TH1=0x3C; //100ms时间到,重装定时初值
TL1=0xB0;
i10--;
if(i10==0)
{
i10=10; //1s到重设软件计数器
if(F0==0)
{
P1=~mod1; //循环点亮阶段控制码取反送P1口
mod1= mod1<<1; //mod1值左移一位
i8--;
if(i8==0)
{
i8=8; //完成重设循环点亮阶段输出次数
F0=1; //设置间隔闪烁阶段标志
}
}
else
{
P1=mod2; //输出间隔闪烁阶段控制码
Mod2=~mod2; //控制码取反
i6--;
if(i6==0)
{
i6=6; //完成重设间隔闪烁阶段输出次数
F0=0; //设置循环点亮阶段标志
}
}
}
}
作者: lkc8210 时间: 2023-6-21 11:06
作者: wulin 时间: 2023-6-21 11:32
如果只是简单的做一次性启动可以加一句while(P2_0);,如果想一键开关机就要用掉电唤醒模式。
void main(void)
{
i10=10; //设置软件计数10次,每次100ms
i8=8; //设置循环点亮阶段输出次数
i6=6; //设置间隔闪烁阶段输出次数
mod1=0x01; //设置循环点亮阶段控制码初值
mod2=0xAA; //设置间隔闪烁阶段控制码初值
F0=0; //设置循环点亮阶段标志,F0=0为循环点亮阶段
TMOD=0x10; //设置T1方式1定时
TH1=0x3C; //送100ms定时初值
TL1=0xB0;
IE=0x88; //允许T1中断
P1_0=1 //
while(P2_0);
TR1=1; //启动T1定时
while(1); //等待中断
}
作者: 2728999742 时间: 2023-6-21 11:57
首先在程序的开头加入一句定义,sfr SAP = 0xe7;
SAP 是名称,可以随意改写
之后在外部中断或程序内添加一个按键检测的语句
作者: fegfds 时间: 2023-6-21 16:05
1、创建项目文件。
2、按键:S1=P3^2,点亮: led=P1^5。
3、创建C语言主函
5、选择输出的效果。
6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |