📄 lcd.c
字号:
*T2CON = 0x0000; /* disable timer 2 */
*GPTCONA = 0x0000; /* configure GPTCONA */
*GPTCONB = 0x0000; /* configure GPTCONB */
/*
bit 15 0: reserved
bit 14 0: T2STAT, read-only
bit 13 0: T1STAT, read-only
bit 12-11 00: reserved
bit 10-9 00: T2TOADC, 00 = no timerX event starts ADC
bit 8-7 00: T1TOADC, 00 = no timerX event starts ADC
bit 6 0: TCOMPOE, 0 = Hi-z all timer compare outputs
bit 5-4 00: reserved
bit 3-2 00: TXPIN, 00 = forced low
bit 1-0 00: TXPIN, 00 = forced low
*/
* IMR=0x0000;
/*
bit 15-6 0: reserved
bit 5 0: Level INT6 is masked
bit 4 0: Level INT5 is masked
bit 3 0: Level INT4 is masked
bit 2 0: Level INT3 is masked
bit 1 0: Level INT2 is masked
bit 0 0: Level INT1 is masked
*/
* IFR=0xFFFF; //清除所有中断标志,"写1清0"
}
//--------------------------------------------------------------------
// 函数名称 : void delay_50ms(void)
// 函数说明 : 50ms延迟
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void delay_50ms()
{
UINT16 i,j;
for(i=0;i<=1000;i++);
for(j=0;j<=2000;j++); //延迟250*1000*CLKOUT=500000*CLKOUT
//1/CLKOUT=0.2us
}
//--------------------------------------------------------------------
// 函数名称 : void delay_20ms(void)
// 函数说明 : 20ms延迟
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void delay_20ms()
{
UINT16 i,j;
for(i=0;i<=1000;i++);
for(j=0;j<=400;j++); //延迟10*1000*CLKOUT=100000*CLKOUT
//1/CLKOUT=0.2us
}
//--------------------------------------------------------------------
// 函数名称 : void SendByte(UCHAR dat) 串行发送一字节数据
// 函数说明 : 串行发送一字节数据,在时钟的上升沿发送数据,在时钟为低电平时,数据变化
// 输入参数 : 发送的数据
// 输出参数 : 无
//--------------------------------------------------------------------
void SendByte(UCHAR dat)
{
UCHAR i;
UINT16 temp;
for(i=0;i<8;i++)
{
temp = port8007; //读IO 8007 SCLK="0";
if(dat & 0x0080)
port8006 = 0; //写IO 8006 SID="1",发送数据"1" MSB先发送
else
temp = port8006; //读IO 8006 SID="0",发送数据"0" MSB先发送
port8007 = 0; //写IO 8007 SCLK="1";
dat = dat<<1; //数据左移,移位到dat.7
}
temp = port8007 ; //读IO 8007 SCLK="0";
}
//--------------------------------------------------------------------
// 函数名称 : void SendCMD(UCHAR dat) 写指令寄存器
// 函数说明 : 写指令寄存器
// 输入参数 : 输入的命令字
// 输出参数 : 无
//--------------------------------------------------------------------
void SendCMD(UCHAR dat)
{
SendByte(0x00F8); //11111,00,0 RW=0,RS=0 同步标志
SendByte(dat & 0x00F0); //高四位
SendByte((dat & 0x000F)<<4); //低四位
}
//--------------------------------------------------------------------
// 函数名称 : void SendDat(UCHAR dat) 写显示数据或单字节字符
// 函数说明 : 写数据寄存器
// 输入参数 : 输入的数据
// 输出参数 : 无
//--------------------------------------------------------------------
void SendDat(UCHAR dat)
{
SendByte(0x00FA); //11111,01,0 RW=0,RS=1
SendByte(dat & 0x00F0); //高四位
SendByte((dat & 0x000F)<<4); //低四位
}
//--------------------------------------------------------------------
// 函数名称 : void display(UCHAR x_add,UCHAR dat1,UCHAR dat2)写汉字到LCD 指定的位置
// 函数说明 : x_add显示RAM的地址,dat1/dat2显示汉字编码
// 输入参数 : x_add,dat1/dat2
// 输出参数 : 无
//--------------------------------------------------------------------
void Display(UCHAR x_add,UCHAR dat1,UCHAR dat2)
{
SendCMD(x_add);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
SendDat(dat1);
SendDat(dat2);
}
//--------------------------------------------------------------------
// 函数名称 : void Initlcm(void)
// 函数说明 : 初始化 LCM
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void Initlcm()
{
asm(" nop ");
delay_50ms();
SendCMD(FUCSET); //功能設定,8BIT 并口,基本指令集
delay_100us();
SendCMD(FUCSET); //功能設定,8BIT 并口,基本指令集
delay_100us();
SendCMD(CURSOR); //整體顯示,游標顯示,游標位置反白
delay_100us();
SendCMD(CLEAR); //清除显示
delay_20ms();
SendCMD(SETPOINT); //進入點設定,游標右移,DDRAM 位址計數器(AC)加1
delay_100us();
}
/*
***********************************************************
- 函数名称 : void Delay(int numbers)
- 函数说明 : 延时
- 输入参数 : numbers
- 输出参数 : 无
***********************************************************
*/
void Delay(UINT16 numbers)
{
UINT16 i,j;
for(i=0;i<40000;i++);
for(j=0;j<numbers;j++);
}
/*
***********************************************************
- 函数名称 : interrupt void PHANTOM(void)
- 函数说明 : 伪中断子程序
- 输入参数 : 无
- 输出参数 : 无
***********************************************************
*/
interrupt void PHANTOM(void)
{
* IFR=0xFFFF; //清除所有中断标志,"写1清0"
asm(" clrc INTM"); //开总中断
return;
}
/*
************************************************************
****************** 主函数 *******************
************************************************************
*/
void main()
{
UINT16 temp,i;
//----------系统初始化-------------------------------
asm(" nop ");
cpu_init(); //初始化CPU
asm(" nop ");
//-----------LCD初始化--------------------------------
asm(" nop ");
Initlcm();
//------------LCD显示---------------------------------
for(;;)
{
Delay(50000);
Delay(50000);
Delay(50000);
//-----------------------------------------------------------
SendCMD(0x0082); //设定DDRAM的地址在第一行 82H
delay_100us();
for(i =0;i<10;i++)
{
SendDat(data_buff1[i]);
delay_100us();
asm(" nop ");
}
asm(" nop ");
//------------------------------
SendCMD(0x0092); //设定DDRAM的地址在第二行 92H
delay_100us();
for(i =0;i<10;i++)
{
SendDat(data_buff2[i]);
delay_100us();
}
asm(" nop ");
//--------------------------------
SendCMD(0x008a); //设定DDRAM的地址在第三行 8AH
delay_100us();
for(i =0;i<10;i++)
{
SendDat(data_buff3[i]);
delay_100us();
}
asm(" nop ");
//--------------------------------
SendCMD(0x009a); //设定DDRAM的地址在第四行 9AH
delay_100us();
for(i =0;i<10;i++)
{
SendDat(data_buff4[i]);
delay_100us();
}
asm(" nop ");
//-------------------------------------------------------------
delay_100us();
Delay(50000);
Delay(50000);
Delay(50000);
delay_100us();
SendCMD(CLEAR); //清除显示
}
//----------- 踏步--------------------------
while(1)
{
temp = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -