Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <util/delay.h>
- #include <stdio.h>
- #include "lcd.h"
- #define F_CPU 16000000UL
- #include "avr\interrupt.h"
- //LCD_puts("________________|________________|--------________________|________________");
- //LCD_command(0b1); LCD törlés
- char b, oszlop, sor, x, push, t[]= {1,2,3,4,5,6,7,8,9,10,0,11}; //10: * és 11: #
- int num, m, szintek = 4, akt, b1, k1, be[4], ki[4], bdb, kdb, ledek, led;
- extern void init_in_asm(void);
- extern void LED_out_in_asm(uint8_t);
- extern void seven_segment(uint8_t);
- char GetInt(void) {
- sor = 0;
- while(1)
- { //lenyomott bill-t keresünk 0…3 sorokban
- PORTC=(1<<(sor+3)); //Aktív sor=1. PORTC6..3 biteken. 0b0xxx_x000 (6-3 bit kifelé)
- _delay_ms(50); //Fesz. szintek terjedéséhez
- x=(~PINC)&7; //A lenyomott=0 szintet ad (nyitja a tranyót), ezért negálok ~-el.
- if (x) break; //Találtam 1 db lenyomott billentyut
- sor++;
- if (sor == 4) sor = 0;
- }
- oszlop = 0;
- while((x = x>>1)) oszlop++; //oszlop=0,1,2 x=1,2,4 lehetett.
- num = (int)t[3*sor+oszlop]; //Ahol t[] ascii kódokkal egy tömb.
- return(num);
- }
- void Inic() { //ENGEDÉLYEZÉSEK
- DDRB=0xF0;
- DDRD=0xF0;
- DDRC=0x78;
- DDRA=0xFF;
- }
- void Csekkol()
- {
- k1 = -1;
- b1 = -1;
- for(int i = 0; i < szintek; i++)
- {
- if(ki[i] == 1)
- k1 = i;
- if(be[i] == 1)
- b1 = i;
- }
- }
- void InnenCsokkent(int belso)
- {
- if(belso == 1 && be[akt] != 0)
- {
- for(int i = 0; i < szintek; i++)
- {
- if(be[i] > be[akt])
- be[i]--;
- }
- if(be[akt] > 0)
- {
- be[akt] = 0;
- bdb--;
- }
- }
- else if (belso == 0 && ki[akt] != 0)
- {
- for(int i = 0; i < szintek; i++)
- {
- if(ki[i] > ki[akt])
- ki[i]--;
- }
- if(ki[akt] > 0)
- {
- ki[akt] = 0;
- kdb--;
- ledek=(ledek-(0b00010000<<akt));
- }
- }
- }
- void Kiszall()
- {
- if(be[akt] > 0)
- {
- LCD_command(0b1);
- LCD_puts("kiszall");
- GetInt();
- InnenCsokkent(1);
- }
- }
- void LiftMozgas()
- {
- if((k1 != -1 && akt < k1) || (b1 != -1 && akt < b1))
- {
- akt++;seven_segment(akt);
- LCD_command(0b1);
- LCD_puts("fel");
- if(ki[akt] > 0 || be[akt] > 0)
- {
- LCD_puts(" es nyit");
- GetInt();
- }
- }
- else if((k1 != -1 && akt > k1) || (b1 != -1 && akt > b1))
- {
- akt--;seven_segment(akt);
- LCD_command(0b1);
- LCD_puts("le");
- if(ki[akt] > 0 || be[akt] > 0)
- {
- LCD_puts(" es nyit");
- GetInt();
- }
- }
- else
- {
- LCD_command(0b1);
- LCD_puts("itt nyit");
- GetInt();
- }
- Kiszall();
- Beszall();
- }
- void Lift()
- {
- while(1)
- {
- KulsoBekeres();
- Csekkol();
- LiftMozgas();
- }
- }
- void Beszall()
- {
- kiir();
- m = 0;
- while(m != 11)
- {
- LCD_command(0b1);
- LCD_puts("belso: ");
- m = GetInt();
- if(m < 4 && be[m] == 0)
- be[m] = ++bdb;
- }
- InnenCsokkent(0);
- }
- /*LedCsekk(){
- for(i=0;i<szintek;i++){
- if(ki[i]>0)
- ledek=(ledek-(0b00010000<<akt));
- }
- }*/
- void LCD_puts(char *s)
- {
- while(*s) LCD_data(*s++);
- }
- char Button(void)
- {
- push = PING; //push - globális változó
- return(push);
- }
- void KulsoBekeres()
- {
- char indit;
- LCD_command(0b1);
- LCD_puts("kulso:");
- do
- {
- do
- {
- b = Button();
- }while(b == NULL);
- if(b != NULL && b < 9)
- {
- indit='1';
- LCD_command(0b1);
- switch(b)
- {
- case 1:
- LCD_command(0b1);
- if(ki[0] > 0) break;
- ledek=ledek+0b00010000;
- LCD_puts("fsz");
- ki[0]=++kdb; break;
- case 2:
- LCD_command(0b1);
- if(ki[1] > 0) break;
- ledek=ledek+0b00100000;
- LCD_puts("1.em");
- ki[1]=++kdb; break;
- case 4:
- LCD_command(0b1);
- if(ki[2] > 0) break;
- ledek=ledek+0b01000000;
- LCD_puts("2.em");
- ki[2]=++kdb; break;
- case 8:
- LCD_command(0b1);
- if(ki[3] > 0) break;
- ledek=ledek+0b10000000;
- LCD_puts("3.em");
- ki[3]=++kdb; break;
- default: break;
- }
- indit = GetInt();
- }
- else if( b == 16)
- {
- indit = 11;
- }
- }while(indit != 11);
- LCD_command(0b1);
- LED_out_in_asm(ledek);
- }
- void kiir(){
- unsigned char s[81];
- LCD_command(0b1);
- sprintf(s,"%d,%d,%d,%d %d,%d,%d,%d",ki[0],ki[1],ki[2],ki[3],be[0],be[1],be[2],be[3]);
- LCD_puts(s);
- GetInt();
- }
- int main()
- {
- LCD_init();
- init_in_asm();
- Inic();
- Lift();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement