/*
* File: newmain.c
* Author: Acer
*
* Created on 27 02 2018 , 23:44
*/
#include ‹xc.h›
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 8000000
#endif
#define Rst RD4
#define Clk RD5
#define Sid RD6
#define CS RD7
#define Dsp_Clear 0b00000001
#define Home 0
#define Entry_mode 0b00000111
#define Dsp_Ctrl 0b00001100
#define Function_Set_Ext 0b00101110
#define Function_Set_Basic 0b00111010
#define CMD 0
#define DATA 1
unsigned char X, Y;
static const char Font[][5] = {
{ 0x00, 0x00, 0x00, 0x00, 0x00}, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00}, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00}, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14}, // #
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12}, // $
{ 0x23, 0x13, 0x08, 0x64, 0x62}, // %
{ 0x36, 0x49, 0x55, 0x22, 0x50}, // &
{ 0x00, 0x05, 0x03, 0x00, 0x00}, // '
{ 0x00, 0x1c, 0x22, 0x41, 0x00}, // (
{ 0x00, 0x41, 0x22, 0x1c, 0x00}, // )
{ 0x14, 0x08, 0x3E, 0x08, 0x14}, // *
{ 0x08, 0x08, 0x3E, 0x08, 0x08}, // +
{ 0x00, 0x00, 0x50, 0x30, 0x00}, // ,
{ 0x10, 0x10, 0x10, 0x10, 0x10}, // -
{ 0x00, 0x60, 0x60, 0x00, 0x00}, // .
{ 0x20, 0x10, 0x08, 0x04, 0x02}, // /
{ 0x3E, 0x45, 0x49, 0x51, 0x3E}, // 0
{ 0x00, 0x21, 0x7F, 0x01, 0x00}, // 1
{ 0x23, 0x45, 0x49, 0x51, 0x21}, // 2
{ 0x42, 0x41, 0x51, 0x69, 0x46}, // 3
{ 0x0C, 0x14, 0x24, 0x7F, 0x04}, // 4
{ 0x00, 0x71, 0x51, 0x51, 0x4E}, // 5
{ 0x1E, 0x29, 0x49, 0x49, 0x06}, // 6
{ 0x40, 0x47, 0x48, 0x50, 0x60}, // 7
{ 0x36, 0x49, 0x49, 0x49, 0x36}, // 8
{ 0x30, 0x49, 0x49, 0x4A, 0x3C}, // 9
{ 0x00, 0x36, 0x36, 0x00, 0x00}, // :
{ 0x35, 0x36, 0x00, 0x00, 0x00}, // ;
{ 0x08, 0x14, 0x22, 0x41, 0x00}, // ‹
{ 0x14, 0x14, 0x14, 0x14, 0x14}, // =
{ 0x00, 0x41, 0x22, 0x14, 0x08}, // ›
{ 0x20, 0x40, 0x45, 0x48, 0x30}, // ?
{ 0x26, 0x49, 0x4D, 0x45, 0x3E}, // @
{ 0x7E, 0x88, 0x88, 0x88, 0x7E}, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x36}, // B
{ 0x3E, 0x41, 0x41, 0x41, 0x22}, // C
{ 0x7F, 0x41, 0x41, 0x22, 0x1C}, // D
{ 0x7F, 0x49, 0x49, 0x49, 0x41}, // E
{ 0x7F, 0x09, 0x09, 0x09, 0x01}, // F
{ 0x3E, 0x41, 0x49, 0x49, 0x7A}, // G
{ 0x7F, 0x08, 0x08, 0x08, 0x7F}, // H
{ 0x00, 0x41, 0x7F, 0x41, 0x00}, // I
{ 0x20, 0x40, 0x41, 0x3F, 0x01}, // J
{ 0x7F, 0x08, 0x14, 0x22, 0x41}, // K
{ 0x7F, 0x40, 0x40, 0x40, 0x40}, // L
{ 0x7C, 0x04, 0x18, 0x04, 0x78}, // m
{ 0x7F, 0x04, 0x08, 0x10, 0x7F}, // N
{ 0x3E, 0x41, 0x41, 0x41, 0x3E}, // O
{ 0x7F, 0x09, 0x09, 0x09, 0x06}, // P
{ 0x3E, 0x41, 0x51, 0x21, 0x5E}, // Q
{ 0x7F, 0x09, 0x19, 0x29, 0x46}, // R
{ 0x46, 0x49, 0x49, 0x49, 0x31}, // S
{ 0x01, 0x01, 0x7F, 0x01, 0x01}, // T
{ 0x3F, 0x40, 0x40, 0x40, 0x3F}, // U
/* { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
{ 0x08, 0x08, 0x36, 0x41, 0x41 }, // {
{ 0x00, 0x00, 0x7F, 0x00, 0x00 }, // |
{ 0x41, 0x41, 0x36, 0x08, 0x08 }, // }
{ 0x02, 0x01, 0x02, 0x02, 0x01 }, // ~ */
};
void LCD_Write(char cd, unsigned char c) // отправка данных в 24 такта
{
char i;
Clk = 1;Sid = 0;
CS = 1;
Clk = 0;
// Sid = 1
Sid = 1;
for (i = 0; i ‹ 5; i++) {
Clk = 1;
asm("nop");
Clk = 0;
}
// ... : RW
Sid = 0;
Clk = 1;
asm("nop");
Clk = 0;
// ... : RS
Sid = cd;
Clk = 1;
asm("nop");
Clk = 0;
// ...
Sid = 0;
Clk = 1;
asm("nop");
Clk = 0;
// ...
for (i = 0; i ‹ 4; i++) {
Clk = 0;
if (c & 0x80) Sid = 1;
else Sid = 0;
Clk = 1;
c ‹‹ = 1;
}
// ...
for (i = 0; i ‹ 4; i++) {
Clk = 0;
Sid = 0;
Clk = 1;
}
// ...
for (i = 0; i ‹ 4; i++) {
Clk = 0;
if (c & 0x80) Sid = 1;
else Sid = 0;
Clk = 1;
c ‹‹ = 1;
}
// ...
for (i = 0; i ‹ 4; i++) {
Clk = 0;
Sid = 0;
Clk = 1;
}
// ...
Clk = 0;
CS = 0;
}
void LCD_init(void) {
__delay_ms(45);
Rst = 0;
asm("nop");
Rst = 1;
LCD_Write(CMD, Function_Set_Basic);
__delay_us(120);
LCD_Write(CMD, Function_Set_Basic);
__delay_us(40);
LCD_Write(CMD, Dsp_Ctrl);
__delay_us(120);
LCD_Write(CMD, Dsp_Clear);
__delay_ms(11);
LCD_Write(CMD, Entry_mode);
__delay_ms(11);
}
void main(void) {
TRISD = 0; PSTRCON = 0;
LCD_init();
// LCD_Write(CMD, Function_Set_Basic);
// LCD_Write(CMD, Dsp_Clear);
// LCD_Write(CMD, 0b00001111);
__delay_ms(100);
LCD_Write(CMD, Function_Set_Ext);
LCD_Write(CMD, 0b10000001);
LCD_Write(CMD, 0b10000001);
LCD_Write(DATA, 0x7E); // { 0x7E, 0x88, 0x88, 0x88, 0x7E}, // A
LCD_Write(DATA, 0x88);
LCD_Write(DATA, 0x88);LCD_Write(DATA, 0x88);LCD_Write(DATA, 0x7E);
__delay_ms(500);
LCD_Write(DATA, 0x7E); // { 0x7E, 0x88, 0x88, 0x88, 0x7E}, // A
LCD_Write(DATA, 0x88);
LCD_Write(DATA, 0x88);LCD_Write(DATA, 0x88);LCD_Write(DATA, 0x7E);
__delay_ms(500);
LCD_Write(DATA, 0x7F); // { 0x7F, 0x49, 0x49, 0x49, 0x36}, // B
LCD_Write(DATA, 0x49);
LCD_Write(DATA, 0x49);LCD_Write(DATA, 0x49);LCD_Write(DATA, 0x36);
//Переход через секунду ко второй части работы:
__delay_ms(1000);
LCD_Write(CMD, Function_Set_Basic);
__delay_ms(1);
LCD_Write(CMD, Dsp_Clear);
__delay_ms(500);
LCD_Write(DATA, 255);
__delay_ms(500);
LCD_Write(DATA, 255);
__delay_ms(500);
LCD_Write(DATA, 255);
__delay_ms(500);
LCD_Write(DATA, 255);
while (1);
//return;
} |