cần giúp phím nhấn và led đơn trên pic12f629

#1
12f629 phim va led.JPG
em có mấy con pic 12f629 giờ em muốn dùng nó để làm cái công tắc quạt 1 số như sau
dùng chân 4 nối vs phín nhấn,chân 5 làm chân out, khi cấp nguồn thì chân 5 ra mức thấp,khi nhấn nút 1 lần thì chân 5 out ra mức cao, ấn lần 2 ra mức thấp... cứ như vậy thôi, ae nào biết chỉ em vs???
( vd như lắp con led vào chân 5 thì kh cấp nguồn led tắt. khi ấn nút 1 lần led sáng, ấn lần 2 led tắt..lần 3 sáng, lần 4 tắt...vv)
 
Sửa lần cuối:
#2
Xem đính kèm 12463 em có mấy con pic 12f629 giờ em muốn dùng nó để làm cái công tắc quạt 1 số như sau
dùng chân 4 nối vs phín nhấn,chân 5 làm chân out, khi cấp nguồn thì chân 5 ra mức thấp,khi nhấn nút 1 lần thì chân 5 out ra mức cao, ấn lần 2 ra mức thấp... cứ như vậy thôi, ae nào biết chỉ em vs???
( vd như lắp con led vào chân 5 thì kh cấp nguồn led tắt. khi ấn nút 1 lần led sáng, ấn lần 2 led tắt..lần 3 sáng, lần 4 tắt...vv)
của bạn đây. mới học C nên đọc phím chưa được rút gọn mong bro nào sửa code lại cho gọn
Mã:
#include <htc.h>  
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF );  
#define _XTAL_FREQ 4000000  
#define sw GP3
void main()
{
    GPIO3=1;          
    GPIO2=0;              
    TRISIO3=1;      
    TRISIO2=0;              
    GP2=0;
    while(1)
    {
        if(!sw)                  
        {
            __delay_ms(100);  
            if(!sw) continue;
            GP2=1;
            __delay_ms(200);
lap:        if(sw)
            goto lap;          
            else
lap1:            if(!sw) goto lap1; 
                GP2=0;
                __delay_ms(200);
        }  
    }
}
 

Đính kèm

  • 41.5 KB Lượt xem: 206

mta_cdt

Super Moderator
Thành viên BQT
#3
của bạn đây. mới học C nên đọc phím chưa được rút gọn mong bro nào sửa code lại cho gọn
Mã:
#include <htc.h> 
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF ); 
#define _XTAL_FREQ 4000000 
#define sw GP3
void main()
{
    GPIO3=1;         
    GPIO2=0;             
    TRISIO3=1;     
    TRISIO2=0;             
    GP2=0;
    while(1)
    {
        if(!sw)                 
        {
GP2^=1;
_delay_ms(100);

    }
}
có lẽ như vậy là đủ
 
#4
có lẽ như vậy là đủ
không ổn bác ơi. code trên của mình nó thế này. nếu phím được nhấn thì chờ cho đến khi phím dược nhấn mới cho GP2=1 rồi tiếp tục kiểm tra phím nhấn lien tục. nếu phím được nhấn tiếp thì tiếp tục chờ phím nhả mới cho GP2==0 và quay lại while(1).
 
#5
được rồi. của bác phải thêm cái 1 vòng while nửa.thank bác:)
Mã:
#include <htc.h>  
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF );  
#define _XTAL_FREQ 4000000  
#define sw GP3
void main()
{
    GPIO3=TRISIO3=1;            // thiet lap GP3 là ngo vao
    GPIO2=TRISIO2=0;                    //thiet lap GP2 là ngo ra
    GP2=0;  
    while(1)
    {
        if(!sw)              
        {
            while(!sw){}
            GP2^=1;
            __delay_ms(100);
        }
    }  
}
 
#6
được rồi. của bác phải thêm cái 1 vòng while nửa.thank bác:)
em xin cám ơn ae nhé.em mô phỏng chạy tốt rồi, làm mạch thật xong em pm lại.hihi vui quá nhưng tiếc là em ko thể tự code dc, nếu tự code dc thì sung sướng nữa.kaka
 
#7
em phiền ae lần nữa, bây giờ em muốn làm cho cái quạt có 3 số,khi nhấn nút thì số 1 chạy, ấn tiếp lần 2 thì số 2 chạy, tiếp lần 3 thì số 3 chạy, tiếp lần 4 thì về số 1...cứ xoay vòng vậy nhưng với điều kiện ta ấn các nút sau ko quá 1 hoặc 2 giây/nếu để quá 5 giây mà ta ấn thì quạt sẽ tắt, nếu ấn lại quạt sẽ chạy số 1...tiếp như trên

