Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.25 KB | None | 0 0
  1. /*
  2.  * lb7.c
  3.  *
  4.  * Created: 05.12.2019 12:22:32
  5.  * Author: Student
  6.  */
  7. /*
  8.  * lab5.c
  9.  *
  10.  * Created: 18.10.2019 15:16:49
  11.  * Author: Student
  12.  */
  13.  
  14. #include <io.h>
  15.  
  16. #include <mega128a.h>
  17.  
  18. #include <delay.h>
  19.  
  20. #define RS 7
  21.  
  22. #define E 6
  23. unsigned char flag=0;
  24.  
  25. unsigned char TabCon[] =
  26.  
  27. {0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,0xA5,0xA6,0x4B, 0xA7,0x4D,0x48,0x4F,0xA8,0x50,0x43,0x54,0xA9,0xAA,0x58,
  28.  
  29. 0xE1,0xAB,0xAC,0xE2,0xAD,0xAE,0x62,0xAF,0xB0,0xB1,0x61,
  30.  
  31. 0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,
  32.  
  33. 0xBC,0xBD,0x6F,0xBE,0x70,0x63,0xBF,0x79,0x5C,0x78,0xE5,
  34.  
  35. 0xC0,0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7};
  36.  
  37. void LCD_cmd(unsigned char cmd)
  38.  
  39. {
  40.  
  41. DDRD |= ((1<<E)|(1<<RS));// разряды PORTD на выход
  42.  
  43. PORTD &= ~(1<<RS); // выбор регистра команд RS=0
  44.  
  45. PORTC = cmd; // записать команду в порт PORTC
  46.  
  47. PORTD |= (1<<E); // \ сформировать на
  48.  
  49. delay_us(5); // | выводе E строб 1-0
  50.  
  51. PORTD &= ~(1<<E); // / передачи команды
  52.  
  53. delay_ms(100); // задержка для завершения записи
  54.  
  55. }
  56.  
  57. void LCD_out(unsigned char cmd)
  58.  
  59. {
  60.  
  61. DDRD |= ((1<<E)|(1<<RS));// разряды PORTD на выход
  62.  
  63. PORTD = 1<<RS; // выбор регистра команд RS=0
  64.  
  65. PORTC = cmd; // записать команду в порт PORTC
  66.  
  67. PORTD |= (1<<E); // \ сформировать на
  68.  
  69. delay_us(5); // | выводе E строб 1-0
  70.  
  71. PORTD &= ~(1<<E); // / передачи команды
  72.  
  73. delay_ms(100); // задержка для завершения записи
  74.  
  75. }
  76.  
  77. void LCD_init(void)
  78.  
  79. {
  80.  
  81. DDRC = 0xFF;// все разряды PORTC на выход
  82.  
  83. DDRD |= ((1<<E)|(1<<RS));// разряды PORTD на выход
  84.  
  85. delay_ms (100);// задержка для установления
  86.  
  87. LCD_cmd(0x30);// \ вывод
  88.  
  89. LCD_cmd(0x30);// | трех
  90.  
  91. LCD_cmd(0x30);// / команд 0x30
  92.  
  93. LCD_cmd(0x38);// 8 разр.шина, 2 строки, 5x7 точек
  94.  
  95. LCD_cmd(0x0E);// включить ЖКИ и курсор, без мерцания
  96.  
  97. LCD_cmd(0x06);// инкремент курсора, без сдвига экрана
  98.  
  99. LCD_cmd(0x01);// очистить экран, курсор в начало
  100.  
  101. }
  102.  
  103. unsigned char Code(unsigned char symb)
  104.  
  105. {
  106.  
  107. return (symb >= 192 ? TabCon[symb-192]: symb);
  108.  
  109. }
  110.  void string(unsigned char* s )
  111.  {  
  112.  while(*s!='\0')
  113.  {  
  114.  LCD_out (Code( *s++))  ;
  115.  }
  116.  }
  117.  
  118.  void print (unsigned char a)  
  119.  {  
  120.  switch(a)
  121.  {
  122.  case 0 : string("евразия"); break;
  123.  case 1 : string("африка"); break;
  124.  case 2 : string("северная америка"); break;
  125.  case 3 : string("южная америка"); break;
  126.  case 4 : string("австралия"); break;
  127.  case 5 : string("антарктика"); break;
  128.  default : string("ошибка");
  129.  }
  130.  }  
  131.  
  132. interrupt[EXT_INT2]
  133. void new(void)
  134. {
  135. flag=!flag;
  136.  
  137. if(flag)
  138.  PORTE =0x50;
  139.  else PORTE = 0x70;
  140. }
  141.  
  142.  
  143. void main(void)
  144. {  
  145.   unsigned char i;
  146.   #asm("sei")
  147.   LCD_init();
  148.   EIMSK=0x04;
  149.   EICRA=0x20;  
  150.   DDRA=0xFF;
  151.   DDRE=1<<3|1<<4|1<<5;
  152.   PORTA=1<<3;
  153.   //DDRE=0x50;  
  154.   LCD_init();
  155.   PORTE=0x70;
  156.   while(1)
  157.   {
  158.   for(i=0;i<6;i++)
  159.   {
  160.    LCD_cmd(0x01);
  161.   print (i);
  162.   delay_ms(3000);
  163.  
  164.   }
  165.   }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement