![]() |
|
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ử 2 túi
Tham gia ngày: Jan 2011
Bài gửi: 37
: |
vâng
đây là code của em #include <16F886.h> #device adc=10 #FUSES NOWDT //No Watch Dog Timer #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOPUT //No Power Up Timer #FUSES MCLR //Master Clear pin enabled #FUSES PROTECT //Code not protected from reading #FUSES NOCPD //No EE protection #FUSES BROWNOUT //Reset when brownout detected #FUSES NOIESO //No Internal External Switch Over mode enabled #FUSES NOFCMEN //No Fail-safe clock monitor enabled #FUSES NOLVP //No Low Voltage Programming on B3(PIC16) or B5(PIC18) #FUSES NODEBUG //No Debug mode for ICD #FUSES WRT //Program memory write protected #FUSES BORV40 //Brownout reset at 4v #use delay(clock=4000000) #byte PORTB = 0x06 #byte TRISB = 0x86 //=============================== //define com //mant //=============================== //#define data PIN_B5 //#define //#define SHIFT_CLK_1 PORTB |= 0b00010000 //#define SHIFT_CLK_0 PORTB &= ~0b00010000 #define SHIFT_DTA_1 PORTB |= 0b00100000 #define SHIFT_DTA_0 PORTB &= ~0b00100000 #define MASK_LED_0 0b00101000 #define MASK_LED_1 0b10101111 #define MASK_LED_2 0b10011000 #define MASK_LED_3 0b10001010 #define MASK_LED_4 0b00001111 #define MASK_LED_5 0b01001010 #define MASK_LED_6 0b01001000 #define MASK_LED_7 0b10101110 #define MASK_LED_8 0b00001000 #define MASK_LED_9 0b00001010 //int16 n; const unsigned char dta[10] = {MASK_LED_0,MASK_LED_1,MASK_LED_2,MASK_LED_3,MASK_ LED_4, MASK_LED_5,MASK_LED_6,MASK_LED_7,MASK_LED_8,MASK_L ED_9}; //=============================== //dinh nghia cac ham //=============================== void sckc(); void lat(); void dichbit(); //=============================== //tao xung clock //=============================== void sckc() { //PORTB=0b11110111 output_high(PIN_B4); delay_us(200); output_low(PIN_B4); delay_us(200); } //=============================== //tao xung latch va hien thi //=============================== void lat() { //PORTB=0b11101111 output_high(PIN_B3); delay_us(200); output_low(PIN_B3); delay_us(200); } //=============================== //DICH BIT //n la so phan tu mang //i so lan lap dich bit //=============================== void main() { unsigned char mask,i,n; int8 dk; mask = 0x80; for(n=0;n<10;n++) { for(i=0;i<8;i++) { if( dta[n] & mask ) {SHIFT_DTA_1;} else {SHIFT_DTA_0;} sckc(); mask>>=1; } dk=0b00001111; if(dk & mask) {SHIFT_DTA_1;} else {SHIFT_DTA_0;} sckc(); mask>>=1; lat(); delay_ms(2000); } } |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 5 túi
Tham gia ngày: Dec 2010
Bài gửi: 101
: |
Trích:
gợi ý nhé. int dulieu = 0x01,i,y; int1 value; for(i=8;i>=1;i--) { value = bit_test(dulieu,i-1); data = value; // data la chân dử liệu 595 ckl = 0; // chân xung nhip ckl=1; chot=0; // chân chốt chot=1; } ở đây chương trình chạy như sau bắt đầu lấy bít 7 dử liệu đưa ra rồi chốt liền ,lần thứ 2 sẽ là 6 và 5 dến 0 cứ thế . còn nếu bạn muốn đưa nguyên byte rồi chốt thì làm như sau: int dulieu = 0x01,i,y; int1 value; for(i=8;i>=1;i--) { value = bit_test(dulieu,i-1); data = value; // data la chân dử liệu 595 ckl = 0; // chân xung nhip ckl=1; } chot=0; // chân chốt chot=1; cái lệnh bit_test này tốn rất ít chu kỳ máy so với if mình thường đưa bít 7 vào trước để dữ liệu ra giống như dữ liệu vào,còn đưa bít 0 ra trước thì dữ liệu sẻ đảo lại. bản thân thanh ghi dịch bên trong 595 la dịch trái.đi ăn cái gì đã đói bụng thế thay đổi nội dung bởi: phatcddt08a, 08-07-2011 lúc 01:39 PM. |
|
![]() |
![]() |
![]() |
|
|