![]() |
|
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 |
![]() |
#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] |
![]() |
![]() |
|
|