微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机工程实践--第3章 74HC595+ULN200

51单片机工程实践--第3章 74HC595+ULN200

时间:11-25 来源:互联网 点击:

break;

case 6:
if((1==KEY_IN1)&&(1==KEY_IN2))
{
key_step++;
key_lock1 = 0;
delay_cnt1 = 0;
}
else if((0==KEY_IN1)&&(1==KEY_IN2)&&(0==key_lock1))
{
++delay_cnt1;
if(delay_cnt1>CNT_DELAY_CNT1)
{
delay_cnt1 = 0;
key_lock1 = 1;
key_sec = 3;// 触发 3 号按键
}
}
else if((1==KEY_IN1)&&(0==KEY_IN2)&&(0==key_lock1))
{
++delay_cnt1;
if(delay_cnt1>CNT_DELAY_CNT1)
{
delay_cnt1 = 0;
key_lock1 = 1;
key_sec = 4;// 触发 4 号按键
}
}

break;
}

if(key_step>6)// 判断,第一组与第二组按键反复轮流扫描
{
key_step = 1;
}
}

void key_service(void)
{
switch(key_sec)
{
case 1:// 1 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_1();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;// 处理完相应按键程序后,把按键选择变量清零,避免一直触发

break;

case 2: // 2 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_2();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;

break;

case 3:// 3 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_3();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;

break;

case 4:// 4 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_4();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;

break;
}
}

void relay_status_clear(void)
{
relay_status = 0;
}

void relay_status_set_1(void)
{
relay_status |= 0x0001;
}

void relay_status_set_2(void)
{
relay_status |= 0x0002;
}

void relay_status_set_3(void)
{
relay_status |= 0x0004;
}

void relay_status_set_4(void)
{
relay_status |= 0x0008;
}

void relay_drive(void)
{
u8 tempdata = 0;
//u16 relay_status_temp = 0;

HC595_SCK_OUT = 0;
HC595_RCK_OUT = 0;

//relay_status_temp = relay_status;

for(tempdata=0; tempdata<16; tempdata++)
{
if(relay_status & 0x8000)
{
HC595_SI_OUT = 1;
}
else
{
HC595_SI_OUT = 0;
}

HC595_SCK_OUT = 0;
_nop_();
_nop_();
HC595_SCK_OUT = 1;
_nop_();
_nop_();
relay_status <= 1;
}

HC595_RCK_OUT = 0;
_nop_();
_nop_();
HC595_RCK_OUT = 1;
_nop_();
_nop_();

HC595_SCK_OUT = 0;// 拉低,增强抗干扰
HC595_RCK_OUT = 0;
HC595_SI_OUT = 0;
}

void delay(void)
{
u8 t = 0;

for(t=0; t<0x0F; t++)
{;}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top