⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 dg128 LCD 在飞思卡尔dg128上实现LCD显示功能
💻 C
字号:
//[LCD.c]液晶显示----------------------------------------------------------*
//本文件包含:                                                              *
//    (1)LCDInit:液晶显示初始化                                            *
//    (2)LCDShow:在HD44780显示屏上显示数据                                 *
//    (3)LCD_Command:执行给定的cmd命令                                     *
//硬件连接:                                                                *
//    (1)LCD的DB0-7与MCU的B口的PTB0-7连接                                  *
//    (2)LCD的RS,R/W,E与MCU的PTM2,PTM3,PTM6连接                            *
//-------------------------------------------------------------------------*

//头文件
#include "LCD.h"    //液晶显示头文件

//LCDInit:初始化LCD函数----------------------------------------------------*
//功  能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1                     *
//参  数:无                                                                *
//返  回:无                                                                *
//内部调用函数:LCD_Command                                                 *
//-------------------------------------------------------------------------*
void LCDInit(void)
{
    INT16U i;
    //定义数据口(PTB0-7)为输出
    LCDData_D = 0xFF;          //数据口为输出
    //定义控制口(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位数据总线
               //|||_________ 固定为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显示屏上显示数据----------------------------------------*
//功  能:在HD44780显示屏显示str所指向的32个数据                            *
//参  数:str=待显示的数组                                                  *
//返  回:无                                                                *
//内部调用函数: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个数据到DD RAM
    LCDCtrl |=   1 << LCDRS;     //RS,R/W = 10(写的是数据)
    LCDCtrl &= ~(1 << LCDRW);
    //将要显示在第1行上的16个数据逐个写入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个数据到DD RAM
    LCDCtrl |=   1 << LCDRS;     //RS,R/W = 10(写的是数据)
    LCDCtrl &= ~(1 << LCDRW);
    //将要显示在第2行上的16个数据逐个写入DD RAM中
    for (i = 16;i < 32;i++)
    {
        LCD_Command(str[i]);
    }
}

//LCD_Command:执行给定的cmd命令--------------------------------------------*
//功  能:执行给定的cmd命令,且延时                                          *
//参  数:cmd=待执行的命令                                                  *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
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.数据送到LCD的数据线上 
    LCDData = cmd;
    //3.给出E信号的下降沿,使数据写入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结束接收数据
    //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 + -