Home Mikrokontroler 7 Segment Display Menggunakan Shift Register 74595
7 Segment Display Menggunakan Shift Register 74595
Tampilan Simulasi Rangkaian Menggunakan Proteus
Aplikasi berikut ini adalah menampilkan 4 digit angka pada 7 segment, dalam penerapanya bisa digunakan sebagai jam digital dengan menambahkan RTC atau sebagai counter UP/down dengan manambahkan tombol sebagai inputan. Material yang digunakan adalah mikrokontroler AVR Mega8, 4 buah 7-segment dan 4 biji shift register 74HC595 sebagai driver untuk mengendalikan 7-segment.
Berikut kode program lengkapnya menggunakana CodeVisionAVR
#include
#include
#define DDR_SPI DDRB
#define DD_MOSI 3
#define DD_SCK 5
#define DD_SS 2
#define SPI_DS PORTB.3
#define SPI_SH PORTB.5
#define SPI_ST PORTB.2
void SpiMasterInit(void);
void SpiShiftByte(unsigned char nData);
void SpiWriteByte(unsigned char nData);
void SpiWrite4Bytes(unsigned char *pData);
void PutDigit(unsigned char nPos, unsigned nDigit, unsigned char nPt);
void PutByte(unsigned char nPos,unsigned char nByte);
void LedsGeserKanan(void);
void LedsGeserKiri(void);
unsigned char mDigits[4];
unsigned char mFont[11] = {63,6,91,79,102,109,125,7,127,111,0};
/***************************************************************/
void main(void)
{
unsigned char i;
SpiMasterInit();
while(1)
{
//semua led on
PutDigit(0,8,128);
PutDigit(1,8,128);
PutDigit(2,8,128);
PutDigit(3,8,128);
SpiWrite4Bytes(mDigits);
delay_ms(1000);
//semua led off
PutDigit(0,11,0);
PutDigit(1,11,0);
PutDigit(2,11,0);
PutDigit(3,11,0);
SpiWrite4Bytes(mDigits);
delay_ms(1000);
//geser kiri
PutDigit(0,0,0);
PutDigit(1,1,0);
PutDigit(2,2,0);
PutDigit(3,3,0);
SpiWrite4Bytes(mDigits);
delay_ms(1000);
LedsGeserKiri();
//geser kanan
PutDigit(0,0,0);
PutDigit(1,1,0);
PutDigit(2,2,0);
PutDigit(3,3,0);
SpiWrite4Bytes(mDigits);
delay_ms(1000);
LedsGeserKanan();
//counter up
for(i=0;i<200 font="" i="">200>
{
PutByte(0,i);
SpiWrite4Bytes(mDigits);
delay_ms(100);
}
delay_ms(2000);
//counter down
for(i=200;i>0;i--)
{
PutByte(0,i);
SpiWrite4Bytes(mDigits);
delay_ms(100);
}
}; //while
}
/**************************************************************/
void SpiMasterInit(void)
{
DDR_SPI = (1<
SPI_SH = 0;
SPI_DS = 0;
SPI_ST = 0;
}
/************************************************************/
void SpiShiftByte(unsigned char nData)
{
unsigned char i,nMask;
nMask = 0x80;
for(i=0;i<8 font="" i="">8>
{
SPI_SH = 0;
if(nData & nMask)
SPI_DS = 1;
else
SPI_DS = 0;
SPI_SH = 1;
#asm("nop");
SPI_SH = 0;
nMask = nMask >> 1;
}
}
/***************************************************************/
void SpiWriteByte(unsigned char nData)
{
SPI_ST = 0;
SpiShiftByte(nData);
SPI_ST = 1;
}
/*************************************************************/
void SpiWrite4Bytes(unsigned char *pData)
{
SPI_ST = 0;
SpiShiftByte(~*pData);
pData++;
SpiShiftByte(~*pData);
pData++;
SpiShiftByte(~*pData);
pData++;
SpiShiftByte(~*pData);
SPI_ST = 1;
}
/***************************************************************/
/***************************************************************/
void PutDigit(unsigned char nPos, unsigned nDigit, unsigned char nPt)
{
mDigits[nPos] = mFont[nDigit];
mDigits[nPos] = mDigits[nPos] | (nPt & 128);
}
/***************************************************************/
void PutByte(unsigned char nPos,unsigned char nByte)
{
unsigned char nDg;
//don vi
nDg = nByte % 100;
nDg = nDg % 10;
PutDigit(nPos,nDg,0);
//chuc
nDg = nByte/10;
nDg = nDg % 10;
PutDigit(++nPos,nDg,0);
//tram
nDg = nByte/100;
PutDigit(++nPos,nDg,0);
}
/***************************************************************/
void LedsGeserKanan(void)
{
unsigned char j,i;
for(i=0;i<4 font="" i="">4>
{
for(j=0;j<3 font="" j="">3>
mDigits[j] = mDigits[j+1];
mDigits[3] = mFont[10]; //off led
SpiWrite4Bytes(mDigits);
delay_ms(500);
}
}
/**************************************************************/
void LedsGeserKiri(void)
{
unsigned char j,i;
for(i=0;i<4 font="" i="">4>
{
for(j=3;j>0;j--)
mDigits[j] = mDigits[j-1];
mDigits[0] = mFont[10]; //off led
SpiWrite4Bytes(mDigits);
delay_ms(500);
}
}
0 Comments
Silahkan Tinggalkan Komentar Anda