Em dùng AVR studio, atmega 16, làm việc với 8 led kết nối lần lượt qua PORTA với thứ tự lần lươt từ PA0 đến PA7.
Ý tưởng: viết hàm trả về giá trị só int sao cho đổi ra bin thì ứng với 1 số lượng led sáng, ở vị trí xác định, khi cần xuất thì gán PORTA cho hàm này:
//---------------------------------------------------------
int on_x(int x,int y) // y== amount led on
{
int pos=0;
int result=0;
while(y>0)
{
pos+=pow(2,x+y-2);
y--;
};
result=(255-pos);
return result;
}
//----------------------------------------
ở đây led nào sáng em cho bit từ PORT xuất =0.
với x là vị trí led đầu tiên trong số các led sáng (bit có trọng số thấp nhất trong các led được bật)
y là tỏng bộ số led sáng (sao cho led ứng với bit có trọng số thấp nhất là x)
pos lưu giá trị ứng với các vị trí led càn bật thì bit =1;
255-pos <hệ dec> = 1111111 - pos <hệ bin>; vd muốn sáng ở vị trí 5, sáng 3 led thì:
result=11111111- 00111000
ở đáyPA7 là vị trí x=8; PÂ6 là x=7... PA0 là x=1.
Kết quả chạy trên win32 console VC6++ thi hàm đó xuất đúng giá trị mong muốn.
Nhưng khi chạy thật trên Avr studio; vd: gán PORTA=on_x(5,3) thì không được, led ở VT luôn bị tắt, còn lại thì có những led ko bật thì cũng sáng.
Em đã thử các biến trong hàm thành toàn cục thì kết quả vẫn vậy.
Ý tưởng: viết hàm trả về giá trị só int sao cho đổi ra bin thì ứng với 1 số lượng led sáng, ở vị trí xác định, khi cần xuất thì gán PORTA cho hàm này:
//---------------------------------------------------------
int on_x(int x,int y) // y== amount led on
{
int pos=0;
int result=0;
while(y>0)
{
pos+=pow(2,x+y-2);
y--;
};
result=(255-pos);
return result;
}
//----------------------------------------
ở đây led nào sáng em cho bit từ PORT xuất =0.
với x là vị trí led đầu tiên trong số các led sáng (bit có trọng số thấp nhất trong các led được bật)
y là tỏng bộ số led sáng (sao cho led ứng với bit có trọng số thấp nhất là x)
pos lưu giá trị ứng với các vị trí led càn bật thì bit =1;
255-pos <hệ dec> = 1111111 - pos <hệ bin>; vd muốn sáng ở vị trí 5, sáng 3 led thì:
result=11111111- 00111000
ở đáyPA7 là vị trí x=8; PÂ6 là x=7... PA0 là x=1.
Kết quả chạy trên win32 console VC6++ thi hàm đó xuất đúng giá trị mong muốn.
Nhưng khi chạy thật trên Avr studio; vd: gán PORTA=on_x(5,3) thì không được, led ở VT luôn bị tắt, còn lại thì có những led ko bật thì cũng sáng.
Em đã thử các biến trong hàm thành toàn cục thì kết quả vẫn vậy.
Comment