PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 30-11-2008, 06:07 PM   #1
phamminh05
Nhập môn đệ tử
 
Tham gia ngày: Sep 2008
Bài gửi: 2
:
Làm sao tạo ra âm thanh?

Em là 1 newbie,đang viết 1 chương trình nho nhỏ bằng MCC18,đồng hồ có chức năng hẹn giờ(các nút chức năng gần giống với cái đồng hồ Casio).Khi đến giờ đã hẹn,nó sẽ phát âm thanh ra loa.Nhưng em đang gặp phải 2 vấn đề là:
1.Em dùng ngắt INT0 đề chuyển từ chế độ đồng hồ sang chế độ hẹn giờ(thể hiện qua button: ALARM IN trên mạch Proteus kèm theo) nhưng không hiểu vì sao nó không chuyển qua được.
2.Không biết viết hàm play_sound như thế nào để tạo ra âm thanh?
Mấy pro giúp giùm em với,cám ơn rất rất nhiều.

#include<p18f4550.h>
#include<timers.h>
#pragma config WDT=OFF, PWRT=OFF, LVP=OFF, CP0=OFF, CP1=OFF,CP2=OFF,CP3=OFF, WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF
#pragma config WRTB=OFF,WRTC=OFF,WRTD=OFF,EBTR0=OFF,EBTR1=OFF,EBT R2=OFF,EBTR3=OFF,EBTRB=OFF

void init(void);
void led(unsigned char x);
void interrupt_timer0(void);//se thiet lap timer0 co interrupt la cao
//void interrupt_timer1(void);//se thiet lap timer1 co interrupt la thap
void global_int(void);
void play_sound(void);
void int0_external(void);
static unsigned char table[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10 };
unsigned char count = 0;
unsigned char mi0; //phut
unsigned char mi1;
unsigned char ho0; //gio
unsigned char ho1;
unsigned char mi02; //hen gio cho phut
unsigned char mi12;
unsigned char ho02; //hen gio cho gio
unsigned char ho12;
unsigned char test; //chuyen che do giua hen gio va dong ho
unsigned char mode; //chon chinh gio,chinh phut hay khong chinh gi ca


#pragma code high_vector = 0x08
void high_vector (void){
_asm
GOTO int0_external
_endasm
}

#pragma code low_vector = 0x18
void low_interrupt(void){
//if(INTCONbits.TMR0IF) interrupt_timer0();
//if(PIR1bits.TMR1IF) interrupt_timer1();
_asm
GOTO interrupt_timer0
_endasm
}
#pragma code
#pragma interrupt int0_external
void int0_external(void){
//INTCONbits.INT0IF = 0;
test = 1; // chuyen qua hen gio
mi02 = 0;
mi12 = 0;
ho02 = 0;
ho12 = 0;
while(1){
if(PORTAbits.RA1 == 0){//chon mode:chinh gio hoac phut hoac khong chinh gi
if(PORTAbits.RA0 == 0)//thoat khoi vong lap
break;
mode++;
mode = mode%3;
if(mode == 0){//khong chinh:2 den led bao hieu khong sang
PORTAbits.RA3 = 0;//2 led gan o 2 chan 3,4 cua PORTA dung de bao hieu cho nguoi dung biet dang chon o mode nao
PORTAbits.RA4 = 0;
}
if(mode == 2){//chinh phut
PORTAbits.RA3 = 0;//den led bao hieu dang chinh o phut se sang
PORTAbits.RA4 = 1;

while(1){
if(PORTAbits.RA2 == 0){ //nut thu 3 dung de chinh tang len 1 don vi
if(PORTAbits.RA1 == 0)
break;
if(mi02 >= 9){
mi02 = 0;
if(mi12 >= 5){
mi12 = 0;
}
else
mi12++;
}else
mi02++;
}
}
}

if(mode == 1){ //chinh gio
PORTAbits.RA3 = 1;//den led bao hieu dang o chinh o gio se sang
PORTAbits.RA4 = 0;
while(1){
if(PORTAbits.RA2 == 0){
if(PORTAbits.RA1 == 0)
break;
if((ho02 >= 9)&&(ho12 == 0)){
ho02 = 0;
ho1++;
}else if((ho02 >=4)&&(ho12 == 2)){
ho02 = 0;
ho12 = 0;
}
else
ho02++;
}
}
}

}
}
test = 0;//ve dong ho binh thuong
}

