Advertisement
Guest User

lcd.c

a guest
Feb 25th, 2012
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.87 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. //порт к которому подключена шина данных ЖКД
  4. #define PORT_DATA PORTB
  5. #define PIN_DATA  PINB
  6. #define DDRX_DATA DDRB
  7.  
  8. //порт к которому подключены управляющие выводы
  9. #define PORT_SIG PORTD
  10. #define PIN_SIG  PIND
  11. #define DDRX_SIG DDRD
  12.  
  13. //номера выводов микроконтроллера
  14. //к которым подключены управляющие выводы ЖКД
  15. #define RS 0
  16. #define RW 2
  17. #define EN 1
  18.  
  19. //макросы для работы с битами
  20. #define ClearBit(reg, bit)       reg &= (~(1<<(bit)))
  21. #define SetBit(reg, bit)          reg |= (1<<(bit))  
  22.  
  23. #define F_CPU 8000000
  24. //#define _delay_us(us)     __delay_cycles((F_CPU / 1000000) * (us));
  25. //#define _delay_ms(ms)     __delay_cycles((F_CPU / 1000) * (ms));
  26.  
  27. //функция записи команды
  28. void LcdWriteCom(unsigned char data)
  29. {
  30.   _delay_us(60);
  31.   ClearBit(PORT_SIG, RS);    // устанавливаем RS в 0
  32.   PORT_DATA = data;        // выводим данные на шину  
  33.   SetBit(PORT_SIG, EN);    // устанавливаем Е в 1
  34.   _delay_us(60);
  35.   ClearBit(PORT_SIG, EN);    // устанавливаем Е в 0
  36.   _delay_us(60);
  37. }
  38.  
  39. //функция записи данных
  40. void LcdWriteData(unsigned char data)
  41. {
  42.   _delay_us(100);
  43.   SetBit(PORT_SIG, RS);     //устанавливаем RS в 1
  44.   _delay_us(100);
  45.   PORT_DATA = data;        //выводим данные на шину    
  46.   _delay_us(100);
  47.   SetBit(PORT_SIG, EN);     //устанавливаем Е в 1
  48.   _delay_us(100);
  49.   ClearBit(PORT_SIG, EN);    // устанавливаем Е в 0
  50. }
  51.  
  52. //функция инициализации
  53. void InitLcd(void)
  54. {
  55.   //настраиваем порты ввода/вывода
  56.   DDRX_DATA = 0xff;
  57.   PORT_DATA = 0xff;  
  58.   DDRX_SIG = 0xff;
  59.   PORT_SIG |= (1<<RW)|(1<<RS)|(1<<EN);
  60.   ClearBit(PORT_SIG, RW);
  61.  
  62.   _delay_ms(60);
  63.   LcdWriteCom(0x38); //0b00111000 - 8 разрядная шина, 2 строки
  64.  _delay_ms(60);
  65.   LcdWriteCom(0x0c);  //0b00001111 - дисплей, курсор, мерцание включены
  66.   _delay_ms(60);
  67.   LcdWriteCom(0x01);  //0b00000001 - очистка дисплея
  68.   _delay_ms(60);
  69.   LcdWriteCom(0x06);  //0b00000110 - курсор движется вправо, сдвига нет
  70.     _delay_ms(60);
  71. }
  72.  
  73. int main( void )
  74. {
  75.   InitLcd();
  76.   LcdWriteData('1');    
  77.   LcdWriteData('2');  
  78.   LcdWriteData('3');  
  79.   LcdWriteData('4');
  80.   LcdWriteData('5');
  81.   LcdWriteData('6');
  82.   LcdWriteData('7');
  83.   LcdWriteData('8');
  84.   _delay_ms(60);
  85.   LcdWriteCom(0xc0);
  86.   LcdWriteData('9');
  87.   LcdWriteData('0');
  88.   LcdWriteData('1');  
  89.   LcdWriteData('2');
  90.   LcdWriteData('3');
  91.   LcdWriteData('4');
  92.   LcdWriteData('5');
  93.   LcdWriteData('6');
  94.   while(1);
  95.   return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement