Chào các bác, hiện tại em định làm project về piano sử sử dụng pic16f877a để code các nốt nhạc.
Về cơ bản thì em định phát bit 1 ra ngõ B1, theo một chu kỳ đã tính trước cứ mỗi nốt là có chu kỳ khác nhau. Các bác tham khảo code CCS bên dưới.
Vấn đề là nếu em sử dụng duy nhất dòng lặp for đầu tiên thì nó vẫn chạy được, nhưng khi thêm cái for thứ 2 thì chương trình thực hiện for đầu tới for thứ 2, nhưng mà không quay về for thứ 1. Em thử xóa for đầu tiên để chạy for 2 thì được, nhưng hể cứ thêm for khác nào vào trước nó thì cứ bị lặp tới for thứ 2 mà thôi. Với dòng cảnh báo Condition Alway True trước vòng lặp for thứ 2. Mong mọi người giúp đỡ!
[CODE]
#include <16F877A.h>
#device ADC=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(crystal=4M)
#define BUZZER PIN_B1
void main()
{
int i;
while(TRUE)
{
//Not nhac thu 1
for(i = 0; i < 31; i++)
{
OUTPUT_HIGH(BUZZER);
DELAY_MS(31);
OUTPUT_LOW(BUZZER);
}
delay_ms(1000);
//Not nhac thu 2
for(i = 0; i < 370; i++)
{
OUTPUT_HIGH(BUZZER);
DELAY_US(2703);
OUTPUT_LOW(BUZZER);
}
DELAY_MS(1000);
}
}
Về cơ bản thì em định phát bit 1 ra ngõ B1, theo một chu kỳ đã tính trước cứ mỗi nốt là có chu kỳ khác nhau. Các bác tham khảo code CCS bên dưới.
Vấn đề là nếu em sử dụng duy nhất dòng lặp for đầu tiên thì nó vẫn chạy được, nhưng khi thêm cái for thứ 2 thì chương trình thực hiện for đầu tới for thứ 2, nhưng mà không quay về for thứ 1. Em thử xóa for đầu tiên để chạy for 2 thì được, nhưng hể cứ thêm for khác nào vào trước nó thì cứ bị lặp tới for thứ 2 mà thôi. Với dòng cảnh báo Condition Alway True trước vòng lặp for thứ 2. Mong mọi người giúp đỡ!
[CODE]
#include <16F877A.h>
#device ADC=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(crystal=4M)
#define BUZZER PIN_B1
void main()
{
int i;
while(TRUE)
{
//Not nhac thu 1
for(i = 0; i < 31; i++)
{
OUTPUT_HIGH(BUZZER);
DELAY_MS(31);
OUTPUT_LOW(BUZZER);
}
delay_ms(1000);
//Not nhac thu 2
for(i = 0; i < 370; i++)
{
OUTPUT_HIGH(BUZZER);
DELAY_US(2703);
OUTPUT_LOW(BUZZER);
}
DELAY_MS(1000);
}
}
Comment