📄 lcd.c
字号:
//lcd.c
#include <string.h>
#include "include/includes.h"
// POINTER
AT91PS_PIO l_pPio = AT91C_BASE_PIOA;
unsigned long data;
void Delay_mS (unsigned long a) { while (--a!=0); }
unsigned long codr = 0x0;
unsigned long sodr = 0x0;
unsigned long oer = 0x0;
unsigned long per = 0x0;
void SetPinsOnly(unsigned long pin) {
l_pPio->PIO_SODR = l_pPio->PIO_ODSR | pin;
}
void ClearPinsOnly(unsigned long pin) {
l_pPio->PIO_CODR = (~l_pPio->PIO_ODSR) | pin;
}
void E_Pulse()
{
l_pPio->PIO_SODR = E; //set E to high
Delay_mS(10); //delay //it was 100
l_pPio->PIO_CODR = E; //set E to low
}
void LCDInit()
{
// First set D4, D5, D6, D7, RS, RW, E to output ports + BIT23 (light)
l_pPio->PIO_OER = (BIT16|BIT17|BIT18|BIT19|BIT20|E|BIT22|LCD_LIGHT);
// Enable D4, D5, D6, D7, RS, RW, E ports + BIT23 (light)
l_pPio->PIO_PER = (BIT16|BIT17|BIT18|BIT19|BIT20|E|BIT22|LCD_LIGHT);
l_pPio->PIO_CODR = BIT20|E|BIT22; //clear RS, E, RW
Delay_mS(1100000); //delay ~110ms
l_pPio->PIO_SODR = BIT16|BIT17; //set D4 and D5 port to 1
E_Pulse(); //high->low to E port (pulse)
//Delay_mS(100000); //delay ~10ms
Delay_mS(50000); //delay ~5ms
l_pPio->PIO_SODR = BIT16|BIT17; //set D4 and D5 port to 1
E_Pulse(); //high->low to E port (pulse)
//Delay_mS(100000); //delay ~10ms
Delay_mS(50000); //delay ~5ms
l_pPio->PIO_SODR = BIT16|BIT17; //set D4 and D5 port to 1
E_Pulse(); //high->low to E port (pulse)
Delay_mS(100000); //delay ~10ms
l_pPio->PIO_CODR = BIT16; //set D4 port to 0
l_pPio->PIO_SODR = BIT17; //set D5 port to 1
E_Pulse(); //high->low to E port (pulse)
//Delay_mS(100000); //delay ~10ms
Delay_mS(50000); //delay ~5ms
LCDSendCommand(DISP_ON); //LCD on
LCDSendCommand(CLR_DISP); //LCD clear
LCDSendCommand(DD_RAM_ADDR); //LCD set first row
LCDSendCommand(CUR_ON_UNDER);
}
void LCDSendCommand(unsigned long a)
{
l_pPio->PIO_CODR = BIT22; //set RW port to 0
Delay_mS(20000); //delay for LCD char ~2ms
data = 0x0; //clear data
data = 0xffffff0f | a; //get high 4 bits
l_pPio->PIO_CODR = BIT16|BIT17|BIT18|BIT19; //clear D4-D7
data = data << 12; //shift data
l_pPio->PIO_SODR = 0x000f0000 & data; //set data
l_pPio->PIO_CODR = BIT20; //set RS port to 0 -> display set to comand mode
E_Pulse(); //pulse to set d4-d7 bits
data = 0x0; //clear data
a = a<<4; //shift to get low 4 bits
data = 0xffffff0f | a; //get low 4 bits
l_pPio->PIO_CODR = BIT16|BIT17|BIT18|BIT19; //clear D4-D7
data = data << 12; //shift data
l_pPio->PIO_SODR = 0x000f0000 & data; //set D4-D7
l_pPio->PIO_CODR = BIT20; //set RS port to 0 -> display set to comand mode
E_Pulse(); //pulse to set d4-d7 bits
}
void LCDSendChar(unsigned long a)
{
//腻豚弪 忸珈铈眍
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -