📄 lcm.c
字号:
/*=========================================
Title: Lcm_C
Author: DAI,daihj07@mails.tsinghua.edu.cn,DME@THU
Date: Dec 20,2007
version: v1.0
funciton:带字库液晶显示模块LCM1601A
===========================================*/
/*=========================================
07.12.25
Show_Left;Show_right edited
ShowLine added
===========================================*/
#include "lcm.h"
#include "LF2407REGS.h"
void ReadDB(int bDat)
{//输入
// *PBDATDIR&=0x000FF;
// bDat=(*PBDATDIR&0x00FF);
}
void WriteDB(int bDat)
{//输出
*PBDATDIR&=0xFFF0;
*PBDATDIR|=(bDat&0x000F);
*PEDATDIR&=0xFFF0;
*PEDATDIR|=((bDat>>4)&0x000F);
}
void lcm_Delay(int ms)
{
int i=5000;//5000;
for(;ms>0;ms--)
{
for(;i>0;i--)
{
asm(" nop ");
}
}
}
void LcmWrCmd(unsigned long comm)
{
int dat;
//关中断
asm(" setc INTM");//禁止所有中断
CLR_RW;
CLR_RS;
WriteDB(comm);
lcm_Delay(100);
SET_E;
lcm_Delay(100);
CLR_E;
lcm_Delay(100);
asm(" clrc INTM");//开中断
}
//写数据到数据寄存器
void LcmWrData(unsigned long data)
{
//关中断
SET_RS;
CLR_RW;
asm(" setc INTM");//禁止所有中断
CLR_E;
WriteDB(data);
lcm_Delay(100);
SET_E;
lcm_Delay(100);
CLR_E;
asm(" clrc INTM");//开中断
lcm_Delay(100);
}
void LcmIoInitial()//
{
// #define LCM_RS _PADATDIR.bit7
_MCRA.bit7=0;
_PADATDIR.bit15=1;
_PADATDIR.bit7=0;
// #define LCM_RW _PEDATDIR.bit4
_MCRC.bit4=0;
_PEDATDIR.bit12=1;
_PEDATDIR.bit4=0;
// #define LCM_E _PADATDIR.bit6
_MCRA.bit6=0;
_PADATDIR.bit14=1;
_PADATDIR.bit6=0;
//定义IOPB0-3;IOPE0-3输出
*MCRA&=0xF0FF;
*PBDATDIR|=0x0F00;
*MCRC&=0xFFF0;
*PEDATDIR|=0x0F00;
}
void LcmInitial()
{
LcmIoInitial();
lcm_Delay(4000);//>40ms
// LcmWrCmd(0x38);
LcmWrCmd(0x38); //1100=C
//设置工作方式8bit, 2line, 5*10dots function set, db2(F):1 display on
//DB3(N) 1:2-line 0,1 line
//DB4 1 DB5 1
//写过ox38后,显示屏变暗?
lcm_Delay(1000);
LcmWrCmd(0x06);//设置输入方式0110 entry mode set, cursor moving direction increasment;
lcm_Delay(1000);
LcmWrCmd(0x01);//清屏
lcm_Delay(1000);
LcmWrCmd(0x0C);//设置显示方式1100 display on/off control set display
lcm_Delay(1000);
LcmWrCmd(0x02); //地址归零
lcm_Delay(1000);
}//Initial
void DisLeft(unsigned long number[])
{
int i;
LcmIoInitial();
LcmWrCmd(0x80);
for(i=0;i<8;i++)
{
LcmWrData(number[i]);
}
}
void DisRight(unsigned long number[])
{
int i;
LcmIoInitial();
LcmWrCmd(0xC0);
for(i=0;i<8;i++)
{
LcmWrData(number[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -