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]= Code:
void dich_phai() Cảm ơn nhiều. |
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, |
Quang Bao
Toi dang dung trinh dich CCS C
va co pic toi dang dung la 16F876A Trích:
|
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 |
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] |
Múi giờ GMT. Hiện tại là 12:39 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam