标题:
51单片机1602改变模式 程序问题请教
[打印本页]
作者:
许许许
时间:
2020-3-20 15:42
标题:
51单片机1602改变模式 程序问题请教
外部按键按“选择”时,光标跳到mode那里,可以切换模式,1~20。对应pon从50ms到1000ms。通过按模式+模式-来切换,用此来控制继电器上电时间。请问各位大神可以帮忙弄完整程序吗,50到1000ms递进我写在下面,可是切换模式太多错误了实在搞不懂,请大神帮忙
IMG_20200320_152826.jpg
(929.32 KB, 下载次数: 23)
下载附件
2020-3-20 15:41 上传
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;//关定时器
}
}
作者:
许许许
时间:
2020-3-20 15:43
继电器上电后再掉电,然后再上电。每个模式都会进行三次
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1