📄 pic16f57_woof.c
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Author : ShiZheJun
// 单片机 : PIC16F57 (CF775兼容)
// 硬件平台 : 自动信号控制板
// 编译环境 : MPLAB IDE V7.30 + HI-TECH PICC V8.05
// Ver 1.0 : 2008.02.20
// 引脚RA2作为继电器控制位;引脚RA3用于选择模式,选择输入B端口的信号高或低电平有效;
// 端口C用于输出控制信号;
// 各端口引脚上电或复位时默认值为未知状态;
// 由于硬件上B端口和C端口各引脚并非按顺序一一对应,RB0对应RC0......而是刚好反过来,所以程序
// 中把C端口的引脚顺序全部反过来,即RB7对应RC0,RB6对应RC1...... //
////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <pic.h>
#include "stdio.h"
#define DELAY_CONTROL RA2 //继电器控制位
#define MODE_SELECT RA3 //高(低)电平有效模式控制位
__CONFIG ( XT&UNPROTECT&WDTDIS ); //定义工作配置字:使用XT振荡&不保护软件&禁用看门狗
unsigned char TEMP;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// 输出控制子函数
void OutputControl ( void )
{
if ( MODE_SELECT ) //如果短路块未连接,则B端口正常情况下都是高电平,变成低电平时有效
{
TEMP=~PORTB; //读取端口B,对各位取反,变成高电平有效
RC0=RB7;
RC1=RB6;
RC2=RB5;
RC3=RB4;
RC4=RB3;
RC5=RB2;
RC6=RB1;
RC7=RB0;
}
else //如果短路块连接,则B端口正常情况下都是低电平,变成高电平时有效
{
TEMP=PORTB; //读取端口B
RC0=!RB7; //这里对位取反操作不能使用符号“~”,跟51编译器有所区别
RC1=!RB6;
RC2=!RB5;
RC3=!RB4;
RC4=!RB3;
RC5=!RB2;
RC6=!RB1;
RC7=!RB0;
}
}
void main ( void )
{
TRISA=0b11111011; //控制继电器的引脚设置为输出状态,模式选择的引脚设置为输入状态
TRISB=0xff; //初始化端口B,Input,(默认所有端口为输入状态)
TRISC=0x00; //初始化端口C,Output
DELAY_CONTROL=1; //继电器初始不动作
PORTC=0xff; //端口C初始状态输出全为1
while ( 1 )
{
OutputControl ( );
TRISA=0b11111111; //端口输出控制前初始化一下
PORTA=0b11111111;
TRISA=0b11111011;
if ( TEMP ) //端口中任何一位是高电平,继电器就动作
{
DELAY_CONTROL=0; //继电器动作
}
else
{
DELAY_CONTROL=1; //继电器不动作
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -