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]
|