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

📄 lcd.c

📁 在飞思卡尔MC9S12DP256上编写的LCD驱动程序
💻 C
字号:
#include"lcd.h"

/*********************端口设置*********************************/
#define LcdData    PORTB                  //PTB数据
#define LcdDataR   DDRB
#define LcdRS      PORTA_BIT0
#define LcdRW      PORTA_BIT1            //串行方式作I/O口,并行方式作RW
#define LcdE       PORTA_BIT2
//#define LcdPSB     PTD_PTD3
//#define LcdRST     PTD_PTD4            
/**************************************************************/




/**************************************************************/
/*********************基本驱动程序*****************************/
/**************************************************************/

////////////////////////////////////////////////////////////////////////////////
// 名称: delay
// 版本: 1.0    COPYRIGHT (c) AETC 2009 , All Rights Reserved
// 功能: 延迟函数
// 调用: 
// 参数: DelayTime---for循环的次数
//
// 返回: void
// 说明: 
// 修改历史:
// 版本	作者		日期		描述 
// ----	---------	----------	---------------------------
// 1.0	黄    		2009.2.11	创建程序
//
////////////////////////////////////////////////////////////////////////////////
void delay(uint8 DelayTime) 
{
    uint8 TempDelayTime;
    for(TempDelayTime=0;TempDelayTime<DelayTime;TempDelayTime++);
}





////////////////////////////////////////////////////////////////////////////////
// 名称: BusyCheck
// 版本: 1.0    COPYRIGHT (c) AETC 2009 , All Rights Reserved
// 功能: 检测模块是否处于忙碌状态,即上一条指令有无执行完毕
// 调用: 
// 参数: DelayTime---for循环的次数
//
// 返回: void
// 说明: 
// 修改历史:
// 版本	作者		日期		描述 
// ----	---------	----------	---------------------------
// 1.0	黄    		2009.2.11	创建程序
//
////////////////////////////////////////////////////////////////////////////////
void BusyCheck(void)//检测模块是否处于忙碌状态,即上一条指令有无执行完毕
{
   uint8 key;
   LcdDataR=0x00;//单片机读液晶显示模块
   for(;;)
   {
     LcdRS=0;
     LcdRW=1;
     LcdE=1;//Enable
     delay(3);//延迟
     key=LcdData;
     delay(3);//延迟
     LcdE=0;
     if((key&0x80)==0x00)//BF位是否为零
     {
        break;
     }
   }
}





////////////////////////////////////////////////////////////////////////////////
// 名称: wcmd
// 版本: 1.0    COPYRIGHT (c) AETC 2009 , All Rights Reserved
// 功能: 往Lcd写命令
// 调用: 
// 参数: uint8 com---待写的命令
//
// 返回: void
// 说明: 
// 修改历史:
// 版本	作者		日期		描述 
// ----	---------	----------	---------------------------
// 1.0	黄    		2009.2.11	创建程序
//
////////////////////////////////////////////////////////////////////////////////
void wcmd(uint8 com)//并口写命令
{
   BusyCheck();//忙检测
   LcdRS=0;//命令
   LcdRW=0;//写
   LcdE=1;//Enable
   LcdDataR=0xff;//单片机引脚为输出
   delay(3);//延迟
   LcdData=com;//送出命令
   delay(3);//延迟
   LcdE=0;
}





////////////////////////////////////////////////////////////////////////////////
// 名称: wdatab
// 版本: 1.0    COPYRIGHT (c) AETC 2009 , All Rights Reserved
// 功能: 往Lcd写八比特(byte)数据
// 调用: 
// 参数: uint8 com---待写的命令,byte型
//
// 返回: void
// 说明: 
// 修改历史:
// 版本	作者		日期		描述 
// ----	---------	----------	---------------------------
// 1.0	黄					2009.2.11	创建程序
//
////////////////////////////////////////////////////////////////////////////////
void wdatab(uint8 data)//并口写数据,8位(byte)数
{ 
   BusyCheck();
   LcdRS=1;//数据
   LcdRW=0;//写
   LcdE=1;//Enable
   LcdDataR=0xff;//单片机引脚为输出
   delay(3);//延迟
   LcdData=data;//送出数据
   delay(3);//延迟
   LcdE=0;
}




////////////////////////////////////////////////////////////////////////////////
// 名称: wdataw
// 版本: 1.0    COPYRIGHT (c) AETC 2009 , All Rights Reserved
// 功能: 往Lcd写十六比特(word)数据
// 调用: 
// 参数: uint16 data---待写的命令,word型
//
// 返回: void
// 说明: 
// 修改历史:
// 版本	作者		日期		描述 
// ----	---------	----------	---------------------------
// 1.0	黄				2009.2.11	创建程序
//
////////////////////////////////////////////////////////////////////////////////
void wdataw(uint16 data)//并口写数据,16位(word)数
{
    wdatab((uint8)(data>>8));
    wdatab((uint8)(data));
}




  
////////////////////////////////////////////////////////////////////////////////
// 名称: LcdInit
// 版本: 1.0    COPYRIGHT (c) AETC 2009 , All Rights Reserved
// 功能: Lcd初始化
// 调用: 
// 参数: void
//
// 返回: void
// 说明: 
// 修改历史:
// 版本	作者		日期		描述 
// ----	---------	----------	---------------------------
// 1.0	黄    		2009.2.11	创建程序
//
////////////////////////////////////////////////////////////////////////////////  
void LcdInit(void)
{

//   LcdPSB=1;//用并行传送数据或信号
//   LcdRST=1;//让RST对应的引脚为高电平
   wcmd(0x30);//基本指令
   wcmd(0x0c);//0000,1100 整体显示ON,游标显示OFF,游标位置OFF
   wcmd(0x06);//0000,0110 右移位
   wcmd(0x01);//0000,0001 清除DDRAM
   wcmd(0x02);//0000,0010 DDRAM地址归位
   wcmd(0x80);//1000,0000 设定DDRAM到地址计数器
}   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -