📄 relay.c
字号:
/*******************************************************************
* *
* ME850单片机开发实验仪演示程序 - 键控制继电器 *
* *
* K1- 吸合键,K2- 释放键 *
* *
* 版本: V1.0 (2008/08/16) *
* 作者: gguoqing (Email: gguoqing@willar.com) *
* 作者: gguoqing (gguoqing@willar.com) *
* 网站: www.sofi-tech.com(硕飞科技) www.mcusj.com(伟纳单片机世界) *
* 邮箱: sofitech@tom.com *
* *
*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
* *
*******************************************************************/
#include <reg52.h>
char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节
sbit K1 = P1 ^ 4;
sbit K2 = P1 ^ 5;
sbit relay = P3 ^ 6;
unsigned char key_new, key_old;
/**********************************************************
延时函数
**********************************************************/
void delayms(unsigned int ms)
{
unsigned char k;
while (ms--)
{
for (k = 0; k < 114; k++)
;
}
}
/********************************************************
扫描健盘函数
********************************************************/
unsigned char scan_key()
{
key_new = 0x00;
key_new |= K2;
key_new <<= 1; //左移1位
key_new |= K1;
return key_new; //无键按下 key_new=0x03。
}
/**********************************************************
主函数
**********************************************************/
void main(void)
{
P0 = 0xff; //初始化端口
P2 = 0xff;
P1 = 0xf0; //置P1高四位为输入
key_old = 0x03; //初始键比较值
relay = 1; //继电器释放
while (1)
{
scan_key();
if (key_new != key_old)
{
delayms(10); //延时去抖动
scan_key(); //再次判健是否按下
if (key_new != key_old)
{
key_old = key_new; //保存按键状态
if ((key_new &0x01) == 0) //K1键按下
relay = 0; //继电器吸合
if ((key_new &0x02) == 0) //K2键按下
relay = 1; //继电器释放
}
}
}
}
/**********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -