Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <stdio.h>
- #include "iofn.c"
- #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 SEC 250000UL
- #define LED 1
- 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;
- unsigned char loop_cnt=0;
- volatile unsigned long int delay;
- int cod = 123; //sau char cod[4]="123";
- char buf[4];
- char stare = FMSG;
- char ap = " ";
- unsigned char CMD = PINB & 1<<0;
- 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);
- ap = kbcode;
- stare = RING;
- }
- }
- break;
- case RING:
- clrLCD();
- putsLCD("Sun la ");
- putchLCD(ap);
- for(delay=0; delay <= 15 * SEC; delay++){
- if(CMD)
- stare = OPEN;
- if(delay % SEC == 0 && (delay % (4 * SEC) != 0) ){
- putsLCD(".");
- }
- else if(delay % (4 * SEC) == 0){
- clrLCD();
- putsLCD("Sun la ");
- putchLCD(ap);
- }
- else{
- //do nothing.
- }
- }
- clrLCD();
- putsLCD("Nu raspunde!");
- for(delay=0; delay <= 5 * SEC; delay++){}
- stare = FMSG;
- 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('*');
- if(buf[0] == 1 && buf[1] == 2 && buf[2] == 3){
- buf[0] = 0;
- buf[1] = 0;
- buf[2] = 0;
- stare = OPEN;
- }
- else{
- stare = ERR;
- }
- }
- else{
- stare = FMSG;
- }
- }
- break;
- case OPEN:
- clrLCD();
- gotoLC(1,1);
- putsLCD("Deschis!");
- setbit(PORTB,LED);
- for(delay=0; delay < 5 * SEC; delay++){}//asteapta 5 secunde
- clrbit(PORTB,LED);
- stare = FMSG;
- break;
- case ERR:
- clrLCD();
- gotoLC(1,1);
- putsLCD("Cod invalid!");
- for(delay=0; delay < 5 * SEC; delay++){}//asteapta 5 secunde
- stare = FMSG;
- break;
- }//end switch
- loop_cnt++;
- }//end while
- }//end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement