You are on page 1of 21

1.

,
1.1
1.2
1.3
1.4





2.
Encoder
Encoder-
Encoder-


LCD
LCD

2.1
2.1.1
2.1.2
2.2
2.2.1
2.3
2.3.1

3.
3.1
3.2
3.2.1
3.3
3.3.1

Rotary encoder
E6A2-CWZ3C rotary encoder
LCD
C1602A (16x2)
4.

4.1
4.2
4.3
4.4

1.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Encoder-
Encoder
Rotary encoder
PIC 16F877A
LCD


encoder
E6A2-CWZ3C rotary encoder
Encoder-

E6A2-CWZ3C rotary encoder-
C1602A LCD

4
5
5
6
6
7
7
8
9
10
10
11
11
12

1.4
1
2
3
4

E6A2-CWZ3C rotary encoder-

E6A2-CWZ3C rotary encoder-


C1602A
C1602A

9
10
12
12

1. ,
1.1


1.2




.
.
,


.
.

. ,
.

.
, .

.
,
.

. ,
,
. :
,

.

.

2.
2.2

Encoder

2.2.1 Encoder
.
Encoder- A B Encoder
.

1
Encoder 2 . Encoder
Encoder .
Encoder- LED PHOTO
.
A
.
.

Encoder .
GROUND A B
.
pull-up
.
Encoder- pull-up
. , A B
. Encoder .

2.2.2 Encoder

.

.


.

2
: 24 360
15 .
15
.

.

2.3
2.3.1
,
, .

.
(ROM)
.

PIC16F877A . :

20MHz

Flash Program Memory 8K

EEPROM 256

RAM 368

15

I/O 5 (A, B, C,
E)

35

D,

4
2.4 LCD
2.4.1 LCD
LCD liquid crystal display
.
, .
, .

3.
3.1

,
, .

6

.

.
.

7
7

8
,
.

. ,
.


. , ,
. :
,

.
.
:
.

3.2 Rotary encoder


3.2.1 encoder
. E6A2-CWZ3C rotary encoder
.
encoder 5V 24 V .
A, B , Z 3-
.
500 ppr, 25
rotary encoder .

1
*1. 0.3 ms 9 .
*2.
.

*3. .

10

maximum 20 mA . Z
.

11

10

H L .
A B 1/4 +- 1/8 ,
B A - 1/4 +- 1/8 .

12

4 dia 5- .
0.14 2 ,
0.9 . 500
3.3 LCD
3.3.1 16char x 2 line C1602A
. :

13

11

: 10
= 2R = 2*3.14*10 = 62.8
Encoder- 500 encoder
500 .

encoder 4
2000 .
2000/62.8 = 31
1 31 .
14

12

4.

4.1

Encoder
/PIC16F877A/ - .
.

.

13

4.2

14

4.3

15

4.4

#include "F:\tosolsource\project1.h"
#include <LCDMY.C>
#include "string.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int16 cnt1=0,cnt2=0;
int16 k, l, tmp,KEY,n;
int32 x,y=0,z=0,s;
int32 counter=0,tal,cnt11=0,cnt22=0;
int16 data1[10]={0,0,0,0,0,0,0,0,0,0};
INT CONST
START=0X0F,STOP=0XF0,SAVE=0X0D,TALBAI=0x02,CLEAR=0x03,Leng=0x05,
BTNNEGJ=0X01;
INT NUL=0X00,METER,BUHEL,BUTAR;
BOOLEAN RUN=FALSE,NEGJ=FALSE;
void convert(int32 data,int32 n){
for(x=0;x<n;x++)
{
data1[x]=data%10+48;
data=data/10;
}
for (x=0;x<n;x++)
lcd_send_byte(1,data1[n-1-x]);
}
#int_EXT
EXT_isr()
{
if (INPUT(PIN_B1)==1) counter++;
else
IF (COUNTER!=0) counter-- ;
}
void LCDSet(){
cnt1=counter/3100;
cnt2=counter/31%100;
lcd_gotoxy(1,2);
convert(cnt1,3);
lcd_putc(".");
convert(cnt2,2);
lcd_gotoxy(8,2);
lcd_putc("m");
delay_ms(200);
}
char keypad(){
INT RET;
16

RET=NUL;
for(k=0;k<4;k++){
switch(k){
case 0: output_c(254); break;
case 1: output_c(253); break;
case 2: output_c(251); break;
case 3: output_c(247); break;
}
for(l=0;l<4;l++){
switch(l){
case 0: tmp=input(PIN_A0);
case 1: tmp=input(PIN_A1);
case 2: tmp=input(PIN_A2);
case 3: tmp=input(PIN_A3);
}
if(tmp != 1)
{ if(k==0){
switch(l){
case 0:
RET=START; break;
case 1:
RET=STOP; break;
case 2:
RET=CLEAR; break;
case 3:
RET=Leng; break;
}
}
else if(k==1)
{
switch(l)
{
case 0:
RET=SAVE;
break;
case 1:
RET=TALBAI; break;

break;
break;
break;
break;

}
}
}
}
}
RETURN RET;
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
17

setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_EXT);
disable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
lcd_init();
SET_TRIS_A( 0x00 );
SET_TRIS_C( 0x00 );
SET_TRIS_B( 0XFF );
lcd_putc("PRESS BUTTON");
while(1)
{
KEY=KEYPAD();
if (key==START)
{ WHILE(KEYPAD()!=NUL);
lcd_clear();
lcd_gotoxy( 1, 1);
lcd_putc("Start");
RUN=TRUE;
counter=0;
n=0;
enable_interrupts(INT_EXT);
}
if (key==SAVE)
{WHILE(KEYPAD()!=NUL);
lcd_clear();
lcd_gotoxy( 1, 1);
lcd_putc("Save");
Z=Y;
Y=counter/31;
}
if (key==CLEAR)
{ WHILE(KEYPAD()!=NUL);
lcd_clear();
lcd_gotoxy( 1, 1);
lcd_putc("Clear");
counter = 0;
tal=0;
Z=0;
Y=0;
cnt11=0,cnt22=0;
}
18

if (key==BTNNEGJ)
{
WHILE(KEYPAD()!=NUL);
NEGJ=!NEGJ;
}
if (key==TALBAI)
{
lcd_clear();
lcd_gotoxy( 1, 1);
lcd_putc("Square");
lcd_gotoxy(15,1);
lcd_putc("2");
tal=(Z+20)*(Y+20);
cnt11=tal/10000;
cnt22=tal%10000;
lcd_gotoxy(1,2);
convert(cnt11,8);
lcd_putc(".");
convert(cnt22,4);
lcd_gotoxy(14,2);
lcd_putc("m");
}
if(key==Leng)
{ lcd_clear();
lcd_gotoxy(1,1);
lcd_putc("Length");
if(n<1)
{if(cnt2>=81)
{
cnt2=cnt2+20;
s=cnt2/100;
cnt1=cnt1+s;
}
else cnt2=cnt2+20;
n++;
}
lcd_gotoxy(1,2);
convert(cnt1,3);
lcd_putc(".");
convert(cnt2,2);
lcd_gotoxy(8,2);
lcd_putc("m");
delay_ms(200);
}
WHILE (RUN)
{
KEY=KEYPAD();
19

if (key==BTNNEGJ)
{
WHILE(KEYPAD()!=NUL);
NEGJ=!NEGJ;
}
if (key==STOP)
{
lcd_clear();
lcd_gotoxy( 1 , 1);
lcd_putc("Stop");
DISABLE_interrupts(INT_EXT);
RUN=FALSE;
}
LCDSet();
}
}
}

20

21

You might also like