Escolar Documentos
Profissional Documentos
Cultura Documentos
Projeto senha
=>
=>
Fixando-se R1 como 100, tem-se Rf = 12 e podemos preencher uma tabela com os valores das
resistncias, e os valores mximos e mnimos lidos pelo conversor A/D:
Valor ()
Leitura mnima
Leitura Mxima
R1
100
133,91
3074
3996
R2
150
200,28
2119
2773
R3
220
293,22
1476
1941
R4
330
439,25
1000
1319
R5
470
625,11
708
937
R6
680
903,89
493
653
R7
1K
1K329
337
447
R8
1K5
1K992
225
300
R9
2K2
2K922
154
205
R10
3K3
4K382
102
137
R11
4K7
72
97
Rf
12
No traz nenhum prejuzo ao projeto multiplicar todos os valores por potncias de 10, o que pode
ser til em situaes em que no se encontram seus valores.
A leitura mnima segue a equao:
Mnima: 4095*(11.5*0.95*12/(0.95*12+1.05*R))/1.5
Mxima: 4095*(12.5*1.05*12/(1.05*12+0.95*R))/1.5
Circuito externo
12V
+V
R1
100
S0
R2
150
S1
R3
220
S2
R4
330
S3
R5
470
S4
R6
680
S5
R7
1k
S6
R8
1k5
S7
R9
2k2
S8
R10
3k3
S9
R11
4k7
SENTER
U1
OPAMP5
R13
1k5
A0
+
R12
12
C1
100nF
Programa
#include"io430.h"
intKEY(void);
//Lteclaapertada
intRD_ADC(void);
//Converteparadigitalaentradaanalgica
voidLCDN(int);
//Nmeros,pontoseespaoLCD
voidLCDC(int);
//ControlaoLCD
voidLCDL(char);
//LetrasLCD
voidLCDF(int);
//FrasesLCD
voidDELAY(int);
//Atrasaoprograma
intmain()
{
unsignedintk,ka,mode=1,d,senha[5],entrada[5];
/*'k'controlaateclaapertadanaquelemomento;
'ka'controlaaltimateclaapertada;
Quando'mode'iguala0oprogramalerasenhaeperguntaraousurio
sedeseja
abriroudefinirnovasenha;
Quando'mode'iguala1omicrocontroladorabreaporta;
Quando'mode'iguala2ousuriocapazdedefinirnovasenha;
Ovetor'senha'armazenaasenha;
Ovetor'entrada'armazenaoqueousurioestdigitando.*/
WDTCLT=WDTPW|WDTHOLD; //Travaocodeguarda
P1DIR=0XFE;
//P1.0aentradaanalgica0
P2DIR=0XEF;
//P2.4recebeabusyflag
P1OUT=0X00;
P2OUT=0X00;
while(1)
{
while(mode!=1)
{
LCDC(2);
//CLEAR
if(mode==0)
LCDF(0);//Entrecomasenha
elseif(mode==2)
LCDF(1);
//Definasenha
DELAY(10000);//Esperaparaqueousurioleiaamensagem
LCDC(2);
for(d=0,k=0,ka=10;d<4;d++)
{
while(1)
{
LCDN(ka); //10equivaleabranco
k=KEY();
DELAY(500);
//Aguardaousuriotirarodedo
datecla
if(ka!=10&k==10)
break;
elseka=k;
}
LCDC(1);
//Passaparaoprximonmero
if(mode==0)
entrada[d]=ka;
elseif(mode==2)
senha[d]=ka;
ka=k;
}
LCDC(2);
LCDF(2);
//Confirmaasenha?
if(KEY()!=10) break;
elseif(mode==2)
{
mode=0;
break;
}
elseif(mode==0&entrada==senha)
{
do
{
LCDC(2);
LCDF(3);
//1)Abrir
2)Redefinirsenha
DELAY(10000);
LCDC(2);
while(1)
{
LCDN(ka);
k=KEY();
DELAY(500);
if(ka!=10&k==10)
break;
elseka=k;
}
LCDC(1);
}
while(ka!=0&ka!=1);
mode=ka;
ka=k;
break;
}
elseif(mode==0&entrada!=senha)
{
LCDC(2);
LCDF(4);
//SENHAINCORRETA
DELAY(10000);
}
}
while(mode==1)
{
LCDC(2);
LCDF(5);
//PressioneENTERparatravar
P1OUT|=0X08;
while(KEY()!=10);
P1OUT&=0XF7;
mode=0;
}
}
intKEY(void)
{
intn;
n=RD_ADC();
while(1)
{
if(n>3073&n<3997)
{
return(0);
break;
}
elseif(n>2118&n<2774)
{
return(1);
break;
}
elseif(n>1475&n<1942)
{
return(2);
break;
}
elseif(n>999&n<1318)
{
return(3);
break;
}
elseif(n>707&n<938)
{
return(4);
break;
}
elseif(n>492&n<654)
{
return(5);
break;
}
elseif(n>336&n<448)
{
return(6);
break;
}
elseif(n>224&n<301)
{
return(7);
break;
}
elseif(n>153&n<206)
{
return(8);
break;
}
elseif(n>101&n<138)
{
return(9);
break;
}
elseif(n>71&n<98)
{
return(10);
//ENTER
break;
}
}
}
intRD_ADC(void)
{
P6SEL|=0X01;
//HabilitaocanalA0paraconverso
ADC12CTL0=ADC12ON+SHT0_2;
//LigaADC12edefinetempodeamostragem
ADC12CTL1=SHP;
//Usarsamplingtimer
ADC12MCTL0=SREF_0;
//Vr+=1.5Vinterno
ADC12CTL0|=ENC;
//Habilitaconverso
ADC12CTL0|=ADC12SC; //Iniciaconverso
while((ADC12IFG&SIT0)==0);
return(ADC12MEM0);
}
voidLCDN(intn)
{
switch(n)
{
case0:
P2OUT=0X03;
P1OUT=0X06;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case1:
P2OUT=0X03;
P1OUT=0X16;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case2:
P2OUT=0X03;
P1OUT=0X26;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case3:
P2OUT=0X03;
P1OUT=0X36;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case4:
P2OUT=0X03;
P1OUT=0X46;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case5:
P2OUT=0X03;
P1OUT=0X56;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case6:
P2OUT=0X03;
P1OUT=0X66;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case7:
P2OUT=0X03;
P1OUT=0X76;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case8:
P2OUT=0X03;
P1OUT=0X86;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case9:
P2OUT=0X03;
P1OUT=0X96;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case10:
//[ESPAO]
P2OUT=0X02;
P1OUT=0X06;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case11:
//[DOISPONTOS]
P2OUT=0X03;
P1OUT=0XA6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case12:
//[PONTOFINAL]
P2OUT=0X02;
P1OUT=0XE6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case13:
//[EXCLAMAO]
P2OUT=0X02;
P1OUT=0X16;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case14:
//[INTERROGAO]
P2OUT=0X03;
P1OUT=0XF6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case15:
//[Fechaparntese]
P2OUT=0X02;
P1OUT=0X96;
DELAY(100);
LCDC(0);
DELAY(100);
break;
}
}
voidLCDC(intc)
{
switch(c)
{
case0:
//Travar,ENABLEnvelbaixo
P1OUT&=0XFB;
break;
case1:
//Movecursorparaadireita
P1OUT=0X44;
P2OUT=0X01;
break;
case2:
//CLEAR
P2OUT=0X00;
P1OUT=0X14;
break;
}
}
voidLCDL(charl)
{
switch(l):
{
case'A':
P2OUT=0X04;
P1OUT=0X16;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'C':
P2OUT=0X04;
P1OUT=0X36;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'D':
P2OUT=0X04;
P1OUT=0X46;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'E':
P2OUT=0X04;
P1OUT=0X56;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'H':
P2OUT=0X04;
P1OUT=0X86;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'I':
P2OUT=0X04;
P1OUT=0X96;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'N':
P2OUT=0X04;
P1OUT=0XE6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'O':
P2OUT=0X04;
P1OUT=0XF6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'R':
P2OUT=0X05;
P1OUT=0X26;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'S':
P2OUT=0X05;
P1OUT=0X36;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'T':
P2OUT=0X05;
P1OUT=0X46;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'a':
P2OUT=0X06;
P1OUT=0X16;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'b':
P2OUT=0X06;
P1OUT=0X26;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'c':
P2OUT=0X06;
P1OUT=0X36;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'd':
P2OUT=0X06;
P1OUT=0X46;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'e':
P2OUT=0X06;
P1OUT=0X56;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'f':
P2OUT=0X06;
P1OUT=0X66;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'h':
P2OUT=0X06;
P1OUT=0X86;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'i':
P2OUT=0X06;
P1OUT=0X96;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'm':
P2OUT=0X06;
P1OUT=0XD6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'n':
P2OUT=0X06;
P1OUT=0XE6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'o':
P2OUT=0X06;
P1OUT=0XF6;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'p':
P2OUT=0X07;
P1OUT=0X06;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'r':
P2OUT=0X07;
P1OUT=0X26;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case's':
P2OUT=0X07;
P1OUT=0X36;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case't':
P2OUT=0X07;
P1OUT=0X46;
DELAY(100);
LCDC(0);
DELAY(100);
break;
case'v':
P2OUT=0X07;
P1OUT=0X66;
DELAY(100);
LCDC(0);
DELAY(100);
break;
}
}
voidLCDF(intf)
{
intcont;
charstr[32];
switch(f)
{
case0:
str="Entre0com0a0senha333";
break;
case1:
str="Defina0senha333";
break;
case2:
str="Confirma0senha4";
break;
case3:
str="15Abrir333025Redefinir0senha333";
break;
case4:
str="SENHA0INCORRETA6";
break;
case5:
str="ENTERparatravar333";
break;
}
for(cont=0;str[cont]!='\0';cont++)
{
if(str[cont]=='0')
LCDN(10);
elseif(str[cont]=='1')
LCDN(1);
elseif(str[cont]=='2')
LCDN(2);
elseif(str[cont]=='3')
LCDN(12);
elseif(str[cont]=='4')
LCDN(14);
elseif(str[cont]=='5')
LCDN(15);
elseif(str[cont]=='6')
LCDN(13);
elseLCDL(str[cont]);
LCDC(1);
}
}
voidDELAY(intd)
{
for(;d>0;d);
}