( khi ấn nút led 1 sáng, ấn tiếp led 2 sáng, ấn tiếp led 3 sáng, ấn tiếp led 1 sang...cứ xoay vòng vậy nhưng với điều kiện các nút ko được ấn liên tục ko quá 1 hoặc 2 giây/// nếu sau 5 giây ta tiếp tục ấn led sẽ tắt, nếu ấn tiếp thì led 1 lại sáng, cứ xoay vòng như trên...)
cái này có vẻ hơi khó đấy ạ, ae nào có thể code em vs nhé,em xin cám ơn
12F629 LED DON 123.JPG
 
#8
em phiền ae lần nữa, bây giờ em muốn làm cho cái quạt có 3 số,khi nhấn nút thì số 1 chạy, ấn tiếp lần 2 thì số 2 chạy, tiếp lần 3 thì số 3 chạy, tiếp lần 4 thì về số 1...cứ xoay vòng vậy nhưng với điều kiện ta ấn các nút sau ko quá 1 hoặc 2 giây/nếu để quá 5 giây mà ta ấn thì quạt sẽ tắt, nếu ấn lại quạt sẽ chạy số 1...tiếp như trên

( khi ấn nút led 1 sáng, ấn tiếp led 2 sáng, ấn tiếp led 3 sáng, ấn tiếp led 1 sang...cứ xoay vòng vậy nhưng với điều kiện các nút ko được ấn liên tục ko quá 1 hoặc 2 giây/// nếu sau 5 giây ta tiếp tục ấn led sẽ tắt, nếu ấn tiếp thì led 1 lại sáng, cứ xoay vòng như trên...)
cái này có vẻ hơi khó đấy ạ, ae nào có thể code em vs nhé,em xin cám ơn Xem đính kèm 12508
nếu làm quạt sao bạn không dùng 2 nút bấm và làm thế này cho nó tiện. cắm điện bật nút ON/OFF xong bấm nút chọn số (SW)
- nếu bấm phím 1 lần thì led 1 sáng, bấm thêm 1 lần nửa thì led 1 tắt led 2 sáng , bấm thêm 1 lần nửa thì led2 tắt led 3 sáng và cứ chuyển tiếp như vậy.
- trong mổi lần bấm không quá 2 giây. nếu bấm 1 lần quá 2 giây thì nó tự động chuyển led như bấm thêm 1 lần nửa.....
- bấm nút ON/OFF thì led tắt
 
#9
E định kết hợp vs cái điều khiển từ xa,nếu làm 1 nút như e nói thì ko cần phải giải mã khiển mà mình dùng khiển nào cũng được.nếu làm 2 nút như bác thì phải giải mã khiển càng khó khăn hơn.
 
#10
E định kết hợp vs cái điều khiển từ xa,nếu làm 1 nút như e nói thì ko cần phải giải mã khiển mà mình dùng khiển nào cũng được.nếu làm 2 nút như bác thì phải giải mã khiển càng khó khăn hơn.
của bạn đấy. cái code này nếu bạn nhấn một phím quá 5 giây thì quạt sẻ tắt và trở về trạng thái ban đầu.
Mã:
#include <htc.h>   
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF );   
#define _XTAL_FREQ 4000000   
#define sw GP3
void main()
{
    unsigned long x;
    GPIO3=TRISIO3=1; 
    GPIO2=TRISIO2=0; 
    GPIO1=TRISIO1=0;
    GPIO0=TRISIO0=0;
    GP2=GP1=GP0=0;               
    while(1)
    {
        if(!sw) 
        {
            __delay_ms(10);
            x=0;   
            while(!sw){x++;if(x>165000)goto xoa;}
            GP0=0;GP2=1;
            __delay_ms(100);
            while(sw){}
            __delay_ms(10);
            x=0;
            while(!sw){x++;if(x>165000)goto xoa;}
            GP2=0;GP1=1;
            __delay_ms(100);
            while(sw){}
            __delay_ms(10);
            x=0;
            while(!sw){x++;if(x>165000)goto xoa;}
            GP1=0;GP0=1;
            __delay_ms(100);
        }   
    }
xoa:    GP0=GP1=GP2=0;
        __delay_ms(100);
        while(!sw){}
}
 

Quảng cáo Google