|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
27-04-2007, 12:44 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: May 2006
Bài gửi: 3
: |
Quang Bao
Các Bạn cho mình hỏi một tý nhé. về câu lệnh Shift_right(). và shift_left().
mình có một chuổi như thế này. gồm có 16 cột và 8 hàng Code:
int8 buffer[16]= { 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, Code:
void dich_phai() { int8 i; for(i=0;i<8;i++) { shift_right(buffer[i*2],1,0);// i nhân 2 byte ơ vị trí đầu tiên shift_right(buffer[i*2+1],1,0); } delay_ms(100); } .................................................... void main() { ...................................... while() { dich_phai(); delay_ms(100); } } Cảm ơn nhiều. thay đổi nội dung bởi: falleaf, 27-04-2007 lúc 01:44 PM. |
27-04-2007, 07:25 PM | #2 |
Trưởng lão PIC bang
|
Có vẻ như bạn đang dùng C để viết chương trình, nhưng bạn chưa cho biết bạn đang dùng trình biên dịch C nào. Với vi điều khiển thì không phải trình biên dịch C nào cũng giống nhau. Nếu bạn cho biết chip đang được dùng thì càng tốt.
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
08-05-2007, 02:03 PM | #3 | |
Nhập môn đệ tử
Tham gia ngày: May 2006
Bài gửi: 3
: |
Quang Bao
Toi dang dung trinh dich CCS C
va co pic toi dang dung la 16F876A Trích:
|
|
08-05-2007, 06:14 PM | #4 | |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Trích:
shift_right(&buffer[i*2],1,0); Về giải thuật theo như tôi hiều, bạn muốn dịch các bit từ mảng ra IO chẳng hạn, nếu đúng như vậy thì như trên là sai vì hàm shift_right() dịch bit vào trong biến. VD: char a=255; shift_right(&a, 1, 0); //a = 254 shift_right(&a, 1, 0); //a = 252 shift_right(&a, 1, 0); //a = 248 Bạn nên coi lại help |
|
09-05-2007, 11:09 AM | #5 |
Nhập môn đệ tử
Tham gia ngày: May 2006
Bài gửi: 3
: |
Quang bao
Cảm ơn các bạn đã đóng gốp ý kiến. nhưng H sẽ gởi nguyên đoạn chương trình của H nhờ các bạn xem và sửa lại giúp H.
Ở đây H muốn cho nó chạy từ cột thứ nhất đến cột thứ 16 và lặp lại. hoặc là cho nó chạy một chử nào đó. H chua làm được . H dùng xuất dữ liệu ra cột và quét hàng. về phần cứng H dùng 1 con 74hc595 quét hàng. 2 con 74hc595 xuất dữ liệu ra cột. mong được sự giúp đở của các bạn. Cảm ơn nhiều. //################################################# #include <C:\Program Files\PICC\Devices\16F876A.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=4800, xmit=PIN_C6,rcv=PIN_C7) //chan17, 18 #use fast_io(A) #use fast_io(B) #define col_stb PIN_A1 //chan 2 #define col_clk PIN_A0 // chan 3 #define col_data PIN_A2 // chan 4 #define row_data PIN_B2 //chan 23 #define row_clk PIN_B4 //chan 25 #define row_stb PIN_B3 //chan 24 #define row_en PIN_B1 // chan22 int8 row=0; int8 cot_dich=0; int16 begin_of_read=0; int8 buffer[16]= { 0b01111111,0b11111111, // 0 là led sang, 1 led tắt. 0b01111111,0b11111111,// vị trí 0 là cột thứ nhất 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, 0b01111111,0b11111111, }; void display_mot_byte(int8 d) { output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); output_low(col_clk); output_bit(col_data,shift_right(&d,1,0)); output_high(col_clk); } //################################################## #INT_TIMER0 void timer0_isr() { output_low(Pin_A2); set_timer0(250); output_low(col_stb); display_mot_byte(buffer[begin_of_read+row+0]); display_mot_byte(buffer[begin_of_read+row+1]); output_high(row_en); if(row==0) { output_low(row_stb); output_low(row_clk); output_low(row_data); output_high(row_clk); output_high(row_stb); } else { output_low(row_stb); output_low(row_clk); output_high(row_data); output_high(row_clk); output_high(row_stb); } output_high(col_stb); output_low(row_en); row++; begin_of_read=begin_of_read+1; if(row==8) { row=0; begin_of_read=cot_dich*1; } output_high(Pin_A2); } //################################################# void reset_row() { int8 i; output_high(row_data); output_low(row_stb); for(i=0;i<8;i++) { output_low(row_clk); output_high(row_clk); } output_high(row_stb); row=0; } //################################################## void thay_doi() { int8 i; for(i=0;i<8;i++) { shift_right(buffer[i*2],1,0); shift_right(buffer[i*2+1],1,0); } delay_ms(100); } //shift_rignt(address,byte,value) //################################################## void main() { set_tris_A(0); set_tris_b(0); reset_row(); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); enable_interrupts(int_timer0); // set_timer0(250); enable_interrupts(global); // cho phep ngat toan cuc while(1) { thay_doi(); delay_ms(100); } }[/QUOTE] |
|
|