标题: 51单片机求思路 P1.0按下执行p2.0输出半个小时关掉 [打印本页]

作者: 15260509552    时间: 2021-7-17 15:26
标题: 51单片机求思路 P1.0按下执行p2.0输出半个小时关掉
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家
P1.0按下执行p2.0输出半个小时关掉 P1.2按下执行p2.1输出1个小时关掉    p1.3按下执行P2.2输出 P1.4按下关掉所有程序 高电平为输出 求大佬们帮忙
作者: lkc8210    时间: 2021-7-18 01:13
设立p2.0和p2.1的输出倒数暂存
建立1毫秒定时中断
在中断中当倒数暂存大于0时倒数暂存减1

在主程序中
P1.0按下执行p2.0输出并在相关的倒数暂存中放入1800000
当倒数暂存为零时关掉输出
P1.2同上
P1.4按下关掉所有输出并清零倒数暂存
作者: 名字不是重点    时间: 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了


作者: gain    时间: 2021-7-18 11:28
用定时器在后台计时就行

作者: as21cxz    时间: 2021-7-18 11:36
方法有很多种,自己多想想,自己多写写程序,就可以写出来了,别人告诉你的,你一定能记住,下次类似的问题你还是过来问,多锻炼一下自己。
作者: lkc8210    时间: 2021-7-18 12:25
名字不是重点 发表于 2021-7-18 01:52
1:开一个中断,10ms,定义一个int变量time来 计数,一次中断time++;
2:定义一个char变量mode,再写一个键扫 ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1