找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 928|回复: 4
打印 上一主题 下一主题
收起左侧

如何添加按键使单片机程序通过按键启动?

[复制链接]
跳转到指定楼层
楼主
ID:1084356 发表于 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;          //设置循环点亮阶段标志
}
}
}
}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2023-6-21 11:06 | 只看该作者

回复

使用道具 举报

板凳
ID:213173 发表于 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);          //等待中断
}
回复

使用道具 举报

地板
ID:1084404 发表于 2023-6-21 11:57 | 只看该作者
首先在程序的开头加入一句定义,sfr SAP = 0xe7;
SAP 是名称,可以随意改写
之后在外部中断或程序内添加一个按键检测的语句

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:1085295 发表于 2023-6-21 16:05 | 只看该作者
1、创建项目文件。
2、按键:S1=P3^2,点亮: led=P1^5。
3、创建C语言主函
5、选择输出的效果。
6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表