新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)工程實(shí)踐--第3章 74HC595+ULN200

51單片機(jī)工程實(shí)踐--第3章 74HC595+ULN200

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
首先上圖,有圖才有真相。實(shí)驗(yàn)中的圖片。

1、剛上電,繼電器不動(dòng)作,很穩(wěn)定。這是工程上需要的結(jié)果。

本文引用地址:http://m.butianyuan.cn/article/201611/321350.htm

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數(shù)據(jù)輸入時(shí)鐘線
sbit HC595_RCK_OUT = P1 ^ 1;// 74HC595輸出存儲(chǔ)器鎖存時(shí)鐘線
sbit HC595_OE_OUT = P1 ^ 2;// 74HC595輸出使能端 接10K上拉電阻
sbit HC595_SI_OUT = P1 ^ 3;// 74HC595數(shù)據(jù)線


typedef unsigned char uint8;
typedef unsigned int uint16;

typedef unsigned char u8;
typedef unsigned int u16;

#define CNT_DELAY_CNT1 25 // 按鍵去抖動(dòng)延時(shí)閥值
#define CNT_DELAY_CNT2 5 // 按鍵列輸出信號(hào)穩(wěn)定的小延時(shí)

#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()括號(hào)里面
u8 key_lock1 = 0; // 按鍵自鎖標(biāo)志
u8 key_sec = 0; // 按鍵被觸發(fā)的變量
u16 delay_cnt1 = 0; // 延時(shí)計(jì)數(shù)器的變量
u16 delay_cnt2 = 0; // 延時(shí)計(jì)數(shù)器的變量
u16 buzzer_time_cnt = 0; // 蜂鳴器聲音長短的計(jì)數(shù)延時(shí)
u16 relay_status = 0;// 繼電器狀態(tài)寄存器

int main(void)
{
interrupt_init();


HC595_OE_OUT = 1;// 置1,595輸出口為高阻態(tài),ULN2003輸入口內(nèi)部有下拉電阻,所以把595輸出口拉低了
relay_status_clear();// 把relay_status清零
relay_drive();// 繼電器驅(qū)動(dòng)程序,relay_status映射繼電器的狀態(tài)
HC595_OE_OUT = 0;// 輸出使能端拉低,595輸出口有效

BUZZER_OUT = 1;// 上電關(guān)閉蜂鳴器

while(1)
{
key_service();// 按鍵服務(wù)函數(shù)
}


return 0;
}


上一頁 1 2 下一頁

關(guān)鍵詞: 51單片機(jī)74HC595ULN20

評(píng)論


技術(shù)專區(qū)

關(guān)閉