Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <stdio.h>
- #include <string.h>
- #define clrbit(var,bit) var &= ~(1<<bit)
- #define setbit(var,bit) var |= 1<<bit
- #define FMSG 0
- #define WAIT 1
- #define RING 2
- #define OPEN 3
- #define COD1 4
- #define COD2 5
- #define COD3 6
- #define ERR 7
- #define BROASCA 1
- void sysinit();
- void initLCD();
- void putchLCD(char ch);
- void putsLCD(char *ch);
- void clrLCD();
- void gotoLC(unsigned char line, unsigned char col);
- char kbscan();
- int main(){
- char code_now=0x7f, code_ante;
- unsigned char kbhit=0;
- char kbcode = 0x7f;
- unsigned char cmd = 0;
- long i = 0;
- int time = 0;
- unsigned char loop_cnt=0;
- volatile unsigned long int delay;
- char cod[4]="123";
- char buf[4];
- char stare = FMSG;
- sysinit();
- while (1){
- //determina daca este tasta apasata
- if(loop_cnt==100){
- code_ante=code_now;
- code_now = kbscan();
- if(code_now!=0x7f && code_ante==0x7f){
- kbhit=1;
- kbcode=code_now;
- }
- loop_cnt=0;
- }
- //SFSM
- switch (stare){
- case FMSG:
- clrLCD();
- putsLCD("1..8 ca sa suni,");
- gotoLC(2,1);
- putsLCD("C pentru cod:");
- stare = WAIT;
- break;
- case WAIT:
- if(kbhit){
- kbhit=0;
- if ('C'==kbcode){
- clrLCD();
- putsLCD("Cod=");
- stare = COD1;
- }
- if (kbcode>='1' && kbcode <= '8'){
- clrLCD();
- putsLCD("Sun la ");
- putchLCD(kbcode);
- i=0;
- stare = RING;
- }
- }
- break;
- case RING:
- cmd = PINB & 0x01;
- if(i==100000)
- putchLCD('.');
- if(i==200000)
- putchLCD('.');
- if(i==300000)
- putchLCD('.');
- if(i==400000){
- clrLCD();
- putsLCD("Sun la ");
- putchLCD(kbcode);
- i=0;
- time+=4;
- }
- if(time>15){
- time = 0;
- stare = FMSG;
- }
- if(cmd){
- time = 0;
- clrLCD();
- putsLCD("Deschis");
- cmd = 0;
- stare = OPEN;
- }
- break;
- case COD1:
- if(kbhit){
- kbhit=0;
- if (kbcode>='0' && kbcode <= '9'){
- buf[0]=kbcode;
- putchLCD('*');
- stare = COD2;
- }
- else{
- stare = FMSG;
- }
- }
- break;
- case COD2:
- if(kbhit){
- kbhit=0;
- if (kbcode>='0' && kbcode <= '9'){
- buf[1]=kbcode;
- putchLCD('*');
- stare = COD3;
- }
- else{
- stare = FMSG;
- }
- }
- break;
- case COD3:
- if(kbhit){
- kbhit=0;
- if (kbcode>='0' && kbcode <= '9'){
- buf[2]=kbcode;
- putchLCD('*');
- stare = OPEN;
- if (strncmp(cod,buf, 3) == 0){
- clrLCD();
- putsLCD("Deschis");
- stare = OPEN;
- } else {
- clrLCD();
- putsLCD("Cod invalid");
- stare = ERR;
- }
- }
- else{
- stare = FMSG;
- }
- }
- break;
- case OPEN:
- setbit(PORTB,BROASCA);
- for(delay=0; delay <5*250000UL; delay++){}
- clrbit(PORTB,BROASCA);
- stare = FMSG;
- break;
- case ERR:
- for(delay=0; delay <5*250000UL; delay++){}
- stare = FMSG;
- break;
- }//end switch
- loop_cnt++;
- i++;
- }//end while
- }//end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement