![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Jun 2009
Bài gửi: 18
: |
Bài tập nút nhấn cẩn giúp đỡ
Mình có viết 1 CT điều khiển có 2 nút nhấn. Khi nhấn phím 1 thì led đơn 1 sáng và led 7 hiện số 1. Tương tự khi bấm số 2
Vấn đề mình cần giúp là khi mình tắt nguồn và bật lại thì led 7 đoạn, led đơn vẫn hiện 1 số. Ý mình là khi bật nguồn tất cả sẽ tắt hết để mình chọn lại số mình muốn Thanks code: (Nhờ mọi người chỉ mình cách bỏ vào thẻ code) #include <16F877A.h> #include <DEF_877A.h> #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP #use delay(clock=20000000) #define led0 rd0 #define led1 rd1 #define bt0 rc0 #define bt1 rc1 #define loa ra2 #define led7vcc ra0 #define data_led portb #define led_singer portd char dig[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; void display_int(int x) { int i; i = x%10; led7vcc = 0; data_led = dig[i]; delay_ms(2); led7vcc = 1; } void led_don(int i) { switch(i) { case 1: led_singer = 0x01; break; case 2: led_singer = 0x02; break; default:led_singer = 0x00; break; } } int detect_sw() { int i ; if(bt0 == 0) { i=1; loa = 1; delay_ms(50); loa = 0; delay_ms(200); } if(bt1== 0) { i=2; loa = 1; delay_ms(50); loa = 0; delay_ms(200); } return i; } void main() { int i ; trisa = 0x00; trisb = 0x00; trisc = 0xff; trisd = 0x00; porta = 0x00; portb = 0x00; portc = 0x00; portd = 0x00; while(true) { i = detect_sw(); display_int(i); led_don(i); } } |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 7 túi
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
: |
Trích:
Code:
#include <16F877A.h> #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP #use delay(clock=20000000) #define led0 rd0 #define led1 rd1 #define bt0 rc0 #define bt1 rc1 #define loa ra2 #define led7vcc ra0 #define data_led portb #define led_singer portd const unsigned char dig[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; void display_int(int dta) { led7vcc = 0; if(dta==0) data_led = dig[0xFF]; else data_led = dig[dta%10]; delay_ms(2); led7vcc = 1; } void led_don(int dta) { switch(dta) { case 0: led_singer = 0x00;break; case 1: led_singer = 0x01; break; case 2: led_singer = 0x02; break; default:led_singer = 0x00; break; } } int detect_sw() { int dta ; if(bt0 == 0) { dta=1; loa = 1; delay_ms(50); loa = 0; delay_ms(200); }; if(bt1== 0) { dta=2; loa = 1; delay_ms(50); loa = 0; delay_ms(200); } ; return dta; } void main() { int i =0; trisa = 0x00; trisb = 0x00; trisc = 0xff; trisd = 0x00; porta = portb = portc = portd = 0x00; while(1) { i=detect_sw(); display_int(i); led_don(i); } } |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 4 túi
|
khi tắt nguồn các giá trị biến vẫn được lưu. nên bạn lúc đặt biến bạn gán kèm theo giá trị ban đầu cho nó.
anh Mr Bi hình như đã giải quyết dùm bạn!! |
![]() |
![]() |
![]() |
#4 |
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Code:
int detect_sw() { int i=0 ; ... } Regards
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com |
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Aug 2009
Bài gửi: 1
: |
chu cung dang co 1 bai tap lam mach nhay 8 led don.bac nao biet mach va chuong trinh nao don gian giup cho chu voi.chu gio moi hoc pic nen con rat mo ho lam.chua hieu gi lam.mong cac bac giup do.cam on cac bac truoc!
|
![]() |
![]() |
![]() |
Tags |
#include <16f877a.h> |
|
|