?? lcd.c
字號:
//lcd.c
#include <string.h>
#include "lcd.h"
unsigned long data;
//HD44780 4位間接驅動需要的E端片選脈沖
void E_Pulse() {
IO0SET_bit.P0_28 = 1; // E=1
Delay(100);
IO0CLR_bit.P0_28 = 1; // E=0
}
void LCDInit() {
//配置4位數據線 D4, D5, D6, D7, 寄存器選擇 RS, 讀寫 RW, 片選 E 為輸出
IO0DIR_bit.P0_10 = 1; //D4
IO0DIR_bit.P0_11 = 1; //D5
IO0DIR_bit.P0_12 = 1; //D6
IO0DIR_bit.P0_13 = 1; //D7
IO0DIR_bit.P0_22 = 1; //RS
IO0DIR_bit.P0_29 = 1; //R/W
IO0DIR_bit.P0_28 = 1; //E
//LCD 初始化,4位間接驅動方式
IO0CLR_bit.P0_22 = 1; // RS = 0
IO0CLR_bit.P0_29 = 1; // R/W = 0
IO0CLR_bit.P0_28 = 1; // E = 0
Delay(10000); // 延時110ms
IO0SET_bit.P0_10 = 1; // D4 = 1
IO0SET_bit.P0_11 = 1; // D5 = 1
E_Pulse(); // E端片選脈沖
Delay(10000); // 延時10ms
IO0SET_bit.P0_10 = 1; // D4 = 1
IO0SET_bit.P0_11 = 1; // D5 = 1
E_Pulse(); // E端片選脈沖
Delay(10000); // 延時10ms
IO0SET_bit.P0_10 = 1; // D4 = 1
IO0SET_bit.P0_11 = 1; // D5 = 1
E_Pulse(); // E端片選脈沖
Delay(10000); // 延時10ms
IO0SET_bit.P0_11 = 1; // D5 = 1
IO0CLR_bit.P0_10 = 1; // D4 = 0
E_Pulse(); // E端片選脈沖
}
void LCDSendCommand(unsigned long a) { //向LCD發送控制命令
IO0CLR_bit.P0_29 = 1; // RW = 0
Delay(20000); // 延時2ms
data = 0x0;
data = 0xffffff0f | a; // 高4位
IO0CLR |= 0x00003c00; // 清0 D4-D7
data = data << 6;
IO0SET = (IO0SET | 0x00003c00) & data; // 置1 D4-D7
IO0CLR_bit.P0_22 = 1; // RS = 0 -> 命令方式
E_Pulse(); // E端片選脈沖
data = 0x0;
a = a<<4;
data = 0xffffff0f | a; // 高4位
IO0CLR |= 0x00003c00; // 清0 D4-D7
data = data << 6;
IO0SET = (IO0SET | 0x00003c00) & data; // 置1 D4-D7
IO0CLR_bit.P0_22 = 1; // RS = 0 -> 命令方式
E_Pulse(); // E端片選脈沖
}
void LCDSendChar(unsigned long a){ //向LCD發送控顯示數據
IO0CLR_bit.P0_29 = 1; // RW = 0
Delay(20000); // 延時2ms
data = 0x0;
data = 0xffffff0f | a; // 高4位
IO0CLR |= 0x00003c00; // 清0 D4-D7
data = data << 6;
IO0SET = (IO0SET | 0x00003c00) & data; // 置1 D4-D7
IO0SET_bit.P0_22 = 1; // RS = 1 -> 數據方式
E_Pulse(); // E端片選脈沖
data = 0x0;
a = a<<4;
data = 0xffffff0f | a; // 高4位
IO0CLR |= 0x00003c00; // 清0 D4-D7
data = data << 6;
IO0SET = (IO0SET | 0x00003c00) & data; // 置1 D4-D7
IO0SET_bit.P0_22 = 1; // RS = 1 -> 數據方式
E_Pulse(); // E端片選脈沖
}
void LCDSendTxt(char* a) { //向LCD寫入字符串
for(int i=0; i<strlen(a); i++) {
LCDSendChar(a[i]);
}
}
void Light(short a) {
if(a == 1) { // 按鍵1壓下,開啟LCD背光
IO0SET_bit.P0_21 = 1;
IO0DIR_bit.P0_21 = 1;
IO0SET_bit.P0_25 = 1;
IO0DIR_bit.P0_25 = 1;
}
if(a == 0) { // 按鍵2壓下,關閉LCD背光
IO0SET_bit.P0_21 = 0;
IO0DIR_bit.P0_21 = 0;
IO0SET_bit.P0_25 = 0;
IO0DIR_bit.P0_25 = 0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -