找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 921|回复: 5
收起左侧

如何编写单片机喂鱼定时器程序?

[复制链接]
ID:60515 发表于 2023-4-21 15:25 来自手机 | 显示全部楼层 |阅读模式
插电输出高电平,按一下按键输出低电平延时10分钟后输出高电平。如果在不到10钟内再次按下按键就直接输出高电平。
回复

使用道具 举报

ID:584814 发表于 2023-4-21 16:45 | 显示全部楼层
开机高电平,按键反转电平,如果反转后是低电平就延时10分钟自动转高。
回复

使用道具 举报

ID:668693 发表于 2023-4-21 18:06 | 显示全部楼层
定时器去计数,每十分钟出一个标志位,查询标志位和按键去处理操作程序
回复

使用道具 举报

ID:60515 发表于 2023-4-21 19:07 来自手机 | 显示全部楼层
man1234567 发表于 2023-4-21 16:45
开机高电平,按键反转电平,如果反转后是低电平就延时10分钟自动转高。

以前有做过,在电脑模拟可以过。在实物上行不通。可以给个例子?
回复

使用道具 举报

ID:60515 发表于 2023-4-22 12:13 来自手机 | 显示全部楼层
林神经 发表于 2023-4-21 18:06
定时器去计数,每十分钟出一个标志位,查询标志位和按键去处理操作程序

#include <AT89X51.H>
#define uchar unsigned char
uchar a,b;//计时标志
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;

void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main(void)
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;//定时50ms应该要50000
TL0=(65536-50000)%256;
TR0=1;
LED1=1;
LED0=1;//我假设的是LED阴极接单片机,阳极接VCC,所以输出1是熄灭
while(1)
  {
  if(K1==0)
  {
    delay10ms();
    if(K1==0)
    {
     a=1;//按下按键后计时标志为1
     LED0=0;//LED0亮
     }
  }
   if(K2==0)
  {
    delay10ms();
    if(K2==0)
    {
     b=1;//按下按键后计时标志为1
     LED1=0;//LED1亮
     }
  }

    if(num==6000)//20*50毫秒等于1秒5分钟需要300个1秒,所以是300*20=6000
    {
    a=0;//清楚标志
    LED0=0;//灯熄灭   
    }
    if(num==12000)//20*50毫秒等于1秒5分钟需要300个1秒,所以是300*20=6000
    {
    b=0;//清楚标志
    LED1=0;//灯熄灭   
    }
}



}

void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
  if((a==1)|(b==1)) num++;//判断计时标志是否为1,为1就开始计时



这个程序改可以?
回复

使用道具 举报

ID:88256 发表于 2023-4-22 13:50 | 显示全部楼层
如果不是为了学习而是家里用的话,也可以改用ESP8266并用arduino编程,还可以在手机上进行控制的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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