You are on page 1of 6

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA

Universitatea Tehnică a Moldovei


Facultatea Calculatoare,Informatică şi Microelectronică

Raport
la lucrare de laborator nr.5
Disciplina:Microprocesoare

A efectuat: st.gr.ISBM-151,Griţco Dmitrii

A verificat: Cebotari Vlad

Chişinău 2017
Scopul lucrarii: Dea a proiecta modelul unei tastiere de calculator, care va detecta apasarea unui
buton si afisarea valorii acestuia la ecran.
Mersul lucrarii:
1.Am studiat informatia necesara pentru efectuarea laboratorului.
2.Am scris codul programului.
/*
* GccApplication1.cpp
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include "key4x4.h"
#include "seg7.h"
void Int0_Init(){
GICR = (1<<INT0);
MCUCR = (1<<ISC01) | (1<<ISC00);
DDRD &= ~(1<<PIND2);
PORTD |= (1<<PIND2);}
ISR(INT0_vect){
char ch = Key4x4_GetChar();
Seg7_PutChar(ch);
Key4x4_Init();}
int main(void){
Int0_Init();
Key4x4_Init();
Seg7_Init();
sei();
while(1);}

/*
* key4x4.c
*/
#include "key4x4.h"
char Key4x4_ToChar(char key);
void Key4x4_Init(void){
KEY_DDR = 0x0F;
KEY_PORT = 0xF0;}
char Key4x4_GetKey(void){
KEY_DDR=0x0F;

KEY_PORT=0xF0;
char Col = KEY_PIN;
KEY_DDR=0xF0;
KEY_PORT=0x0F;
char Row = KEY_PIN;
char Key = Col | Row;
return Key;}
char Key4x4_GetChar(void){
char key = Key4x4_GetKey();
char ch = Key4x4_ToChar(key);
return ch;}

char Key4x4_ToChar(char key){


char ch;
switch(key=0){
case 1: ch = 0b01111110; break;
case 2: ch = 0b10111110; break;
case 3: ch = 0b11011110; break;
case 4: ch = 0b01111101; break;
case 5: ch = 0b10111101; break;
case 6: ch = 0b11011101; break;
case 7: ch = 0b01111011; break;
case 8: ch = 0b10111011; break;
case 9: ch = 0b11011011; break;
case 0: ch = 0b10110111; break;
default: ch = 0;}
return ch;}
/*
* seg7.c
*/
#include "seg7.h"
extern char CharTo7Seg(char ch);
void Seg7_Init(void){
SEG7_DDR = 0xFF;
SEG7_PORT = 0x00;}
void Seg7_PutChar(char ch){
char seg7 = CharTo7Seg(ch);
SEG7_PORT = seg7;}

Nr_7seg:
k0:
cpi r16, 0
brne k1
ldi r16, 0b00111111
rjmp k_end
k1:
cpi r16, 1
brne k2
ldi r16, 0b00000110
rjmp k_end

k2:
cpi r16, 2
brne k3
ldi r16, 0b01011011
rjmp k_end

k3:
cpi r16, 3
brne k4
ldi r16, 0b01001111
rjmp k_end

k4:
cpi r16, 4
brne k5
ldi r16, 0b01100110
rjmp k_end

k5:
cpi r16, 5
brne k6
ldi r16, 0b01101101
rjmp k_end

k6:
cpi r16, 6
brne k7
ldi r16, 0b01111101
rjmp k_end

k7:
cpi r16, 7
brne k8
ldi r16, 0b00000111
rjmp k_end

k8:
cpi r16, 8
brne k9
ldi r16, 0b01111111
rjmp k_end

k9:
cpi r16, 9
brne ka
ldi r16, 0b01101111

rjmp k_end

ka:
cpi r16, 10
brne kb

ldi r16, 0b01110111

rjmp k_end

kb:
cpi r16, 11
brne kc
ldi r16, 0b01111100
rjmp k_end

kc:
cpi r16, 12
brne kd
ldi r16, 0b01011000
rjmp k_end

kd:
cpi r16, 13
brne ke
ldi r16, 0b01011110
rjmp k_end

ke:
cpi r16, 14
brne kf
ldi r16, 0b01111001
rjmp k_end

kf:
cpi r16, 15
brne kreset
ldi r16, 0b01110001
rjmp k_end
kreset:
ldi r16, 0b00111111
k_end:
ret
3.Am realizat schema in proteus.

You might also like