nnimo 发表于 2014-5-7 07:56:13

转载 :用飞思卡尔的 HCS12DG128 控制1602液晶屏C程序

引脚使用情况:




源程序:
//Name:LCD OUTPUT TEST
//Description:HCS12DG128 with LCD1602, Edit in CodeWarrior 5.1
//显示main函数中tempshow数组中的字符
//采用了读取1602工作状态来检测忙/闲的方式,而不是简单的利用delay()做短时间延迟
//等待,虽然多用了一个I/O引脚,但是将LCD显示占用时间降到了最短,工作也更可靠

#include <hidef.h>   
#include "derivative.h"   

//LCD OUTPUT
#define LCDData PORTA
#define LCDRS PORTK_BIT2
#define LCDRW PORTK_BIT0
#define LCDE PTM_PTM7
void LCDSendCom(byte cmd);
void LCDSendData(byte data);
void LCDWaitForReady(void);

//---------- IO口初始化 ------------//
void InitPort(void)
{
DDRB=0xff;
PORTB=0x00;

DDRA=0xff;
DDRK=0xff;
DDRM=0xff;
}
//---------- 时钟初始化 ------------//
void InitPLL(void)    //BusCLK=24M
{
CLKSEL=0x00;      
PLLCTL=0xe1;      //检测到外部晶振失效时进入自给时钟方式
SYNR=2;             //PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
REFDV=1;            //24MHz
PLLCTL=0x60;      //时钟监控、锁相环电路允许
asmNOP;         //空操作,进行简单的延时,等待锁相环的相应
asmNOP;
asmNOP;
while(!(CRGFLG_LOCK)==1); //时钟校正同步
CLKSEL=0x80;      //锁相环频率锁定

//COPCTL = 0x00;      //关闭看门狗
}


void InitLCD(void)
{
LCDWaitForReady();
LCDSendCom(0x38);

LCDWaitForReady();
LCDSendCom(0x06);

LCDWaitForReady();
LCDSendCom(0x0c);
}
void LCDSendCom(byte cmd)
{
//RS,RW=00写指令
LCDRS=0;
LCDRW=0;

LCDData=cmd;

//给出E信号下降沿,使指令写入LCD
LCDE=1;
LCDE=0;
}
void LCDSendData(byte data)
{
//RS,RW=10写数据
LCDRS=1;
LCDRW=0;

LCDData=data;

//给出E信号下降沿,使数据写入LCD
LCDE=1;
LCDE=0;
}
void LCDWaitForReady(void)
{
//RS,RW=10读忙标志
LCDRS=0;
LCDRW=1;

DDRA_BIT7=0;
LCDE=1;

while(PORTA_BIT7==1);
   
DDRA_BIT7=1;
}

void LCDShow(byte* str)
{
byte i;   

LCDWaitForReady();
LCDSendCom(0x80);

for(i=0;i<16;i++)
{
    LCDWaitForReady();
    LCDSendData(*str);
    str++;   
}

LCDWaitForReady();
LCDSendCom(0xc0);
   
for(i=0;i<16;i++)
{
    LCDWaitForReady();
    LCDSendData(*str);
    str++;      
}
}


void main(void)
{

byte tempshow[]="abc45678ABCDEFGHabc45678ABCDEFGH";

DisableInterrupts;
InitPort();
InitPLL();
InitLCD();
EnableInterrupts;

for(;;)
{
    LCDShow(tempshow);   
    _FEED_COP();
}

}

greenflyqqq 发表于 2014-5-7 08:13:16

学习了 谢谢分享
页: [1]
查看完整版本: 转载 :用飞思卡尔的 HCS12DG128 控制1602液晶屏C程序