Вы находитесь на странице: 1из 5

' ---------------------

[���������]----------------------------------------------------
'
' ����......proj09PBC.bas
' ������....PicBasic Compiler
' ����......���������������� ���� -> PIC16F876 -> ��� (� 4-������ �����������)
' �����.....��� ��������
' ������....20 ����� 2002 ����
' �������...
'
'
' ---------------------[��������
���������]-----------------------------------------------
'
' ���������� ������ PIC16F876 � ���-�����:
'
' PIC ��� ������ ���������
' --- --- ------------------
' B4 ���.11
' B5 ���.12
' B6 ���.13
' B7 ���.14
' B3 ���.4
' B0 ���.6
' OSC1 ��������� 4 ���
' OSC2 ��������� 4 ���
' MCLR VDD ����� �������� �������������� � 1 ���
' VDD +5 �
' VSS ����
' B1 Max232 (RX) - �����
' B2 Max232 (TX) - ��������
'
' ---------------------[������ ������
���������]------------------------------------------
'
'
'
' ---------------------[�����������
��������]---------------------------------------------
'
' ����� ���������� �������� ���-�����
'
symbol E = 0 ' ���� ��������� ����� ��� (1 = ����� ������ ��������)
symbol RS = 3 ' ���� ������ �������� (1 = ������� ������� �� ������
��������,
' 0 = ������� ������� �� ������ ������)

' ���� ������ �� ��������� ���-�������


'
symbol ClrLCD = $01 ' �������� �����
symbol CrsrHm = $02 ' ����������� ������ � ������ ������ ������
symbol Row2 = $C0 ' ������� ����������� ������ ������ ���
symbol Row3 = $94 ' ������� ����������� ������� ������ ���
symbol Row4 = $D4 ' ������� ����������� ��������� ������ ���
symbol CrsrLf = $10 ' ����������� ������ �����
symbol CrsrRt = $14 ' ����������� ������ ������
symbol DspLf = $18 ' ����������� ��� ������������ ������� �����
symbol DspRt = $1C ' ����������� ��� ������������ ������� ������
symbol Digit = $30 ' ��� ������� �������� ���
'
' ---------------------[�����������
����������]-------------------------------------------
'
' B3 ��������������� �� ������������ ���������
'
symbol x = B0 ' �������� ���������
symbol char = B1 ' ������ �� �������� �� ���
symbol loop1 = B2 ' ������� ������
symbol ROW = b5 ' ����� ������ ���
symbol LOCATION = b6 ' ����� ������� (����� � ������) ���
symbol VALUE = b7 ' ASCII-��� ������� �� ���������� �� ���
symbol temp2 = b8 ' �� �����������
symbol temp3 = b9 ' �� �����������
symbol temp4 = b10 ' �� �����������
symbol temp1 = b11 ' �� �����������

'
' ---------------------[���������
�������������]------------------------------------------
'
Init:
pins = $0000 ' ��� ������, �������� � ���, ����� �������
Dirs = %11111111 ' �������� � 0 � ������� ��������
PAUSE 215 ' ���������, ���� ��������� ���-������
'
' ��������� ������������� ���-����� (�� ����������� Hitachi 44780)
'
I_LCD:
pins = %00110000 ' ������ 8-������ �����
PULSOUT E, 100 ' �������� ������ ��� ����
PAUSE 10
PULSOUT E, 100 ' �������� ������ ��� ����
PAUSE 10
PULSOUT E, 100 ' �������� ������ ��� ����
PAUSE 10
PINS = %00100000 ' ������ 4-������ �����
pause 1
PULSOUT E, 100 ' �������� ������ ��� ����
HIGH RS
CHAR = %00101000 ' 4-����, 2 ������, ������ �� 5x7 �����
GOSUB LCDCMD
CHAR = 8 ' �������� ���������, ������ � ������� �������
GOSUB LCDCMD
CHAR = 6 ' �������� ������������ ������� ������
GOSUB LCDCMD
CHAR = 1 ' �������� ����� � ����������� ������ � ������ ������
' ������
GOSUB LCDCMD
CHAR = 15 ' ������� ���������, ������ � ������� �������
GOSUB LCDCMD

' ---------------------[�������
��������]------------------------------------------------
'
' ���������� ������ �����
'
' **********************�������
���������************************************************
Start:
SERIN 1, T2400, ROW, LOCATION, VALUE ' ������ ������ ����� ����������������
����
Row = Row - $30 ' ��������� ���������� ���������
����� ������
Location = Location - $30 ' ��������� ��������� ����� ����� � ������

' **********************������������� ������ � ���������


��������************************
'
' ���� ROW = 0, �� ��� ������� � ������� � ����� Command
' ���� ROW �� = 0 � LOCATION = 0, �� ���������� ������, ��� �������� ����� VALUE, �
���
' �����, ��� �������� ������. VALUE - ��� ASCII-��� ����������� �������, ���������
�����
' ������, ������� � �������������� ���-�����.

IF ROW <> 0 AND LOCATION = 0 THEN DISPLAY ' ��������� �� ����


BRANCH ROW, (COMMAND, R1, R2) ' , R3, R4) ' ������� � ������ ������

' **********************����������� ������� � �����, ��� ����� ��������� �����


������*****

R1:

LOCATION = LOCATION - 1 ' �������� ������ ���� � ������ ���, �����


' ���� �������� � ���

' ��������� � ���� ������ ������� �� �������������� ������ ����� � ������


' � ���, ������� ����� �������� �� ���, ����� �� ���������� ������ � ��� �����.

LOOKUP LOCATION, ($81, $82, $83, $84, $85, $86, $87, $88, $89, $8A, $8B, $8C, $8D,
$8E, $8F, $90, $91, $92, $93), char
GOSUB LCDcmd ' �������� ��� ����� � ������ �� ���
GOTO DISPLAY ' ������� � ������������ ����������
�������

R2:

LOCATION = LOCATION - 1 ' �������� ������ ���� � ������ ���, �����


' ���� �������� � ���

' ��������� � ���� ������ ������� �� �������������� ������� ����� � ������


' � ���, ������� ����� �������� �� ���, ����� �� ���������� ������ � ��� �����.

LOOKUP LOCATION, ($C0, $C1, $C2, $C3, $C4, $C5, $C6, $C7, $C8, $C9, $CA, $CB, $CC,
$CD, $CE, $CF, $D0, $D1, $D2, $D3), char
GOSUB LCDcmd ' �������� ��� ����� � ������ �� ���
GOTO DISPLAY ' ������� � ������������ ����������
�������

' **********************��������� ���������� �������� � 3-� � 4-� �������


���*************
'
' **********************��� ����� ��������� "����������������" � ��
��������***************
'
' R3:
'
' LOCATION = LOCATION - 1
' LOOKUP LOCATION, ($94, $95, $96, $97, $98, $99, $9A, $9B, $9C, $9D, $9E, $9F,
$A0, $A1, $A2, $A3, $A4, $A5, $A6, $A7), char
' GOSUB LCDcmd
' GOTO DISPLAY
'
'
' R4:
'
' LOCATION = LOCATION - 1
' LOOKUP LOCATION, ($D4, $D5, $D6, $D7, $D8, $D9, $DA, $DB, $DC, $DD, $DE, $DF,
$E0, $E1, $E2, $E3, $E4, $E5, $E6, $E7), char
' GOSUB LCDcmd
' GOTO DISPLAY
'
' **********************��������� �������� ������������� ������� ������������
WrLCD********

DISPLAY:
char = VALUE ' ��������� ������� ���� ������� � ���������� char
GOSUB WrLCD ' ������� � ������������, ������ �������� ��������
' char �� ���-������
GOTO START ' �������� � ������ �������� ���������

' **********************���� ROW = 0, �� ��������� ������� �� ���������


������:***********

' 0 �������� ����� ��� � ����������� ������ � ������ ������ ������


' 1 ����������� ������ �����
' 2 �������� ���������, �������� ������, �������� ������� �������
' 3 ������� ���������, �������� ������, �������� ������� �������
' 4 ������� ���������, ������� ������, �������� ������� �������
' 5 ������� ���������, �������� ������, ������� ������� �������
' 6 ������� ���������, ������� ������, ������� ������� �������
' 7 ����������� ��� ������������ ������� ������
' 8 ����������� ��� ������������ ������� �����
' 9 ����������� ������ ������

COMMAND:
value = value - $30 ' ��������� ���������� ��������� ����� �������
' (�� ������������ �������� ��� �� �������)

' **********************��������� ������������� �������� ����� ������� � ���


������� ���*

LOOKUP VALUE, ($01, $10, $08, $0C, $0E, $0D, $0F, $1C, $18, $14), char
GOSUB LCDcmd ' ������� � ������������ ��������� ������� �� ���
GOTO START ' ������� � ������ �������� ���������

' **********************������������ ��������� ���� ������� �� ���-


������******************
'
LCDcmd:
LOW RS ' RS - ������ - ������, ����� �������� �������
GOSUB WrLCD ' �������� ���� ���� �������
HIGH RS ' �������� � ����� �������� ��������
RETURN ' �������� � �� �����, ������ ���� ������� ���
' ������������

' **********************������������ ��������� ������� ���� ASCII �� ���-


������************
'
WrLCD:
pins = pins & %00001000 ' �������� � 0 ��� ������ ���� ������ ���, ����� RS,
' ������� �������� �����, ����� �� ���
b3 = char & 11110000 ' ��������� ������ ������� ���������� char � B3
pins = pins | b3 ' ������ �� ���� ������ RS � ������ �������
' ���������� char
pause 1 ' �����, ���� ������������� ������� �� �������
PULSOUT E, 100 ' ������ �����-������� �� ���� ���������
b3 = char * 16 ' �������� ������ ������� �� ����� �������
pins = pins & %00001000 ' �������� � 0 ��� ������ ���� ������, ����� RS,
' ������� �������� �����, ����� �� ���
pins = pins | b3 ' ������ �� ���� ������ RS � ������ �������
' ���������� char
pause 1 ' �����, ���� ������������� ������� �� �������
PULSOUT E, 100 ' ������ �����-������� �� ���� ���������
RETURN ' �������� � �� �����, �� �������� ����
' ������� ��� ������������

END