找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机1602改变模式 程序问题请教

[复制链接]
跳转到指定楼层
楼主
ID:693676 发表于 2020-3-20 15:42 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
外部按键按“选择”时,光标跳到mode那里,可以切换模式,1~20。对应pon从50ms到1000ms。通过按模式+模式-来切换,用此来控制继电器上电时间。请问各位大神可以帮忙弄完整程序吗,50到1000ms递进我写在下面,可是切换模式太多错误了实在搞不懂,请大神帮忙



50~1000ms递进延时继电器,按键与定时器互锁。继电器延时期间锁按键

单片机源程序如下:

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char

sbit key=P1^0;
sbit OUT=P1^7;

uchar num=0;//键值变量
uchar flag=0;//中断标志

/***********定时器初始化****************/
void Timer0Init()                //50毫秒@12.000MHz
{
        TMOD |= 0x01;                //设置定时器模式
        TH0 = 0x3C;                        //设置定时初值
        TL0 = 0xB0;                        //设置定时初值
        TF0 = 0;                                //清除TF0标志
//        TR0 = 1;                                //定时器0开始计时
        EA = 1;                                //开总中断
        ET0 = 1;                                //开T0中断
}
/***********按键扫描程序****************/
void keyscan()        
{
        static uchar count=0;                //消抖计数变量                        
        static bit sign=0;                        //按键自锁标志
        if(key==0)                                                //检测键按下
        {                                       
                if(++count>=100 && sign==0 && TR0==0)//消抖/自锁/与定时器互锁
                {                        
                        sign=1;
                        num++;
                        if(num>20)
                                num=0;
                        if(num!=0)
                        {
                                TR0=1;//开定时器
                                OUT=0;//闭合继电器
                        }
                }
        }
        else //松手
        {
                count=0;                                        //消抖计数变量清0
                sign=0;                                        //按键自锁标志清0
        }
}
/***********主函数****************/
void main()
{
        Timer0Init();
        while(1)
        {
                keyscan();
        }
}
/***********中断服务程序****************/
void Timer0Interrupt() interrupt 1
{
        TH0 = 0x3C;
        TL0 = 0xB0;
        flag++;
        if(flag>=num)//50~1000ms递进
        {
                flag=0;
                OUT=1;//断开继电器
                TR0=0;//关定时器
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:693676 发表于 2020-3-20 15:43 来自手机 | 只看该作者
继电器上电后再掉电,然后再上电。每个模式都会进行三次
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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