با عرض سلام وخسته نباشید خدمت کاربران عزیز
من دو برنامه GLCD و راه اندازی موس در زیر آوردم که میخوام با استفاده از این دو برنامه و توابع فرعی آنها:
1- برنامه ای که port b را بخونه و به ازای عدد ورودی نموداری روی GLCD بالا وپایین شود
نمودار شامل ستون های 30 تا 38 شود.
2- برنامه ای که با استفاده از زیربرنامه های موس یک ستون روی GLCD از وسط به ازای حرکت موس به بالا . بالا وبه ازای حرکت موس به پایین . پایین رود.
لطفا کمکم کنید خیلی روشون کار کردم ولی نتونستم انجام بدم
1- برنامه GLCD
#include <mega16.h>
void command (unsigned char);
void display (unsigned char);
void ready (void);
void lcd_clr (void);
void main(void) {
unsigned char x;
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0xFF;
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x00;
// LCD module initialization
command(0x3F);
command(0xB8);
command(0x42);
command(0xC0);
lcd_clr();
while (1) {
x = PIND;
x = x | 0xB8;
x = x & 0xBF;
command(x);
command(0x42);
display(PINB);
};
}
void command(unsigned char x) {
ready();
PORTA = x;
PORTC.0 = 0;
PORTC.1 = 0;
PORTC.2 = 1;
PORTC.2 = 0;
}
void display(unsigned char x) {
ready();
PORTA = x;
PORTC.0 = 1;
PORTC.1 = 0;
PORTC.2 = 1;
PORTC.2 = 0;
}
void ready(void) {
DDRA = 0x7F;
PORTC.0 = 0;
PORTC.1 = 1;
do {
PORTC.2 = 1;
PORTC.2 = 0;
}
while (PINA.7 == 1);
DDRA = 0xFF;
}
void lcd_clr (void) {
unsigned char i, j;
for (i=0; i<8; i++)
for (j=0; j<64; j++) {
command(0xB8 + i);
command(0x40 + j);
display(0x00);
};
}
2- برنامه موس
#include <mega16.h>
#include <delay.h>
unsigned char mouse_r (void);
void mouse_w (unsigned char);
void mouse_on (void);
void main(void) {
unsigned char y, x, s, ch;
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
mouse_on( );
while (1) {
s = mouse_r( ) ;
x = mouse_r( ) ;
y = mouse_r( ) ;
PORTA = 0x00;
ch = s;
ch &= 0xC0;
if (ch == 0) {
ch = s;
ch &= 0x10;
if (ch!=0) {
x = 255 - x;
if (x != 0) PORTA.0 = 1;
else PORTA.0 = 0;
}
else
if ( x!= 0) PORTA.1 = 1;
else PORTA.1 = 0;
ch = s;
ch &= 0x20;
if (ch != 0) {
y = 255 - y;
if (y != 0) PORTA.2 = 1;
else PORTA.2 = 0;
}
else
if (y != 0) PORTA.3 = 1;
else PORTA.3 = 0;
//key check
ch = s;
ch &= 0x02;
if (ch != 0) PORTA.4 = 1;
ch = s;
ch &= 0x01;
if (ch != 0) PORTA.6 = 1;
ch = s;
ch &= 0x04;
if (ch != 0) PORTA.5 = 1;
};
};
}
unsigned char mouse_r (void) {
unsigned char c, a, i = 0;
DDRB = 0x00;
while (PINB.0 == 0 & PINB.1 == 0);
while (PINB.0 == 1 & PINB.1 == 1);
while (PINB.0 == 0);
while (PINB.0 == 1);
for (i=0; i<8; i++) {
c = PINB;
c = c << 6;
c = c & 0x80;
a = a >> 1;
a = a ^ c;
while (PINB.0 == 0);
while (PINB.0 == 1);
};
while (PINB.0 == 0 & PINB.1 == 0);
return a ;
}
void mouse_w (unsigned char x) {
unsigned char i, c, p = 0;
PORTB = 0x03;
DDRB = 0x03;
while (PINB.0 == 0 & PINB.1 == 0);
PORTB.0 = 0;
delay_us(100);
PORTB.1 = 0;
PORTB.0 = 1;
DDRB = 0x02;
while (PINB.0 == 1);
for (i=0; i<8; i++) {
c = x;
c = c & 0x01;
x = x >> 1;
PORTB.1 = c;
if (c == 1) p += 1;
while (PINB.0 == 0);
while (PINB.0 == 1);
};
p = p%2;
if (p == 0) PORTB.1 = 1;
else PORTB.1 = 0;
while (PINB.0 == 0);
while (PINB.0 == 1);
PORTB.1 = 1;
DDRB = 0x00;
while (PINB.0 == 1 & PINB.1 == 1);
while (PINB.0 == 0 & PINB.1 == 0);
}
void mouse_on ( ) {
unsigned char y;
mouse_w(0xFF);
y = mouse_r( );
y = mouse_r( );
mouse_w(0xEA);
y = mouse_r( );
mouse_w(0xE8);
y = mouse_r( );
mouse_w(0x01);
y = mouse_r( );
mouse_w(0xF3);
y = mouse_r( );
mouse_w(0x0A);
y = mouse_r( );
mouse_w(0xF4);
y = mouse_r( );
}
:bye
من دو برنامه GLCD و راه اندازی موس در زیر آوردم که میخوام با استفاده از این دو برنامه و توابع فرعی آنها:
1- برنامه ای که port b را بخونه و به ازای عدد ورودی نموداری روی GLCD بالا وپایین شود
نمودار شامل ستون های 30 تا 38 شود.
2- برنامه ای که با استفاده از زیربرنامه های موس یک ستون روی GLCD از وسط به ازای حرکت موس به بالا . بالا وبه ازای حرکت موس به پایین . پایین رود.
لطفا کمکم کنید خیلی روشون کار کردم ولی نتونستم انجام بدم
1- برنامه GLCD
#include <mega16.h>
void command (unsigned char);
void display (unsigned char);
void ready (void);
void lcd_clr (void);
void main(void) {
unsigned char x;
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0xFF;
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x00;
// LCD module initialization
command(0x3F);
command(0xB8);
command(0x42);
command(0xC0);
lcd_clr();
while (1) {
x = PIND;
x = x | 0xB8;
x = x & 0xBF;
command(x);
command(0x42);
display(PINB);
};
}
void command(unsigned char x) {
ready();
PORTA = x;
PORTC.0 = 0;
PORTC.1 = 0;
PORTC.2 = 1;
PORTC.2 = 0;
}
void display(unsigned char x) {
ready();
PORTA = x;
PORTC.0 = 1;
PORTC.1 = 0;
PORTC.2 = 1;
PORTC.2 = 0;
}
void ready(void) {
DDRA = 0x7F;
PORTC.0 = 0;
PORTC.1 = 1;
do {
PORTC.2 = 1;
PORTC.2 = 0;
}
while (PINA.7 == 1);
DDRA = 0xFF;
}
void lcd_clr (void) {
unsigned char i, j;
for (i=0; i<8; i++)
for (j=0; j<64; j++) {
command(0xB8 + i);
command(0x40 + j);
display(0x00);
};
}
2- برنامه موس
#include <mega16.h>
#include <delay.h>
unsigned char mouse_r (void);
void mouse_w (unsigned char);
void mouse_on (void);
void main(void) {
unsigned char y, x, s, ch;
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
mouse_on( );
while (1) {
s = mouse_r( ) ;
x = mouse_r( ) ;
y = mouse_r( ) ;
PORTA = 0x00;
ch = s;
ch &= 0xC0;
if (ch == 0) {
ch = s;
ch &= 0x10;
if (ch!=0) {
x = 255 - x;
if (x != 0) PORTA.0 = 1;
else PORTA.0 = 0;
}
else
if ( x!= 0) PORTA.1 = 1;
else PORTA.1 = 0;
ch = s;
ch &= 0x20;
if (ch != 0) {
y = 255 - y;
if (y != 0) PORTA.2 = 1;
else PORTA.2 = 0;
}
else
if (y != 0) PORTA.3 = 1;
else PORTA.3 = 0;
//key check
ch = s;
ch &= 0x02;
if (ch != 0) PORTA.4 = 1;
ch = s;
ch &= 0x01;
if (ch != 0) PORTA.6 = 1;
ch = s;
ch &= 0x04;
if (ch != 0) PORTA.5 = 1;
};
};
}
unsigned char mouse_r (void) {
unsigned char c, a, i = 0;
DDRB = 0x00;
while (PINB.0 == 0 & PINB.1 == 0);
while (PINB.0 == 1 & PINB.1 == 1);
while (PINB.0 == 0);
while (PINB.0 == 1);
for (i=0; i<8; i++) {
c = PINB;
c = c << 6;
c = c & 0x80;
a = a >> 1;
a = a ^ c;
while (PINB.0 == 0);
while (PINB.0 == 1);
};
while (PINB.0 == 0 & PINB.1 == 0);
return a ;
}
void mouse_w (unsigned char x) {
unsigned char i, c, p = 0;
PORTB = 0x03;
DDRB = 0x03;
while (PINB.0 == 0 & PINB.1 == 0);
PORTB.0 = 0;
delay_us(100);
PORTB.1 = 0;
PORTB.0 = 1;
DDRB = 0x02;
while (PINB.0 == 1);
for (i=0; i<8; i++) {
c = x;
c = c & 0x01;
x = x >> 1;
PORTB.1 = c;
if (c == 1) p += 1;
while (PINB.0 == 0);
while (PINB.0 == 1);
};
p = p%2;
if (p == 0) PORTB.1 = 1;
else PORTB.1 = 0;
while (PINB.0 == 0);
while (PINB.0 == 1);
PORTB.1 = 1;
DDRB = 0x00;
while (PINB.0 == 1 & PINB.1 == 1);
while (PINB.0 == 0 & PINB.1 == 0);
}
void mouse_on ( ) {
unsigned char y;
mouse_w(0xFF);
y = mouse_r( );
y = mouse_r( );
mouse_w(0xEA);
y = mouse_r( );
mouse_w(0xE8);
y = mouse_r( );
mouse_w(0x01);
y = mouse_r( );
mouse_w(0xF3);
y = mouse_r( );
mouse_w(0x0A);
y = mouse_r( );
mouse_w(0xF4);
y = mouse_r( );
}
:bye
دیدگاه