PCF8574 Remote 8-Bit I/O Expander for I2C-Bus

Pin sayısının yetersiz kaldığı mikrodenetleyicili devrelerde kullanılan PCF8574 i2c iiletişim protokolünü kullanarak sadece 2 pin ile sekiz çıkış kontrol edilebilmektedir.

Özellikle LCD ve 7 segment devrelerinde kullanılmaktadır.

Ekte verilen uygulamada butondan gelen bilgi okunarak 7 segment displaylerle yukarı sayıcı yapılmıştır.

#include "main.h"

#define PORTB 0x06
INT I=0,J=0,K=0,cmd=0,PORT_BASE_ADDRESS;
BYTE CONST AFF4[2][11] = {0x82,0x9f,0xA8,0x89,0x95,0xC1,0xC0,0x87,0x80,0x81,0xff //0 1 2 3 4 5 6 7 8 9
0x02,0x1f,0x28,0x09,0x15,0x41,0x40,0x07,0x00,0x01,0x7f};//avec point 1. 2. 3. 4. 5. 6. 7. 8. 9.

unsigned char read_from_port();
void write_to_port(unsigned char data_byte);

unsigned char read_from_port()
{
unsigned char port_byte=0;
i2c_start();
i2c_write((PORT_BASE_ADDRESS + 1));
port_byte=i2c_read(0);
i2c_stop();
return port_byte;
}

void write_to_port(unsigned char data_byte)
{
i2c_start();
i2c_write(PORT_BASE_ADDRESS);
i2c_write(data_byte);
i2c_stop();
}

void affich(){
PORT_BASE_ADDRESS= 0x40;
write_to_port(AFF4[0][I]);
PORT_BASE_ADDRESS= 0x42;
write_to_port(AFF4[1][J]);
PORT_BASE_ADDRESS= 0x44;
write_to_port(AFF4[0][K]);
}

void read(){
PORT_BASE_ADDRESS= 0x46;
cmd=read_from_port();
if(cmd!=0xff){
if(cmd==0xfe)i++;
if(cmd==0xfd)j++;
if(cmd==0xfb)k++;
IF(I==10){I=0;J++;}
IF(J==10){J=0;K++;}
IF(k==10){k=0;}
re:cmd=read_from_port();
if(cmd!=0xff)goto re;
}
}

#INT_EXT
void ext_isr() {
read();
affich();
}



void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
ext_int_edge(H_TO_L); // init interrupt triggering for button press
enable_interrupts(INT_EXT);// turn on interrupts
enable_interrupts(GLOBAL);
// TODO: USER CODE!!
affich();
DO{

}WHILE(1);
}

PCF8574 uygulama

şifre: ccspic

Bu yazı CCS C Sürücü kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.