基于STC15W408AS单片机设计的双路输入双路输出可编程工控板可做上下限位控制
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
*********************************************************************
测试功能程序
*********************************************************************/
#include "STC15W408AS.h"
#include <intrins.H>
#define uchar unsigned char //宏定义字符型变量
#define uintunsigned int //宏定义整型变量
/********************************************************************
初始定义
*********************************************************************/
//uchar keycnt=0;//按下次数值
uint tcnt1,tcnt2; //键值判断
bit flag;
uint bjz=0;//设置报警值
uint tcnt=0;
//sfr WDT_CONTR=0XC1; //看门狗设置寄存器
uint bjsj=0;
uint bjsj1=0;
bit bjbz=0;
bit bjkz=0;
/********************************************************************
I/O定义
*********************************************************************/
sbit OUT1=P5^4; //继电器输出控制端
sbit OUT2=P5^5; //继电器输出控制端
sbit IN1=P3^6;//输入端
sbit IN2=P3^7;//输入端
sbit S1=P1^2;//检测时间调节
sbit S2=P1^3;//检测时间调节
sbit S3=P1^4;//检测时间调节
sbit S4=P1^5;//检测时间调节
sbit D0=P3^3;//遥控接口
sbit D1=P3^2;//遥控接口
sbit D2=P1^1;//遥控接口
sbit D3=P1^0;//遥控接口
bit bz1=0;
bit bz2=0;
uchar k=50;
/********************************************************************
函数声明
*********************************************************************/
void delay(uint t);
void timer0_init();
void jctime();
void KEY();
/********************************************************************
延时函数
*********************************************************************/
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
{
for(j=130;j>0;j--);
{ ;
}
}
}
/********************************************************************
定时器T0初始化
*********************************************************************/
void timer0_init()
{
TMOD=0x02; //定时器工作在方式2
TH0=0x06; //对TH0 TL0 赋值
TL0=0x06;
TR0=1; //开始定时
ET0=1;
EA=1;
}
/********************************************************************
检测时间设置函数
*********************************************************************/
void jctime()
{
if((S1==1)&&(S2==1)&&(S3==1)&&(S4==1)){bjz=100;}//1秒
if((S1==0)&&(S2==1)&&(S3==1)&&(S4==1)){bjz=200;}//2秒
if((S1==1)&&(S2==0)&&(S3==1)&&(S4==1)){bjz=300;}//3秒
if((S1==0)&&(S2==0)&&(S3==1)&&(S4==1)){bjz=400;}//4秒
if((S1==1)&&(S2==1)&&(S3==0)&&(S4==1)){bjz=500;}//5秒
if((S1==0)&&(S2==1)&&(S3==0)&&(S4==1)){bjz=600;}//6秒
if((S1==1)&&(S2==0)&&(S3==0)&&(S4==1)){bjz=700;}//7秒
if((S1==0)&&(S2==0)&&(S3==0)&&(S4==1)){bjz=800;}//8秒
if((S1==1)&&(S2==1)&&(S3==1)&&(S4==0)){bjz=900;}//9秒
if((S1==0)&&(S2==1)&&(S3==1)&&(S4==0)){bjz=1000;}//10秒
if((S1==1)&&(S2==0)&&(S3==1)&&(S4==0)){bjz=1100;}//11秒
if((S1==0)&&(S2==0)&&(S3==1)&&(S4==0)){bjz=1200;}//12秒
if((S1==1)&&(S2==1)&&(S3==0)&&(S4==0)){bjz=1300;}//13秒
if((S1==0)&&(S2==1)&&(S3==0)&&(S4==0)){bjz=1400;}//14秒
if((S1==1)&&(S2==0)&&(S3==0)&&(S4==0)){bjz=1500;}//15秒
if((S1==0)&&(S2==0)&&(S3==0)&&(S4==0)){bjz=1600;}//16秒
}
/********************************************************************
遥控函数
*********************************************************************/
void KEY()
{
if((D0==1)&&(D1==0)&&(D2==0)&&(D3==0)&&(bjbz==0)){delay(k);bjbz=1;tcnt1=0;OUT1=0;delay(k);}//A
if((D0==0)&&(D1==1)&&(D2==0)&&(D3==0)&&(bjbz==0)){delay(k);bjbz=1;tcnt1=0;OUT2=0;delay(k);}//B
if((D0==0)&&(D1==0)&&(D2==1)&&(D3==0)&&(bjbz==0)){delay(k);bjbz=1;tcnt1=0;OUT1=0;OUT2=0;delay(k);}//C
if((D0==0)&&(D1==0)&&(D2==0)&&(D3==1)){delay(k);tcnt1=0;bjbz=0;OUT1=1;OUT2=1;delay(k);}//D
if((D0==0)&&(D1==0)&&(D2==0)&&(D3==0))
{
delay(k);delay(k);
if((D0==0)&&(D1==0)&&(D2==0)&&(D3==0)){}//按键谈起
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
S1=1;
S2=1;
S3=1;
S4=1;
timer0_init();
while(1)
{
jctime();
KEY();
if((IN1==0)&&(bz1==0)){delay(1);if((IN1==0)&&(bz1==0)){OUT1=0;bz1=1;}}
if((IN1==1)&&(bz1==1)){OUT1=1;bz1=0;}
if((IN2==0)&&(bz2==0)){delay(k);if((IN2==0)&&(bz2==0)){OUT2=0;bz2=1;}}
if((IN2==1)&&(bz2==1)){OUT2=1;bz2=0;}
}
}
/********************************************************************
定时器T0中断服务函数
*********************************************************************/
void t0(void) interrupt 1 using 0 //定时中断服务函数
{
tcnt++; //每过250ust tcnt 加一
if(tcnt==40) //计满400 次(1/10 秒)时
{
tcnt=0; //重新再计
if(bjbz==1)
{
tcnt1++;
if(tcnt1>=bjz){OUT1=1;OUT2=1;tcnt1=0;bjbz=0;}
}
}
}
/********************************************************************
结束
*********************************************************************/
页:
[1]