Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <51/AnalogDevices/AduC834.h>
- #include <stdio.h>
- //at (adres)0xA0 (dyrektywa)sbit (nazwa)LED1
- at 0xA0 sbit LED1;
- at 0xA1 sbit KLAWISZ1;
- at 0xA3 sbit KLAWISZ2;
- at 0x8000 xdata char LCD_DATA; //xdata - adres uzyty w zewnetrzej pamieci danych
- at 0x8001 xdata char LCD_COMMAND;
- at 0x8001 xdata volatile char LCD_STATUS;
- void KLAWIATURA(void) interrupt 0 using 1;
- char numer = 0;
- char flaga = 0;
- char flaga2 = 0;
- char znak = 0;
- char NAPIS[10];
- void LCD_DATA_WR(char DANE){
- LCD_DATA = DANE;
- while((LCD_STATUS&0x03)!=0x03);
- }
- void LCD_COMMAND_WR(char rozkaz){
- LCD_COMMAND = rozkaz;
- while((LCD_STATUS&0x03)!=0x03);
- }
- void INIT_LCD(){
- LCD_COMMAND_WR(0x80); //CGRAM + CGROM, TXT + GRAPH
- LCD_DATA_WR(0x00); // wskazniki ekranu graficznego
- LCD_DATA_WR(0x00);
- LCD_COMMAND_WR(0x42);
- LCD_DATA_WR(0x1E); // 30 kolumn graf.
- LCD_DATA_WR(0x00);
- LCD_COMMAND_WR(0x43);
- LCD_DATA_WR(0x00); // wskaznik ekranu tekstowego
- LCD_DATA_WR(0x10);
- LCD_COMMAND_WR(0x40);
- LCD_DATA_WR(0x1E); // 30 kolumn txt
- LCD_DATA_WR(0x00);
- LCD_COMMAND_WR(0x41);
- LCD_COMMAND_WR(0x94); // wyswitlaj txt bez kursora
- }
- int putchar(const int c){
- LCD_DATA_WR(c-0x20);
- LCD_COMMAND_WR(0xC0); // zapisz znak i zwieksz adres
- return c;
- }
- void USTAW_POZYCJE(int adres){
- LCD_DATA_WR(adres&0x00FF);
- LCD_DATA_WR(adres>>8);
- LCD_COMMAND_WR(0x24);
- }
- void POZYCJA(char kolumna, char wiersz)
- {
- int adres=0x1000+(kolumna+wiersz*60);
- LCD_DATA_WR(adres&0x00FF);
- LCD_DATA_WR(adres>>8);
- LCD_COMMAND_WR(0x24);
- }
- void CLRSCR(){
- int i = 0;
- USTAW_POZYCJE(0x1000);
- for(i; i<255; i++)
- {
- putchar(0x20);
- }
- }
- void ZAPISZ_NAPIS(char* napis)
- {
- int i;
- for(i=0; napis[i]!='\0'; i++){
- putchar(napis[i]);
- }
- }
- void KLAWIATURA() interrupt 0 using 1
- {
- switch(numer)
- {
- case 0:
- znak=0;
- break;
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- if(P1&1) znak=znak|(1<<numer-1);
- break;
- case 9: break;
- case 10:
- numer = -1;
- flaga = 1;
- break;
- }
- numer++;
- }
- char TLUMACZ(char znak)
- {
- switch(znak)
- {
- case 0x1c: return 'a'; break;
- case 0x32: return 'b'; break;
- case 0x21: return 'c'; break;
- case 0x23: return 'd'; break;
- case 0x24: return 'e'; break;
- case 0x2b: return 'f'; break;
- case 0x34: return 'g'; break;
- case 0x33: return 'h'; break;
- case 0x43: return 'i'; break;
- case 0x3b: return 'j'; break;
- case 0x42: return 'k'; break;
- case 0x4b: return 'l'; break;
- case 0x3a: return 'm'; break;
- case 0x31: return 'n'; break;
- case 0x44: return 'o'; break;
- case 0x4d: return 'p'; break;
- case 0x15: return 'q'; break;
- case 0x2d: return 'r'; break;
- case 0x1b: return 's'; break;
- case 0x2c: return 't'; break;
- case 0x3c: return 'u'; break;
- case 0x1d: return 'w'; break;
- case 0x2a: return 'v'; break;
- case 0x22: return 'x'; break;
- case 0x35: return 'y'; break;
- case 0x1a: return 'z'; break;
- case 0x29: return ' '; break;
- default: break;
- }
- }
- char CEZAR2(char znak)
- {
- switch(znak)
- {
- case 0x1c: return 'g'; break;
- case 0x32: return 'h'; break;
- case 0x21: return 'i'; break;
- case 0x23: return 'j'; break;
- case 0x24: return 'k'; break;
- case 0x2b: return 'l'; break;
- case 0x34: return 'm'; break;
- case 0x33: return 'n'; break;
- case 0x43: return 'o'; break;
- case 0x3b: return 'p'; break;
- case 0x42: return 'q'; break;
- case 0x4b: return 'r'; break;
- case 0x3a: return 's'; break;
- case 0x31: return 't'; break;
- case 0x44: return 'u'; break;
- case 0x4d: return 'w'; break;
- case 0x15: return 'v'; break;
- case 0x2d: return 'x'; break;
- case 0x1b: return 'y'; break;
- case 0x2c: return 'z'; break;
- case 0x3c: return 'a'; break;
- case 0x1d: return 'b'; break;
- case 0x2a: return 'c'; break;
- case 0x22: return 'd'; break;
- case 0x35: return 'e'; break;
- case 0x1a: return 'f'; break;
- default: break;
- }
- }
- int main()
- {
- //int i = 0;
- PLLCON = 0;
- IE = 0x81; // 1000 0001 binary - odblokowanie przerwania INT0
- IT0 = 1; // zbocze opadające
- INIT_LCD();
- CLRSCR();
- USTAW_POZYCJE(0x1000);
- ZAPISZ_NAPIS("Tekst:");
- while(1)
- {
- if(flaga)
- {
- if((znak!=0xf0) && (flaga2==0)) //znak różny od F0
- {
- if(KLAWISZ1==1) printf("%c", TLUMACZ(znak));
- if(KLAWISZ1==0) printf("%c", CEZAR2(znak));
- flaga2=1;
- }
- else flaga2=0;
- flaga=0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement