SaKV
-
Постов
8 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные SaKV
-
-
Здравствуйте Патриот Ваня. Сделать двухногого действительно сложнее. Но насчёт количества закупаемых деталей я свами не согласен. Для двухногого робота необходим гироскоп, а он стоит порядка 10000 руб.
0 -
Подскажите как с помощью микроконтроллера получить сигнал сложной формы.
0 -
Язык С/С++ это язык высокого уровня. Я программирую микроконтроллеры на С. Так как это очень просто и быстро. А на Асемблере программировать-это прошлый век.
-1 -
Здравствуйте. Хочу спросить встречался ли кто нибудь с такой проблаемой: Собираю схему, запускаю программу, а дальше вот что происходит программа сильно грузит CPU и пишет сообщение что симуляция в реальном времени не возможна. Подскажите пожайлуста как устранить эту проблему. Заранее благодарен.
0 -
Здравствуйте. Программы я пишу на С/С++ в среде разработки Borland C++ Builder 6 or Visual Studio 2006. Занимаюсь программированием AVR на языке С/С++. Могу помочь писать программы.
0 -
Конечно скажу эта программа написана под дисплей SED1520. Но переписать эту программу под любой другой дисплей не составляет ни какой сложности. И вот ещё что эта программа находится в разработке, и если кто хочет помочь в написании программы очень буду рад.
0 -
Здравствуйте. Вот код написал для управления матрйчным-LCD(Программа реализована на CodeVisionAVR).
Некоторые блоки программы закоментированны, взависимости какие функции управления LCD требуются.
#include <mega32.h> #include <delay.h> #include <mem.h> #include <stdlib.h> //-------------------------------------------------------------------------------------- unsigned char l_display_array[4][122]; unsigned char l_mask_array[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /*struct IMG_DEF { unsigned char width_in_pixels; unsigned char height_in_pixels; unsigned char *char_table; }; */ //-------------------------------------------------------------------------------------- void intn() { PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0x07; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0x00; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; } //-------------------------------------------------------------------------------------- void lcd_strobe_e(unsigned char ncontr) { delay_us(2); if ( ncontr & 0x01 ) PORTB.1 &= 0; if ( ncontr & 0x02 ) PORTB.2 &= 0; delay_us(2); PORTB.1 |= 1; PORTB.2 |= 1; } //-------------------------------------------------------------------------------------- void lcd_out_ctl(unsigned char cmd, unsigned char ncontr) { PORTB.0 &= 0; PORTA = cmd; lcd_strobe_e(ncontr); } //-------------------------------------------------------------------------------------- void lcd_out_dat(unsigned char dat, unsigned char ncontr) { PORTB.0 |= 1; PORTA = dat; lcd_strobe_e(ncontr); } //----------------------------------------------------------------- void lcd_init1(void) { lcd_out_ctl(0,3); lcd_out_ctl(0xE2,3); delay_ms(100); lcd_out_ctl(0xAF,3); lcd_out_ctl(0xA1,3); lcd_out_ctl(0xC0,3); lcd_out_ctl(0xB8,3); lcd_out_ctl(0x00+19,3); } //-------------------------------------------------------------------------------------- void lcd_update(unsigned char top, unsigned char bottom) { unsigned char x, y, yt, yb, *colptr; yb=bottom>>3; yt=top>>3; for(y=yt;y<=yb;y++) { lcd_out_ctl(0xB8+y,3); // lcd_out_ctl(LCD_SET_COL+LCD_STARTCOL_REVERSE,3); lcd_out_ctl(0x00+0,3); colptr=&(l_display_array[y][0]); for (x=0;x<122;x++) { if (x<61) lcd_out_dat(*colptr++,1); else lcd_out_dat(*colptr++,2); } } } //-------------------------------------------------------------------------------------- void lcd_update_all(void) { lcd_update(0,31); } //-------------------------------------------------------------------------------------- void lcd_fill(unsigned char pattern) { unsigned char page, col; for (page=0; page<4; page++) { for (col=0; col<122; col++) l_display_array
[col]=pattern; } lcd_update_all(); } //-------------------------------------------------------------------------------------- void lcd_erase(void) { lcd_fill(0x00); lcd_update_all(); } //-------------------------------------------------------------------------------------- void lcd_dot(unsigned char x, unsigned char y, unsigned char mode) { unsigned char bitnum, bitmask, yByte; unsigned char *pBuffer; if ( ( x > 121 ) || ( y > 31 ) ) return; yByte = y >> 3; bitnum = y & 0x07; bitmask = l_mask_array[bitnum]; pBuffer = &(l_display_array[yByte][x]); switch (mode) { case 1: *pBuffer |= bitmask; break; case 0: *pBuffer &= ~bitmask; break; case 2: *pBuffer ^= bitmask; break; default: break; } } //-------------------------------------------------------------------------------------- /*void lcd_line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, unsigned int mode ) { unsigned int length, xTmp, yTmp, i, y, yAlt; int m; if(x1 == x2) { if(y1 > y2) { xTmp = x1; yTmp = y1; x1 = x2; y1 = y2; x2 = xTmp; y2 = yTmp; } length = y2-y1; for(i=0; i<=length; i++) lcd_dot(x1, y1+i, mode); } else if(y1 == y2) { if(x1 > x2) { xTmp = x1; yTmp = y1; x1 = x2; y1 = y2; x2 = xTmp; y2 = yTmp; } length = x2-x1; for(i=0; i<=length; i++) lcd_dot(x1+i, y1, mode); } else { if(x1 > x2) { xTmp = x1; yTmp = y1; x1 = x2; y1 = y2; x2 = xTmp; y2 = yTmp; } if((y2-y1) >= (x2-x1) || (y1-y2) >= (x2-x1)) { length = x2-x1; m = ((y2-y1)*200)/length; yAlt = y1; for(i=0; i<=length; i++) { y = ((m*i)/200)+y1; if((m*i)%200 >= 100) y++; else if((m*i)%200 <= -100) y--; lcd_line(x1+i, yAlt, x1+i, y, mode ); if(length<=(y2-y1) && y1 < y2) yAlt = y+1; else if(length<=(y1-y2) && y1 > y2) yAlt = y-1; else yAlt = y; } } else { if(y1 > y2) { xTmp = x1; yTmp = y1; x1 = x2; y1 = y2; x2 = xTmp; y2 = yTmp; } length = y2-y1; m = ((x2-x1)*200)/length; yAlt = x1; for(i=0; i<=length; i++) { y = ((m*i)/200)+x1; if((m*i)%200 >= 100) y++; else if((m*i)%200 <= -100) y--; lcd_line(yAlt, y1+i, y, y1+i, mode); if(length<=(x2-x1) && x1 < x2) yAlt = y+1; else if(length<=(x1-x2) && x1 > x2) yAlt = y-1; else yAlt = y; } } } }*/ //-------------------------------------------------------------------------------------- void lcd_circle(unsigned int xCenter, unsigned int yCenter, unsigned int radius, unsigned int mode) { int tSwitch, y, x = 0; unsigned int d; d = yCenter - xCenter; y = radius; tSwitch = 3 - 2 * radius; while (x <= y) { lcd_dot(xCenter + x, yCenter + y, mode); lcd_dot(xCenter + x, yCenter - y, mode); lcd_dot(xCenter - x, yCenter + y, mode); lcd_dot(xCenter - x, yCenter - y, mode); lcd_dot(yCenter + y - d, yCenter + x, mode); lcd_dot(yCenter + y - d, yCenter - x, mode); lcd_dot(yCenter - y - d, yCenter + x, mode); lcd_dot(yCenter - y - d, yCenter - x, mode); if (tSwitch < 0) tSwitch += (4 * x + 6); else { tSwitch += (4 * (x - y) + 10); y--; } x++; } } //-------------------------------------------------------------------------------------- /*void lcd_bitmap(unsigned int left, unsigned int top, struct IMG_DEF *img_ptr, unsigned int mode) { unsigned int width, heigth, h, w, pattern, mask; unsigned int* ptable; width = peekb(&(img_ptr->width_in_pixels)); heigth = peekb(&(img_ptr->height_in_pixels)); ptable = (unsigned int*) peekw(&(img_ptr->char_table)); for ( h=0; h<heigth; h++ ) { mask = 0x80; pattern = peekb( ptable ); ptable++; for ( w=0; w<width; w++ ) { if ( pattern & mask ) lcd_dot(w+left, h+top, mode); mask >>= 1; if ( mask == 0 ) { mask = 0x80; pattern = peekb( ptable ); ptable++; } } } } */ //-------------------------------------------------------------------------------------- /*void lcd_glyph(unsigned int left, unsigned int top, unsigned int width, unsigned int height, unsigned int *glyph_ptr, unsigned int store_width) { unsigned int bit_pos; unsigned int byte_offset; unsigned int y_bits; unsigned int remaining_bits; unsigned int mask; unsigned int char_mask; unsigned int x; unsigned int *glyph_scan; unsigned int glyph_offset; bit_pos = top & 0x07; glyph_offset = 0; char_mask = 0x80; for (x = left; x < (left + width); x++) { byte_offset = top >> 3; y_bits = height; remaining_bits = 8 - bit_pos; mask = l_mask_array[bit_pos]; glyph_scan = glyph_ptr + glyph_offset; while((y_bits) && (byte_offset < 4)) { if(peekb(glyph_scan) & char_mask) l_display_array[byte_offset][x] |= mask; else l_display_array[byte_offset][x] &= ~mask; if(l_mask_array[0] & 0x80) mask >>= 1; else mask <<= 1; y_bits--; remaining_bits--; if(remaining_bits == 0) { remaining_bits = 8; byte_offset++; mask = l_mask_array[0]; } glyph_scan += store_width; } char_mask >>= 1; if(char_mask == 0) { char_mask = 0x80; glyph_offset++; } } }*/ //-------------------------------------------------------------------------------------- /*void lcd_box(unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int mode) { unsigned int i; if (!width) return; width--; for (i=y;i<y+height;i++) lcd_line(x, i, x+width, i, mode); }*/ //-------------------------------------------------------------------------------------- /*void lcd_text_intern(unsigned int left, unsigned int top, unsigned int font, char *str, unsigned int inprogmem) { unsigned int x = left; unsigned int glyph; unsigned int width; unsigned int height, defaultheight; unsigned int store_width; unsigned int *glyph_ptr; unsigned int *width_table_ptr; unsigned int *glyph_table_ptr; unsigned int glyph_beg, glyph_end; unsigned int fixedwidth; defaultheight = peekb ( &(fonts[font].glyph_height) ); store_width = peekb ( &(fonts[font].store_width) ); width_table_ptr = (unsigned int*) pgm_read_word( &(fonts[font].width_table) ); glyph_table_ptr = (unsigned int*) pgm_read_word( &(fonts[font].glyph_table) ); glyph_beg = peekb( &(fonts[font].glyph_beg) ); glyph_end = peekb( &(fonts[font].glyph_end) ); fixedwidth = peekb( &(fonts[font].fixed_width) ); if (inprogmem) glyph = peekb(str); else glyph = (unsigned int)*str; while(glyph != 0x00) // while(*str != 0x00) { if((glyph < glyph_beg) || (glyph > glyph_end)) glyph = peekb( &(fonts[font].glyph_def) ); glyph -= glyph_beg; if(fixedwidth == 0) // width=fonts[font].width_table[glyph]; width=peekb(width_table_ptr+glyph); else width = fixedwidth; height = defaultheight; //glyph_ptr = fonts[font].glyph_table + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height); glyph_ptr = glyph_table_ptr + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height); if(x > 121) x = 121; if((x + width) > 121+1) width = 121 - x + 1; if(top > 31) top = 31; if((top + height) > 31+1) height = 31 - top + 1; lcd_glyph(x,top,width,height,glyph_ptr,store_width); x += width; str++; if (inprogmem) glyph = peekb(str); else glyph = (unsigned int)*str; } } //-------------------------------------------------------------------------------------- void lcd_text(unsigned int left, unsigned int top, unsigned int font, const char *str) { lcd_text_intern(left, top, font, str, 0); } //-------------------------------------------------------------------------------------- void lcd_text_p(unsigned int left, unsigned int top, unsigned int font, const char *str) { lcd_text_intern(left, top, font, str, 1); }*/ //-------------------------------------------------------------------------------------- void main(void) { intn(); lcd_init1(); while (1) { lcd_erase(); /* lcd_line(121,31,1,31,1); lcd_line(121,1,1,1,1); lcd_line(121,1,121,31,1); lcd_line(1,1,1,31,1); lcd_line(119,29,3,29,1); lcd_line(119,3,3,3,1); lcd_line(119,3,119,29,1); lcd_line(3,3,3,29,1);*/ lcd_circle(90,20,15,1); lcd_circle(20,10,5,1); lcd_update_all(); delay_ms(2000); /* lcd_text(5,4,FONT_SIX_DOT,"#abcdefghijkl"); lcd_text(5,20,FONT_SEVEN_DOT,"mnopqrstuwxyvz");*/ /* lcd_box(2,2,118,28,2); /* lcd_erase(); lcd_text(4,7,FONT_EIGHTEEN_DOT,"12:34:56");*/ /* lcd_erase(); lcd_text(5,0,FONT_NINE_DOT,"EW12A03GLY"); lcd_text(5,16,FONT_SEVEN_DOT,"Proteus VSM"); lcd_box(0,0,121+1,31+1,LCD_MODE_XOR); lcd_box(0,0,121+1,31+1,LCD_MODE_XOR);*/ /* lcd_bitmap(90, 1, &frame_bmp, 1); lcd_erase(); */ /* lcd_text_p(6,3,FONT_NINE_DOT,PSTR("Labcenter")); lcd_text_P(6,15,FONT_SEVEN_DOT,"Electronics");*/ }; }
0
Генерацыя Пилы,синуса,прямоугол,и Т.д
в Алгоритмы
Опубликовано
К примеру трапециевидную.