Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
29.03.2007, 01:41
|
|
Прохожий
Регистрация: 24.03.2007
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
как вывести на LCD данные из буфера?
Здравствуйте. У меня в программе на микроконтроллер атмега8 нужно вывести данные из буфера на LCD(16х2).
Тоесть создал буфер( byte TnBuf [65]; ),в который помещаем данные - 65 бит.
Данные нужно вывести в формате ANSII.
Сейчас стоит вот такая конструкция:
Цитата:
|
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include ‹lcd.h›
char data[16]={'0','1','2','3','4','5','6','7','8','9','A','B', 'C','D','E','F'};
char aaa;
char bbb;
byte i,k,j;
void main(void)
{
lcd_init(16);
lcd_gotoxy(0,0);
lcd_clear();
}
void lcd_display(char *str)
{
j=0;
k=0;
for (i=0; i‹9; i++)
{
aaa = str[i]››4;
bbb = str[i]&0b00001111;
lcd_gotoxy (j++, k);
lcd_putchar (aaa+4;
lcd_gotoxy (j++, k);
lcd_putchar (bbb+4;
if ((j==&&(k==0)) {k=1; j=0;}
}
}
lcd_display(data);
|
Выводит нето что нужно,а нужно чтобы выводил строчку из 16 символов.
Подскажите пожалуйста, как это лучше реализовать?
Может есть другие способы вывести содержимое буфера на дисплей?
|
|
|
|
29.03.2007, 10:53
|
|
Временная регистрация
Регистрация: 09.01.2006
Сообщений: 63
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: как вывести на LCD данные из буфера?
Сообщение от goooblin
|
Данные нужно вывести в формате ANSII.
|
Какой-то новый стандарт? Про него не знаю, а вот если старый добрый ASCII пойдет...
Код:
|
char data[17]={'0','1','2','3','4','5','6','7','8','9','A','B', 'C','D','E','F',0x00};
...
void main(void)
{
lcd_init(16);
lcd_gotoxy(0,0);
lcd_clear();
lcd_puts(data);
} |
|
|
|
|
29.03.2007, 11:00
|
|
Частый гость
Регистрация: 17.01.2007
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
смотря еще какой ЛЦД пользуешь! Я юзаю в одном проекте такую вещь:
АТмега8, порт Ц - для вывода.
Распиновка битов:
С0 - D4
С1 - D5
С2 - D6
С3 - D7
С4 - RS
С5 - E
Вот проца для вывода символа в индюк:
indout(RS,число)
RS: 1 - в CGRAM, 0 - в регистры управления
Код:
|
#include ‹delay.h›
void indout(char rs,char io)
{
PORTC.5=0;
delay_us(1);
if (rs==0) {PORTC.4=0;} else {PORTC.4=1;}
PORTC&=0b11110000;
PORTC|=io››4;
PORTC.5=1;
delay_us(1);
PORTC.5=0;
delay_us(1);
PORTC.5=1;
PORTC&=0b11110000;
PORTC|=io & 0b1111;
PORTC.5=0;
delay_us(5);
} |
Прога для печати из FLASH:
print (длина,адрес)
адрес - метка, где лежит текст. Также можно делать так:
print (11,"PERVYI NAH!")
если в дефайне убрать FLASH, то прога будет печатать из SRAM. Ставишь свой буфер и впирет:
print (16,data)
Код:
|
void print(char leng,flash char *text)
{char ch_off=0;
while (leng›1) {indout(1,*(text+ch_off));leng--;ch_off++;}} |
инициализация дисплея - запускать в самом начале один раз:
Код:
|
void ind_init(void)
{
indout(0,1); //CLS
indout(0,2); //cursor home
indout(0,4+2); //increment
indout(0,8+0b101); //d_ON,blink,nocursor
indout(0,32+0b1000+dimmer);//bright
indout(0,128+0); //setpos = 0
} |
просто очистка экрана: indout(0,1)
установка позиции курсора:
SETPOS(строка,столбец)
нумерация с нуля
Код:
|
void setpos(char row,char col)
{char cgadd=0;
if (row==0) cgadd=0x80+col;
if (row==1) cgadd=0xC0+col;
if (row==2) cgadd=0x94+col;
if (row==3) cgadd=0xD4+col;
indout(0,cgadd);} |
Вот рисуног LCD
-- Прилагается рисунок: --
|
|
|
|
29.03.2007, 11:03
|
|
Частый гость
Регистрация: 17.01.2007
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
кстати, индикатор - любой, совместимый с HD44780
|
|
|
|
29.03.2007, 17:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Вот о выводе на LCD - avr123.nm.ru/z5.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
30.03.2007, 05:58
|
|
Частый гость
Регистрация: 17.01.2007
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
Вот о выводе на LCD - avr123.nm.ru/z5.htm
|
стандартная процедюра из КодеВизарда не всегда подходит. Особенно, на PORTC в Меге8 Она жрет целый порт, причем оставляет посередине пустой бит (который R/W - для HD44780 с Dual Port RAM читать готовность вообще не надо). Тем более, в других компилерах процедурки другие, или их вообще нет
|
|
|
|
30.03.2007, 06:02
|
|
Частый гость
Регистрация: 17.01.2007
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
avr123-nm-ru
а вообще, у тебя классный ресурс (если на огромные шрифты не смотреть ), все просто и понятно, буду пацанов отсылать туды
|
|
|
|
30.03.2007, 07:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Жду реальных ПАЦАНОВ !
Вот задачку новую делаю по последовательной передаче данных в синтезаторы LMX2316
avr123.nm.ru/z12.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
30.03.2007, 09:52
|
|
Частый гость
Регистрация: 17.01.2007
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
LMX2306- пройденный этап
В проекте радиостанции "Аметист" использовал следующее:
(данные из еепром, группами по 4 байта)
(djnz: macro
dec @0
brne @1 - очень удобно...)
Код:
|
;======================================
;********** USED SUBROUTINES **********
;======================================
;
BBout:
push tmp
push tmp1
cbi portc,5
sbi ddrc,4
cbi portc,4
ldi tmp1,8 ;c5-busclk, c4-busdta
rcall dms
bbout1: rol tmp
cbi portc,4
brcc ibbo0
sbi portc,4
ibbo0: sbi portc,5
rcall dms
cbi portc,5
rcall dms
djnz tmp1,bbout1
rcall dms
pop tmp1
pop tmp
ret
BBout2:
push tmp
push tmp1
cbi portc,5
sbi ddrc,4
cbi portc,4
; ldi tmp1,8 ;c5-busclk, c4-busdta
rcall dms
rjmp bbout1
;iBBout:
; push tmp
; push tmp1
; ldi tmp1,8 ;c5-busclk, c4-busdta
;ibbout1:ror tmp
; cbi portc,4
; brcc ibbo1
; sbi portc,4
;ibbo1: sbi portc,5
; nop
; nop
; cbi portc,5
; nop
; nop
; djnz tmp1,ibbout1
; pop tmp1
; pop tmp
; ret
BBin:
push tmp1
cbi ddrc,2
ldi tmp1,8 ;c5-busclk, c2-busdta for cmx
clr tmp
bbin1: clc
sbi portc,5
nop
nop
nop
nop
nop
nop
clc
sbic pinc,2
sec
rol tmp
cbi portc,5
nop
nop
nop
nop
nop
nop
djnz tmp1,bbin1
pop tmp1
ret
;======================================
Synth: ; Writing freq from table to synthesizer
lds tmp,TC_Chan ;format: [Addr,],mode= (0-Tx or 1-Rx) PORTB4-LMX_LE
clr tmp1
clc
rol tmp
rol tmp1
rol tmp
rol tmp1 ; mul 4
clc
mov zh,tmp1
mov zl,tmp
adiw zh:zl,3
; shifted table on 2+1 (to first value)
cbi PORTB,4
cpi mode,0
breq endcp
subi zh,-16 ; if in receive mode then choose 2nd table
endcp: ;mov ZH,tmp1
;mov ZL,tmp ; now we have Full absolute address of 2nd cell at this channel
clr tmp
sts data1,tmp ;bank0
sts data2,ZH
sts data3,ZL
rcall ee_read
lds tmp,data4;;;;;;;;;;;;small byte
push tmp
rcall ee_read
lds tmp,data4
push tmp
rcall ee_read
lds tmp,data4
andi tmp,0b00000011
clc
ror tmp
ror tmp
ror tmp
ror tmp
sbr tmp,0b10000000
cbi PORTB,4
; ldi tmp,001
ldi tmp1,3
rcall bbout2 ;write complete
pop tmp;lds tmp,data4;
ldi tmp1,8
rcall bbout
pop tmp ; 2nd byte
ldi tmp1,8
rcall bbout
ldi tmp,2 ; [1,0]
ldi tmp1,2
rcall ibbout2 ; control bitz for N counter
sbi PORTB,4
rcall dms
cbi portb,4
;======
ldi tmp1,16
sts data2,tmp1
ldi tmp1,1
sts data3,tmp1
rcall ee_read
lds tmp,data4;small byte
push tmp
clr tmp1
sts data3,tmp1
rcall ee_read
cbi PORTB,4
ldi tmp,001
ldi tmp1,3
rcall ibbout2 ;write complete
lds tmp,data4
ldi tmp1,8
rcall bbout
pop tmp ; 2nd byte
ldi tmp1,8
rcall bbout
ldi tmp,0 ; [0,0]
ldi tmp1,2
rcall ibbout2 ; control bitz for R counter
sbi PORTB,4
rcall dms
cbi portb,4
ret
; ldi tmp1,3 ;c5-busclk, c4-busdta
ibbout2:rcall dms
ror tmp
cbi portc,4
brcc ibbo2
sbi portc,4
ibbo2: sbi portc,5
rcall dms
cbi portc,5
rcall dms
djnz tmp1,ibbout2
ret |
|
|
|
|
01.04.2007, 17:14
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Лучше дествительно написать свою функцию вывода информации на LCD экранчик. Как минимум экономиться 1 порт контроллера. datasheet и пример моих функций в CodeVisionVR могу выложить если интересно...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:51.
|
|