/*void interrupt_timer1(void){
PIR1bits.TMR1IF = 0;
if(count > 3){
count = 0;
}
led(count);
count++;
}*/
#pragma interruptlow interrupt_timer0
void interrupt_timer0(void){
INTCONbits.TMR0IF = 0;
if(mi0 >= 9){ //vao luc xx:x9
mi0 = 0;
if(mi1 >= 5){ //vao luc xx:59
mi1 = 0;
if((ho0 >= 9)&&(ho1 == 0)){ //vao luc x9:59
ho0 = 0;
ho1++;
}else if((ho0 >=4)&&(ho1 == 2)){
ho0 = 0;
ho1 = 0;
}else
ho0++;
}
else
mi1++;
}
else
mi0++;
}

void led(unsigned char x){
if(test == 0){ //hien thi dong ho
if(x == 0){ //se hien thi o led chi phut thu nhat(led so 0)
PORTD = table[mi0];
//PORTDbits.RD0 = 1; // day la code dung de quet led,chuong trinh se quet led tu phai(led so 0) qua trai(led so 3)
//PORTDbits.RD1 = 0;
//PORTDbits.RD2 = 0;
//PORTDbits.RD3 = 0;
PORTC = 0x10; //dien giai chi tiet ra la 3 dong o tren,hay 3 dong o tren tuong duong voi dong nay

}
else if(x == 1){ //se hien thi o led chi phut thu hai(led so 1)
PORTD = table[mi1];
PORTC = 0x20;
}
else if(x == 2){ // se hien thi o led chi gio thu nhat(led so 2)
PORTD = table[ho0];
PORTC = 0x40;
}
else{ // x == 3 // se hien thi o led chi gio thu hai(led so 3)
PORTD = table[ho1];
PORTC = 0x80;
}
}
if(test == 1){//hien thi o che do hen gio
if(x == 0){
PORTD = table[mi02];
PORTC = 0x10;
}
if(x == 1){
PORTD = table[mi12];
PORTC = 0x20;
}
if(x == 2){
PORTD = table[ho02];
PORTC = 0x40;
}
if(x == 3){
PORTD = table[ho12];
PORTC = 0x80;
}
}


}
void play_sound(void){
}

void init(void){
mi0 = 0;
mi1 = 0;
ho0 = 0;
ho1 = 0;
mi02 = 0;
mi12 = 0;
ho02 = 0;
ho12 = 0;
test = 0;
mode = 0;


//OpenTimer1( TIMER_INT_ON &T1_16BIT_RW &T1_SOURCE_INT &T1_PS_1_1 &T1_OSC1EN_OFF &T1_SYNC_EXT_OFF );
OpenTimer0 (TIMER_INT_ON & T0_SOURCE_INT & T0_16BIT & T0_PS_1_8);
INTCON2bits.TMR0IP = 0; //ngat timer0 la uu tien cao
INTCONbits.INT0IE = 1;
INTCON2bits.INTEDG0 = 0;
//IPR1bits.TMR1IP = 0; //ngat timer1 la uu tien thap
TMR0L = 0xFF;//chay thoi gian
TMR0H = 0xFF;
//TRISB = 0xFF;
TRISD = 0x00;
TRISA = 0x07; // 0b0000 0111 => PORTAbits.RA0-1-2 :dung de input nen bang 1
TRISC = 0x00;

}
void global_int(void){
RCONbits.IPEN = 1;
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;
}

void main(){
global_int();
init();
while(1){
int i;
for(i = 0;i<2000;i++){//delay
i++;
}
if(count > 3){
count = 0;
}
led(count);
count++;
//if((mi0 == mi02)&&(mi1 == mi12)&&(ho0 == ho02)&&(ho1 == ho12)){
// play_sound();
//}
}
}
File Kèm Theo
File Type: rar Tuoc2.rar (56.3 KB, 38 lần tải)
phamminh05 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 02:56 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam