您的位置 首页 分销

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

首先上图,有图才有真相。实验中的图片。1、刚上电,继电器不动作,很稳定。这是工程上需要的结果。2、按下KEY1,继电器1吸合,其它继电器

首要上图,有图才有本相。试验中的图片。

1、刚上电,继电器不动作,很安稳。这是工程上需求的成果。

2、按下KEY1,继电器1吸合,其它继电器断开。

3、按下KEY2,继电器2吸合,其它继电器断开。

#include
#include

sbit KEY_IN1 = P2 ^ 4; // 输入按键 接10K上拉电阻
sbit KEY_IN2 = P2 ^ 5;
sbit KEY_OUT1 = P2 ^ 3; // 输出按键
sbit KEY_OUT2 = P2 ^ 2;

sbit BUZZER_OUT = P1 ^ 7; // 蜂鸣器
sbit LED = P0 ^ 7; // LED

sbit HC595_SCK_OUT = P1 ^ 0;// 74HC595数据输入时钟线
sbit HC595_RCK_OUT = P1 ^ 1;// 74HC595输出存储器锁存时钟线
sbit HC595_OE_OUT = P1 ^ 2;// 74HC595输出使能端 接10K上拉电阻
sbit HC595_SI_OUT = P1 ^ 3;// 74HC595数据线

typedef unsigned char uint8;
typedef unsigned int uint16;

typedef unsigned char u8;
typedef unsigned int u16;

#define CNT_DELAY_CNT1 25 // 按键去颤动延时阀值
#define CNT_DELAY_CNT2 5 // 按键列输出信号安稳的小延时

#define CNT_BUZZER_TIME 40

void interrupt_init(void);
void key_scan(void);
void key_service(void);
void relay_status_clear(void);
void relay_status_set_1(void);
void relay_status_set_2(void);
void relay_status_set_3(void);
void relay_status_set_4(void);
void relay_drive(void);
void delay(void);

u8 key_step = 1; // 按键扫描过程变量,在switch()括号里边
u8 key_lock1 = 0; // 按键自锁标志
u8 key_sec = 0; // 按键被触发的变量
u16 delay_cnt1 = 0; // 延时计数器的变量
u16 delay_cnt2 = 0; // 延时计数器的变量
u16 buzzer_time_cnt = 0; // 蜂鸣器声响长短的计数延时
u16 relay_status = 0;// 继电器状况寄存器

int main(void)
{
interrupt_init();


HC595_OE_OUT = 1;// 置1,595输出口为高阻态,ULN2003输入口内部有下拉电阻,所以把595输出口拉低了
relay_status_clear();// 把relay_status清零
relay_drive();// 继电器驱动程序,relay_status映射继电器的状况
HC595_OE_OUT = 0;// 输出使能端拉低,595输出口有用

BUZZER_OUT = 1;// 上电封闭蜂鸣器

while(1)
{
key_service();// 按键服务函数
}


return 0;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/259273.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部