?? lcd.c
字號:
//[LCD.c]液晶顯示----------------------------------------------------------*
//本文件包含: *
// (1)LCDInit:液晶顯示初始化 *
// (2)LCDShow:在HD44780顯示屏上顯示數(shù)據(jù) *
// (3)LCD_Command:執(zhí)行給定的cmd命令 *
//硬件連接: *
// (1)LCD的DB0-7與MCU的B口的PTB0-7連接 *
// (2)LCD的RS,R/W,E與MCU的PTM2,PTM3,PTM6連接 *
//-------------------------------------------------------------------------*
//頭文件
#include "LCD.h" //液晶顯示頭文件
//LCDInit:初始化LCD函數(shù)----------------------------------------------------*
//功 能:初始化Lcd(HD44780),設置顯示方式,清屏,AC自動+1 *
//參 數(shù):無 *
//返 回:無 *
//內(nèi)部調(diào)用函數(shù):LCD_Command *
//-------------------------------------------------------------------------*
void LCDInit(void)
{
INT16U i;
//定義數(shù)據(jù)口(PTB0-7)為輸出
LCDData_D = 0xFF; //數(shù)據(jù)口為輸出
//定義控制口(PTC0-2)為輸出
LCDCtrl_D |= (1<<LCDE);
LCDCtrl_D |= (1<<LCDRS);
LCDCtrl_D |= (1<<LCDRW);
//設置指令
LCDCtrl &= ~(1<<LCDRS); //RS、R/W=00,寫指令
LCDCtrl &= ~(1<<LCDRW);
LCD_Command(0x38);
//||||||||____ 可設任意值(0/1)
//||||||______ F = 0,5*7點陣模式
//|||||_______ N = 1,2行顯示
//||||________ DL = 1,8位數(shù)據(jù)總線
//|||_________ 固定為001
LCD_Command(0x08); //關顯示,關光標顯示,不閃爍
LCD_Command(0x01); //清屏
for (i=0; i<20000; i++); //延時>1.6ms
LCD_Command(0X06);
LCD_Command(0x14); //光標右移一個字符位,AC自動加1
LCD_Command(0x0C); //開顯示,關光標顯示,不閃爍
}
//LCDShow:在HD44780顯示屏上顯示數(shù)據(jù)----------------------------------------*
//功 能:在HD44780顯示屏顯示str所指向的32個數(shù)據(jù) *
//參 數(shù):str=待顯示的數(shù)組 *
//返 回:無 *
//內(nèi)部調(diào)用函數(shù):LCD_Command *
//-------------------------------------------------------------------------*
void LCDShow(INT8U str[])
{
INT8U i;
//1. LCD初始化
LCDInit();
//2. 顯示第1行16個字符
//2.1設置顯示首地址
LCDCtrl &= ~(1 << LCDRS); //RS,R/W = 00(寫的是指令)
LCDCtrl &= ~(1 << LCDRW);
LCD_Command(0x80); //后7位為DD RAM地址(0x00)
//2.2寫16個數(shù)據(jù)到DD RAM
LCDCtrl |= 1 << LCDRS; //RS,R/W = 10(寫的是數(shù)據(jù))
LCDCtrl &= ~(1 << LCDRW);
//將要顯示在第1行上的16個數(shù)據(jù)逐個寫入DD RAM中
for (i = 0;i < 16;i++)
{
LCD_Command(str[i]);
}
//3. 顯示第2行16個字符
//3.1設置顯示首地址
LCDCtrl &= ~(1 << LCDRS); //RS,R/W = 00(寫的是指令)
LCDCtrl &= ~(1 << LCDRW);
LCD_Command(0xC0); //后7位為DD RAM地址(0x40)
//3.2再寫16個數(shù)據(jù)到DD RAM
LCDCtrl |= 1 << LCDRS; //RS,R/W = 10(寫的是數(shù)據(jù))
LCDCtrl &= ~(1 << LCDRW);
//將要顯示在第2行上的16個數(shù)據(jù)逐個寫入DD RAM中
for (i = 16;i < 32;i++)
{
LCD_Command(str[i]);
}
}
//LCD_Command:執(zhí)行給定的cmd命令--------------------------------------------*
//功 能:執(zhí)行給定的cmd命令,且延時 *
//參 數(shù):cmd=待執(zhí)行的命令 *
//返 回:無 *
//-------------------------------------------------------------------------*
void LCD_Command(unsigned char cmd)
{
INT8U i;
//1.等待 > 40us
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
//2.數(shù)據(jù)送到LCD的數(shù)據(jù)線上
LCDData = cmd;
//3.給出E信號的下降沿,使數(shù)據(jù)寫入LCD
LCDCtrl |= (1<<LCDE);
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
LCDCtrl &= ~(1<<LCDE); //Lcd結(jié)束接收數(shù)據(jù)
//4.等待 > 40us
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
for (i=0; i<200; i++);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -