PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 27-04-2007, 12:44 PM   #1
HSIC
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,
bây giờ để dịch từ cột thứ nhất đến cột thứ 16, và lặp lại liên tục mình làm thế này có đúng không. mình viết một hàm để làm công việc đó. chẳng hạn

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);
        }
}
nhờ các bạn xem có đúng không mình chạy nó không đúng . Nếu sai nhờ các bạn sử lại giúp mình với.
Cảm ơn nhiều.

thay đổi nội dung bởi: falleaf, 27-04-2007 lúc 01:44 PM.
HSIC vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2007, 07:25 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-05-2007, 02:03 PM   #3
HSIC
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:
Nguyên văn bởi HSIC View Post
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,
bây giờ để dịch từ cột thứ nhất đến cột thứ 16, và lặp lại liên tục mình làm thế này có đúng không. mình viết một hàm để làm công việc đó. chẳng hạn

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);
        }
}
nhờ các bạn xem có đúng không mình chạy nó không đúng . Nếu sai nhờ các bạn sử lại giúp mình với.
Cảm ơn nhiều.
HSIC vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-05-2007, 06:14 PM   #4
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi HSIC View Post

[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);
}
}
Về cú pháp code này chắc chắn chạy sai vì tham số đầu tiên truyền cho hàm shift_right() phải là một con trỏ

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
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-05-2007, 11:09 AM   #5
HSIC
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]
HSIC vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:47 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam