Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Как вывести значение переменной на LCD?


Как вывести значение переменной на LCD?

Сообщений 1 страница 9 из 9

1

Привет всем
Начал изучать работу с графическим LCD от Нокии3310
и возник вопрос как на него вывести значение переменной
в таком например коде:

Tempc = T1c * Dataword
Tempc = Tempc - 40

Dis = Fusing(tempc , "###.#")

Call D3310position(0 , 0)
Call D3310print( "Температура")

Call D3310position(0 , 1)
Call D3310print ? Dis ?

надо вывести значение температуры и влажности с датчика SHT11
код по работе с датчиком взял из апноты
Заранее спасибо

0

2

Посмотри здесь или здесь.

0

3

как раз я там и смотрел
но там о чем я спрашиваю не сказано не чего

0

4

Люди умные, посмотрите код пожалуйста
третий день бьюсь,  что не так:

Код:
$regfile = "m8def.dat"

$crystal = 3840000

'$sim

$hwstack = 32                                               ' default
$swstack = 8                                                ' default
$framesize = 200                                            ' minimum for this library. Increase for your application needs!

Declare Sub Getit()

'-------------------------------------------------------------------------------
Sck Alias Portc.0
Dataout Alias Portc.1
Datain Alias Portc.1

'Declare Sub Getit()

Ddrc = &B11111111

Config Pinc.0 = Output
Config Pinc.1 = Output

'-------------------------------------------------------------------------------
'Dim Strstring As String * 10                                'íà äèñïëåé âîçìîæåí òîëüêî âûâîä òåêñòîâûõ ïåðåìåííûõ
'Dim I As Integer                                            'ïåðåìåííàÿ äëÿ ïðîìåæóòî÷íûé ïðåîáðàçîâàíèé

Dim Ctr As Byte
Dim Dataword As Word
Dim Command As Byte
Dim Dis As String * 20
Dim Calc As Single
Dim Calc2 As Single
Dim Rhlinear As Single
Dim Rhlintemp As Single
Dim Tempc As Single

Const C1 = -4
Const C2 = 0.0405
Const C3 = -0.0000028
Const T1c = 0.01
Const T2 = 0.00008

'-------------------------------------------------------------------------------
Set Dataout
For Ctr = 1 To 12
Set Sck
Waitus 2
Reset Sck
Waitus 2
Next Ctr

'-------------------------------------------------------------------------------
Config Portd.4 = Output                                     'ñþäà ÿ ïîâåñèë íîãó GND
Portd.4 = 0

Config Portd.2 = Output                                     'D/C (pin 4)
D3310dc Alias Portd.2

Config Portd.3 = Output                                     'SCE (pin 5)
D3310ce Alias Portd.3

Config Portd.6 = Output                                     'Reset (pin 8)
D3310re Alias Portd.6

'êîíôèãóðèðóåì SPI â ïðîãðàììíîì ðåæèìå. SCLK (pin 2) - PORTD.0; SDA (pin 3) - PORTD.1;

Config Spi = Soft , Din = Portb.1 , Dout = Portd.1 , Ss = None , Clock = Portd.0

Spiinit

$include "3310init.bas"

'Initialise the display
Call D3310reset
Call D3310init
Call D3310clear

Do

Command = &B0000011                                        

 Call Getit                                                 

 Tempc = T1c * Dataword                                     
 Tempc = Tempc - 39.66

 Dis = Fusing(tempc , "###.#")

 Call D3310position(0 , 0)                                  
 Call D3310print( "Òåìïåðàòóðà")

 Call D3310position(0 , 1)                                  
 Call D3310print(dis)


 Command = &B00000101                                       


 Call Getit

 Calc = C2 * Dataword
 Calc2 = Dataword * Dataword                                'that "2" in the datasheet sure looked like a footnote for a couple days, nope it means "squared"!
 Calc2 = C3 * Calc2
 Calc = Calc + C1
 Rhlinear = Calc + Calc2

 Calc = T2 * Dataword
 Calc = Calc + T1c
 Calc2 = Tempc - 25
 Calc = Calc2 * Calc
 Rhlintemp = Calc + Rhlinear

 Dis = Fusing(rhlintemp , "##.#")

 Call D3310position(0 , 2)                                  ' êîîðäèíàòû êóðñîðà X,Y
 Call D3310print( "Âëàæíîñòü")

 Call D3310position(0 , 3)                                  ' êîîðäèíàòû êóðñîðà X,Y
 Call D3310print(dis)
 Wait 1
 'Call D3310clear

Loop
'-------------------------------------------------------------------------------

Sub Getit()

 Local Datavalue As Word
 Local Databyte As Byte

 'start with "transmission start"

 Set Sck
 Reset Dataout
 Reset Sck
 Set Sck
 Set Dataout
 Reset Sck


 'now send the command

 Shiftout Dataout , Sck , Command , 1

 Ddrc = &B11111101                                          'datain is now input
 Config Pinc.1 = Input                                      'datain
 Set Sck                                                    'click one more off
 Reset Sck
 Waitus 10                                                  'no idea why, but it doesn't work without it!
 Bitwait Pinc.1 , Reset                                     'wait for the chip to have data ready

 Shiftin Datain , Sck , Databyte , 1                        'get the MSB
 Datavalue = Databyte

 Ddrc = &B11111111
 Config Pinc.1 = Output

 Reset Dataout                                              'this is the tricky part- Lot's of hair pulling- have to tick the ack!
 Set Sck
 Reset Sck

 Ddrc = &B11111101                                          'datain is now input
 Config Pinc.1 = Input

 Shiftin Datain , Sck , Databyte , 1                        'get the LSB
 Shift Datavalue , Left , 8
 Datavalue = Datavalue Or Databyte
 'don't tick the clock or ack since we don't need the CRC value, leave it hanging!
 Dataword = Datavalue

 Ddrc = &B11111111
 Config Pinc.1 = Output

 Reset Dataout
 Set Sck
 Reset Sck

 Ddrc = &B11111101                                          'datain is now input
 Config Pinc.1 = Input

 Shiftin Datain , Sck , Databyte , 1                        'not using the CRC value for now- can't figure it out! Anybody know how to impliment?
 'Locate 4 , 1
 'Lcd "CRC value was - " ; Databyte

 Ddrc = &B11111111
 Config Pinc.1 = Output

 Set Dataout
 Set Sck
 Reset Sck
End Sub

End



$include "3310end.bas"

датчик рабочий, если вместо дисплея нокия 3310 подключаю дисплей 16*2 все работает

0

5

библиотека в качестве переменных принимает только тип String, в комментариях к исходникам этот момент описан
Поэтому чтобы применить форматирование необходимо провести преобразование переменной из числового типа в текстовую (командой str), и только после этого выводить на дисплей

Отредактировано Viktor (2011-05-09 20:34:08)

0

6

я может торможу, но из кода выше:

Dim Dis As String * 20

а в обучалке от decada

Строка - это такая переменная, которая хранит в себе последовательность символов. Она используется для ввода/вывода текста или длинных чисел. Строка объявляется так:

Dim Message As String * 10

Переменная Message может хранить до 10 символов. Каждый символ занимает один байт. BASCOM добавляет дополнительный байт, обозначающий конец строки. Максимальная длина строки таким образом составляет 254 символа

Str Преобразует число в строковое значение.

Dim Pstring as String*10
Dim Varval as Integer
Varval = 15436
Pstring = Str(Varval)
'Pstring = "15436"

получается dis уже стока так какое же преобразование с ней делать?

0

7

kestrel все математические операции должны проводится с числовыми переменными. Ваш пример:

Dim Dis as String*5                     'строковая переменная, влезет 5 символов
Dim Tempc as Integer

Tempc = T1c * Dataword            'проводим необходимые вычисления                         
Tempc = Tempc - 39.66

Tempc = Fusing(tempc , "###.#")     'форматируем как нужно

Dis = Str(Tempc)                             'преобразуем числовую переменную в строковую

Call D3310print(dis)                         'выводим результат

Для операции форматирования возможно нужно будет заводить промежуточную переменную, не проверял.

0

8

извиняюсь, действительно fusing cразу переводит в строку.

Отредактировано Viktor (2011-05-11 18:48:10)

0

9

с подключением LCD все нормально
прошиваю тестовые прошики все нормально
буду разбиратся сам
спасиб всем за ответы
как разберусь обязательно отпишусь=)

0


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Как вывести значение переменной на LCD?