找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机求思路 P1.0按下执行p2.0输出半个小时关掉

[复制链接]
跳转到指定楼层
楼主
ID:953405 发表于 2021-7-17 15:26 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家
P1.0按下执行p2.0输出半个小时关掉 P1.2按下执行p2.1输出1个小时关掉    p1.3按下执行P2.2输出 P1.4按下关掉所有程序 高电平为输出 求大佬们帮忙
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-7-18 01:13 | 只看该作者
设立p2.0和p2.1的输出倒数暂存
建立1毫秒定时中断
在中断中当倒数暂存大于0时倒数暂存减1

在主程序中
P1.0按下执行p2.0输出并在相关的倒数暂存中放入1800000
当倒数暂存为零时关掉输出
P1.2同上
P1.4按下关掉所有输出并清零倒数暂存
回复

使用道具 举报

板凳
ID:824490 发表于 2021-7-18 01:52 | 只看该作者
本帖最后由 名字不是重点 于 2021-7-18 01:57 编辑

1:开一个中断,10ms,定义一个int变量time来 计数,一次中断time++;
2:定义一个char变量mode,再写一个键扫函数,对应P1.0--P1.4按下时为mode0-mode4
3:大循环,检测键值,用Switch语句跳到对应的mode值,同时time清0.
   mode1:
    time=0;
    P2.1=0;P2.2=0;//如需输出互斥,则加入此行

     while(time<180000) {P2.0=1; }
     P2.0=0;
    break;
  mode2:
   time=0;
   P2.0=0;P2.2=0;//如需输出互斥,则加入此行
     while(time<360000) {P2.1=1; }
     P2.1=0;
    break;
mode3:
    P2.0=0;P2.1=0;//如需输出互斥,则加入此行
   P2.2=1;
  break;
mode4:
    P2.2=0;
    P2.1=0;
    P2.0=0;
    break;

差不多就是这样,你自己调整优化一下就OK了

回复

使用道具 举报

地板
ID:950257 发表于 2021-7-18 11:28 | 只看该作者
用定时器在后台计时就行
回复

使用道具 举报

5#
ID:708541 发表于 2021-7-18 11:36 | 只看该作者
方法有很多种,自己多想想,自己多写写程序,就可以写出来了,别人告诉你的,你一定能记住,下次类似的问题你还是过来问,多锻炼一下自己。
回复

使用道具 举报

6#
ID:161164 发表于 2021-7-18 12:25 来自手机 | 只看该作者
名字不是重点 发表于 2021-7-18 01:52
1:开一个中断,10ms,定义一个int变量time来 计数,一次中断time++;
2:定义一个char变量mode,再写一个键扫 ...

为什么要用while(time<xxx)?
岂不是进入了Mode1后要等半小时才能转mode?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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