Chào các bạn trong hai bài đăng trước mình đã giới thiệu với các bạn về IC74HC595 rồi và cũng như cấu tạo về cách nó hoạt động như thế nào ! Và tại sao chúng ta lại sử dụng IC này vì nó rất dễ sử dụng và tiết kiệm được rất nhiều chân cho chúng ta ! Vì vậy các bạn cần nắm vững kiến thức về nó để sử dụng IC này nha ! Trong bài này mình sẽ tiếp tục với LED 7SEG cụ thể là đếm từ 0 đến 9 sử dụng IC74HC595 và Vi Điều Khiển PIC16F877A !
- Đây là ảnh mô phỏng trên phần mềm protues.
- Đây là code chương trình.
- Đây là ảnh mô phỏng trên phần mềm protues.
- Đây là code chương trình.
#INCLUDE <16F877a.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=16M)
const unsigned char Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
/* Dinh nghia cac chan cua IC74HC595 */
#define SHCP_PIN PIN_C0
#define DS_PIN PIN_C1
#define STCP_PIN PIN_C2
unsigned int Cnt = 0,i = 0;
void IC_74hc595(unsigned int data)
{
OUTPUT_LOW(SHCP_PIN);
for(i=0;i<=7;i++)
{
if((data & 0x80)==0)
OUTPUT_LOW(DS_PIN);
else
OUTPUT_HIGH(DS_PIN);
data=data<<1;
OUTPUT_HIGH(SHCP_PIN);
OUTPUT_LOW(SHCP_PIN);
}
}
void IC_74HC595_Output()
{
OUTPUT_LOW(SHCP_PIN);
delay_us(5);
OUTPUT_HIGH(STCP_PIN);
OUTPUT_LOW(STCP_PIN);
}
void main(void)
{
SET_TRIS_C (0X00);
OUTPUT_C (0X00);
while(1)
{
IC_74hc595(Code7Seg[Cnt]);
IC_74HC595_Output();
Cnt++;
for(i=0;i<5;i++)
{
delay_ms(100);
if(Cnt == 10)
{
Cnt = 0;
}
}
}
}
- Link download project Click here#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=16M)
const unsigned char Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
/* Dinh nghia cac chan cua IC74HC595 */
#define SHCP_PIN PIN_C0
#define DS_PIN PIN_C1
#define STCP_PIN PIN_C2
unsigned int Cnt = 0,i = 0;
void IC_74hc595(unsigned int data)
{
OUTPUT_LOW(SHCP_PIN);
for(i=0;i<=7;i++)
{
if((data & 0x80)==0)
OUTPUT_LOW(DS_PIN);
else
OUTPUT_HIGH(DS_PIN);
data=data<<1;
OUTPUT_HIGH(SHCP_PIN);
OUTPUT_LOW(SHCP_PIN);
}
}
void IC_74HC595_Output()
{
OUTPUT_LOW(SHCP_PIN);
delay_us(5);
OUTPUT_HIGH(STCP_PIN);
OUTPUT_LOW(STCP_PIN);
}
void main(void)
{
SET_TRIS_C (0X00);
OUTPUT_C (0X00);
while(1)
{
IC_74hc595(Code7Seg[Cnt]);
IC_74HC595_Output();
Cnt++;
for(i=0;i<5;i++)
{
delay_ms(100);
if(Cnt == 10)
{
Cnt = 0;
}
}
}
}
EmoticonEmoticon