SHARE
TWEET

Untitled

a guest May 22nd, 2019 53 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define F_CPU 16000000
  2. #include <avr/io.h>
  3. #include<util//delay.h>
  4. #include <avr/interrupt.h>
  5.  
  6. #define DEFSEQ_ConfigPortAsOutput(PortName,IniVal) DDR ## PortName=0xff;\
  7.                                                    PORT ## PortName=IniVal;
  8. #define DEFSEQ_ConfigPortPinAsOutput(PortName, PinNo) DDR ## PortName|=(1<<PinNo);
  9.  
  10. #define DEFSIG_LCD_E_Low        PORTA&=~(1<<PA0)
  11. #define DEFSIG_LCD_E_High       PORTA|=(1<<PA0)
  12. #define DEFSIG_LCD_RS_Command   PORTA&=~(1<<PA1)
  13. #define DEFSIG_LCD_RS_Data      PORTA|=(1<<PA1)
  14.  
  15. #define DEFCMD_LCD_FunctionSet  (1<<5)
  16. #define DEFSET_LCD_DataLenght8  (1<<4)
  17. #define DEFSET_LCD_2Lines       (1<<3)
  18. #define DEFSET_LCD_FontSize5x8  (0<<2)
  19.  
  20. #define DEFCMD_LCD_DisplayControl (1<<3)
  21. #define DEFSET_LCD_DisplayOn      (1<<2)
  22. #define DEFSET_LCD_CursorOff      (0<<1)
  23. #define DEFSET_LCD_CursorOn       (1<<1)
  24. #define DEFSET_LCD_BlinkingOff    (0<<0)
  25. #define DEFSET_LCD_BlinkingOn     (1<<0)
  26.  
  27. #define DEFCMD_LCD_ClearDisplay   (1<<0)
  28.  
  29. #define DEFCMD_LCD_ReturnHome     (1<<1)
  30.  
  31. #define DEFCMD_LCD_EntryMode      (1<<2)
  32. #define DEFSET_LCD_CursorMoveDirInc (1<<1)
  33. #define DEFSET_LCD_CursorMoveDirDec (0<<1)
  34.  
  35. #define DEFCMD_LCD_SetDDRAMAddress (1<<7)
  36.  
  37. #define DEFCMD_LCD_CurDispShift (1<<4)
  38. #define DEFSET_LCD_DisplyShift  (1<<3)
  39. #define DEFSET_LCD_CursorShift  (0<<3)
  40. #define DEFSET_LCD_ShiftLeft    (0<<2)
  41. #define DEFSET_LCD_ShiftRight   (1<<2)
  42.  
  43. #define DEFCMD_LCD_SetCGRAMAddress  (1<<6)
  44.  
  45. //uint8_t VAR_String1[]="Mikroprocesory";
  46. //uint8_t VAR_P1[]="nacisnieto P1";
  47. //uint8_t VAR_P2[]="nacisnieto P2";
  48. uint8_t VAR_t[]="000";
  49. #define DEFVAL_CharSi   0
  50. #define DEFVAL_CharEe   1
  51.  
  52. volatile uint8_t key_state=0;
  53. volatile uint8_t key_state2=0;
  54. volatile uint8_t key_state3=0;
  55.  
  56.  
  57. const uint8_t Const_CharSi[8]={
  58.         0b00001000,
  59.         0b00000100,
  60.         0b00001110,
  61.         0b00010000,
  62.         0b00001110,
  63.         0b00000001,
  64.         0b00011110,
  65.         0b00000000
  66.     };
  67.     const uint8_t Const_CharEe[8]={
  68.         0b00000000,
  69.         0b00000000,
  70.         0b00001110,
  71.         0b00010001,
  72.         0b00011111,
  73.         0b00010000,
  74.         0b00001110,
  75.         0b00000010
  76.     };
  77.    
  78.     ISR(TIMER0_COMP_vect)
  79.     {
  80.         //static uint8_t cnt=0;
  81.         //PORTB |=0X0f;
  82.         //PORTA = LED[cnt];
  83.         //PORTB &= ~(1<< cnt);
  84.         //if (++cnt>3) cnt=0;
  85.        
  86.        
  87.         //obsluga przycisku
  88.         switch(key_state)
  89.         {
  90.             case 0: if((PINC & 0b10000000)==0) key_state=1;
  91.             break;
  92.            
  93.             case 1: if((PINC & 0b10000000)==0) key_state=2;
  94.             else key_state=0;
  95.             break;
  96.            
  97.             case 2:break;
  98.            
  99.             case 3: if((PINC & 0b10000000)!=0) key_state=4;
  100.             break;
  101.            
  102.             case 4: if((PINC & 0b10000000)!=0) key_state=0;
  103.             else key_state=3;
  104.             break;
  105.            
  106.             default: key_state=0;
  107.         }
  108.        
  109.         switch(key_state2)
  110.         {
  111.             case 0: if((PINC & 0b01000000)==0) key_state2=1;
  112.             break;
  113.            
  114.             case 1: if((PINC & 0b01000000)==0) key_state2=2;
  115.             else key_state2=0;
  116.             break;
  117.            
  118.             case 2:break;
  119.            
  120.             case 3: if((PINC & 0b01000000)!=0) key_state2=4;
  121.             break;
  122.            
  123.             case 4: if((PINC & 0b01000000)!=0) key_state2=0;
  124.             else key_state2=3;
  125.             break;
  126.            
  127.             default: key_state2=0;
  128.         }
  129.         switch(key_state3)
  130.         {
  131.             case 0: if((PINC & 0b00100000)==0) key_state3=1;
  132.             break;
  133.            
  134.             case 1: if((PINC & 0b00100000)==0) key_state3=2;
  135.             else key_state3=0;
  136.             break;
  137.            
  138.             case 2:break;
  139.            
  140.             case 3: if((PINC & 0b00100000)!=0) key_state3=4;
  141.             break;
  142.            
  143.             case 4: if((PINC & 0b00100000)!=0) key_state3=0;
  144.             else key_state3=3;
  145.             break;
  146.            
  147.             default: key_state3=0;
  148.         }
  149.     }
  150.  
  151. void Fun_LCD_Write (uint8_t ParByte){
  152.     PORTB=ParByte;
  153.     DEFSIG_LCD_E_High;
  154.     _delay_us(10);
  155.     DEFSIG_LCD_E_Low;
  156. }
  157.  
  158. void Fun_LCD_Init(void)
  159. {
  160.         //interface config
  161.         DEFSEQ_ConfigPortAsOutput(B,0);
  162.         DEFSEQ_ConfigPortPinAsOutput (A, 0);
  163.         DEFSEQ_ConfigPortPinAsOutput (A, 1);
  164.         DEFSIG_LCD_E_Low;
  165.         //reset sequence
  166.         DEFSIG_LCD_RS_Command;
  167.         //odczekac
  168.         _delay_ms(41);
  169.         Fun_LCD_Write (0b00110000);
  170.         _delay_ms(5);
  171.         Fun_LCD_Write (0b00110000);
  172.         _delay_us(110);
  173.         Fun_LCD_Write (0b00110000);
  174.         _delay_us(110);
  175.         //display config
  176.         DEFSIG_LCD_RS_Command;
  177.         Fun_LCD_Write (DEFCMD_LCD_FunctionSet
  178.                         |DEFSET_LCD_DataLenght8
  179.                         |DEFSET_LCD_2Lines
  180.                         |DEFSET_LCD_FontSize5x8);
  181.         _delay_us(40);
  182.         Fun_LCD_Write (DEFCMD_LCD_DisplayControl
  183.                         |DEFSET_LCD_DisplayOn
  184.                         |DEFSET_LCD_CursorOff
  185.                         |DEFSET_LCD_BlinkingOff);
  186.         _delay_us(40);
  187.         Fun_LCD_Write (DEFCMD_LCD_ClearDisplay);
  188.         _delay_us(40);
  189.         Fun_LCD_Write (DEFCMD_LCD_ReturnHome);
  190.         _delay_ms(2);
  191.         Fun_LCD_Write (DEFCMD_LCD_EntryMode
  192.                         |DEFSET_LCD_CursorMoveDirInc);
  193.         _delay_us(40); 
  194.         Fun_LCD_Write(DEFCMD_LCD_SetDDRAMAddress|0x00);
  195.         _delay_us(40);
  196. }
  197. void Fun_DisplayStringAtPosition(uint8_t* Par_Ptr, uint8_t Par_ByteCount, int8_t Par_Line, int8_t Par_Position){
  198.     //setting position
  199.     if((Par_Line!=-1)&&(Par_Position!=-1))
  200.     {
  201.         DEFSIG_LCD_RS_Command;
  202.         Fun_LCD_Write(DEFCMD_LCD_SetDDRAMAddress
  203.                       |((Par_Line==1?0x00:0x40)+Par_Position));
  204.         _delay_us(40);
  205.  
  206.     }
  207.     //contents sending
  208.     DEFSIG_LCD_RS_Data;
  209.    
  210.     while (Par_ByteCount --){
  211.         Fun_LCD_Write(*Par_Ptr ++);
  212.         _delay_us(40);
  213.     }
  214.    
  215.    
  216.    
  217.    
  218.     //Fun_LCD_Write(*Par_Ptr);
  219. }
  220. void Fun_LCD_ShiftDisplyWindow(uint8_t Par_Direction)
  221. {
  222.     DEFSIG_LCD_RS_Command;
  223.     Fun_LCD_Write (DEFCMD_LCD_CurDispShift|DEFSET_LCD_DisplyShift| Par_Direction);
  224.     _delay_us(40);
  225. }
  226. void Fun_WriteCharFontToCGRAM (const uint8_t* ParPatern, uint8_t ParAdress){
  227.     DEFSIG_LCD_RS_Command;
  228.     Fun_LCD_Write(DEFCMD_LCD_SetCGRAMAddress| (ParAdress<<3));
  229.     _delay_us(40);
  230.     DEFSIG_LCD_RS_Data;
  231.    
  232.     uint8_t LocVAR_Index;
  233.     for(LocVAR_Index=0;LocVAR_Index<8;LocVAR_Index++){
  234.         Fun_LCD_Write(ParPatern[LocVAR_Index]);
  235.         _delay_us(40);
  236.     }  
  237. }
  238.  
  239. //void displaySom()
  240. //{
  241.     //Fun_LCD_Init ();
  242.     //int size=strlen(VAR_String1);
  243.     //Fun_DisplayStringAtPosition (VAR_String1, size, 1,0);
  244. //}
  245. int main(void)
  246. {
  247.    
  248.     TCCR0 |= (1<<WGM01);
  249.     TCCR0 |= (1<<CS02) |(1<<CS00);
  250.     OCR0=50;
  251.     //przerwania
  252.     TIMSK |= (1<<OCIE0);
  253.     sei();
  254.    
  255.     ///////PRZYCISKI
  256.     PORTC|=0b10000000;
  257.     PORTC|=0b01000000;
  258.     PORTC|=0b00100000;
  259.    
  260.    
  261.     //displaySom();
  262.     const int sizeP=13;
  263.     //Fun_LCD_Init ();
  264.     //Fun_DisplayStringAtPosition ("1", 1, 1,0);
  265.     uint8_t stopped=0;
  266.     while(1){
  267.         if(stopped!=1)
  268.         {
  269.         Fun_LCD_Init ();
  270.         //if(VAR_t[0]=='9'&&VAR_t[1]=='9'&&VAR_t[2]=='9')
  271.         //{
  272.             ////stop
  273.         //}
  274.         if(VAR_t[2]=='9')
  275.         {
  276.            
  277.             VAR_t[1]++;
  278.             VAR_t[2]='0';
  279.            
  280.             Fun_DisplayStringAtPosition (VAR_t, 3, 1,0);
  281.            
  282.             _delay_ms(100);
  283.             if(VAR_t[1]=='9')
  284.             {
  285.                 VAR_t[0]++;
  286.                 VAR_t[1]='0';
  287.                 Fun_DisplayStringAtPosition (VAR_t, 3, 1,0);
  288.            
  289.                 _delay_ms(100);
  290.             }
  291.         }
  292.         VAR_t[2]++;
  293.         Fun_DisplayStringAtPosition (VAR_t, 3, 1,0);
  294.        
  295.             _delay_ms(100);
  296.         }
  297.            
  298.            
  299.            
  300.            
  301.     if(key_state==2)
  302.     {
  303.         stopped=1;
  304.         key_state=3;
  305.     }
  306.     if(key_state2==2)
  307.     {
  308.         stopped=0;
  309.         key_state2=3;
  310.     }
  311.     if(key_state3==2)
  312.     {
  313.         VAR_t[0]='0';
  314.         VAR_t[1]='0';
  315.         VAR_t[2]='0';
  316.         key_state3=3;
  317.     }
  318.     }
  319.     //////////
  320.    
  321.    
  322.    // while (1){
  323.         //uint8_t LocalVar_ShiftIndex;
  324.         //for(LocalVar_ShiftIndex=0; LocalVar_ShiftIndex < 10 ; LocalVar_ShiftIndex++)
  325.         //{
  326.             //Fun_LCD_ShiftDisplyWindow (DEFSET_LCD_ShiftLeft);
  327.             //_delay_ms(500);
  328.         //}
  329.         //for(LocalVar_ShiftIndex=0; LocalVar_ShiftIndex < 10 ; LocalVar_ShiftIndex++)
  330.         //{
  331.             //Fun_LCD_ShiftDisplyWindow (DEFSET_LCD_ShiftRight);
  332.             //_delay_ms(500);
  333.         //}
  334.         //};
  335.    
  336. }
  337.  
  338. /*void Zapis4(int8_t bajt) {
  339.     PORTB |= (1 << PB0);
  340.     PORTB = ((bajt & 0xF0)|(PORTB & 0x0F));
  341.     PORTB &= ~(1 << PB0);
  342.    
  343.     asm volatile("nop");
  344.    
  345.     PORTB |= (1 << PB0);
  346.     PORTB = ((bajt & 0x0F)<<4)|(PORTB & 0x0F);
  347.     PORTB &= ~(1 << PB0);
  348.    
  349.     _delay_us(40);
  350. }*/
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top