Sei sulla pagina 1di 7

National University of Computer and

Emerging Sciences, FAST

Microprocessor Interfacing and


Programming Lab Project
Smart Weather Station Project
Project Report
Submitted To:
Engr. Iqra Akram
Submitted By Group Members:
Tanzeel Ahmad
17i-0475
Abdul Rehman Saeed
17i-0540
Section: EE-A
Components:
 ATmega32A
 16X2 LCD
 4X3 Keypad
 HC-06 Bluetooth module
 Lm35 temperature sensor
 1k Potentiometer
 LEDs
 Connecting wires
 5v power supply

Software used:
 Atmel studio 6.0
 Proteus 8.6

Circuit Diagram:
Flowchart:

Code:
//KEYPAD NOP
.EQU KEY_PORT = PORTA IN R21,KEY_PIN
.EQU KEY_PIN = PINA ANDI R21,0x0F
.EQU KEY_DDR = DDRA CPI R21,0x0F
//LCD DATA PORT BRNE COL1
.EQU LCD_DPRT = PORTC LDI R21, 0b10101111
.EQU LCD_DDDR = DDRC OUT KEY_PORT, R21
.EQU LCD_DPIN = PINC NOP
//LCD COMMAND PORT IN R21, KEY_PIN
.EQU LCD_CPRT = PORTD ANDI R21,0x0F
.EQU LCD_CDDR = DDRD CPI R21,0x0F
.EQU LCD_CPIN = PIND BRNE COL2
//LCD LDI R21, 0b11001111
.EQU LCD_RS = 5 OUT KEY_PORT, R21
.EQU LCD_RW = 6 NOP
.EQU LCD_EN = 7 IN R21, KEY_PIN
//MAIN STARTING ANDI R21,0x0F
.ORG 0x00 CPI R21,0x0F
LDI R16, HIGH (RAMEND) BRNE COL3
OUT SPH,R16 LDI R21, 0b11101111
LDI R16, LOW (RAMEND) OUT KEY_PORT, R21
OUT SPL,R16 NOP
LDI R16, 0xFF COL1:
OUT LCD_DPRT,R16 LDI R30, LOW(KCODE0<<1)
//PC0 – PC3 rows LDI R31, HIGH(KCODE0<<1)
//PC4 – PC7 columns RJMP Find
LDI R16, 0xF0 //PORTA 0-3 INPUT COL2:
PINS LDI R30, LOW(KCODE1<<1)
OUT KEY_DDR, R16 LDI R31, HIGH(KCODE1<<1)
GroundAllColumns: RJMP Find
LDI R16, 0x0F //PORTA 0-3 DISPLAY COL3:
111 LDI R30, LOW(KCODE2<<1)
OUT KEY_PORT, R16 LDI R31, HIGH(KCODE2<<1)
//LCD INITIALIZATION RJMP Find
CALL LCD_INIT Find:
//GIVE MESSAGE FOR GETTING LSR R21
PASSWORD BRCC Match
PASSWORD: LPM R20, Z+
LDI R31,HIGH(MSG1<<1) RJMP Find
LDI R30,LOW(MSG1<<1) MATCH:
LOOP1:LPM R16,Z+ LPM R20, Z
CPI R16,0 IN R16,KEY_PIN
BREQ KPD_ISR ANDI R16,0x0F
CALL DATAWRT CPI R16,0X0F
RJMP LOOP1 BREQ KPD_ISR
MSG1: .DB "ENTER PASSWORD",0 OUT LCD_DPRT, R20
//INPUT FROM KEYPAD AND OUTPUT ON MOV R16,R20
LCD CALL DATAWRT
KPD_ISR: //CALL BDELAY
LDI R16,0xC3 CALL DELAY_1s
CALL CMNDWRT //PASSWORD COMPARING
LDI R21,MESSAGE
//GIVES 0b01101111 SYSTEM CPI R20,'4'
KCODE2: .DB '3', ABOUT
'6', '9','#'
OUT KEY_PORT,R21
SYSON:FUNCTION BRNE PASS
//LCD
LDI R16,0X01
LCD_INIT:
CALLr21,(1<<JTD);
ldi CMNDWRT
CALLmcucsr,r21
out DELAY_1s
LDI R16,0X0C
out mcucsr,r21
CALL CMNDWRT
LDI R21,0xFF;
LDI R31,HIGH(MSG2<<1)
LDI LCD_DDDR,
OUT R30,LOW(MSG2<<1)
R21
LOOP2:LPM
OUT R16,Z+
LCD_CDDR, R21
CPI R16,0
//CALL DELAY_2ms
BRSH G1 BDELAY:
LDI R19,'0' LDI R24, 8
ADD R18,R19 LA:CALL DELAY
MOV R16,R18 DEC R24
CALL DATAWRT BRNE LA
RJMP LESS1 RET
G1:
LDI R19,'7' DELAY:
ADD R18,R19 PUSH R17
MOV R16,R18 LDI R17,20
CALL DATAWRT LDR1:
//CALL CONVERSION CALL DELAY_2ms
LESS1: DEC R17
MOV R18,R22 PUSH R17
SDELAY:
NOP
NOP
RET

Working:
In this project, we are simply getting data from our sensors and displaying
them on lcd and also sending to mobile phone through Bluetooth module.
First of all, when system is turned ON, we asked to enter a password. If
wrong password entered same will prompt again. When correct password is
entered then we go to lm35 for reading temperature. Then, we are reading
lm35 temperature sensor and converting the output of lm35 from analog to
digital using ADC4 pin of ADC of AVR. Then after converting the analog
temperature to digital, we are getting that digital data from ADCH after
left-justified and converting that digital data into HEX format by adding 48
or zero character to every half of the 8 bit data and then displaying that on
lcd using datawrite. Then we are transmitting that HEX data to hc-06
which will then send that data to mobile.

Output:

Potrebbero piacerti anche