📄 lcd.c
字号:
/*** Configure IOPF pin as an INPUT ***/
*PFDATDIR = *PFDATDIR & 0x7FFF;
/*** Setup timers 1 and 2, and the PWM configuration ***/
*T1CON = 0x0000; /* disable timer 1 */
*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 bf_ready(void)
// 函数说明 : 液晶忙标志判断
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void bf_ready()
{
UINT16 BF,BFTEMP;
BF = port8004 & 0x00ff; //读指令寄存器
asm(" nop ");
BFTEMP = BF & 80 ;
asm(" nop ");
while( ( BF & 80 ) == 1)//如果忙标志为1,在这里等待
return;
}
//--------------------------------------------------------------------
// 函数名称 : void wcom(UINT16 com) 写指令寄存器
// 函数说明 : 写指令寄存器
// 输入参数 : 输入的命令字
// 输出参数 : 无
//--------------------------------------------------------------------
void wcom(UINT16 com)
{
bf_ready();
asm(" nop ");
port8004 = com;
return;
}
//--------------------------------------------------------------------
// 函数名称 : void wram(UINT16 ram) 写数据寄存器
// 函数说明 : 写数据寄存器
// 输入参数 : 输入的数据
// 输出参数 : 无
//--------------------------------------------------------------------
void wram(UINT16 ram)
{
bf_ready();
asm(" nop ");
port8005 = ram;
return;
}
//--------------------------------------------------------------------
// 函数名称 : void rram(void) 读数据寄存器
// 函数说明 : 读数据寄存器
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void rram()
{
UINT16 readram;
bf_ready();
asm(" nop ");
readram = port8005;
asm(" nop ");
return;
}
/*
***********************************************************
- 函数名称 : 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 ");
delay_50ms();
wcom(FUCSET); //功能設定,8BIT 并口,基本指令集
delay_100us();
wcom(FUCSET); //功能設定,8BIT 并口,基本指令集
delay_100us();
wcom(CURSOR); //整體顯示,游標顯示,游標位置反白
delay_100us();
wcom(CLEAR); //清除显示
delay_20ms();
wcom(SETPOINT); //進入點設定,游標右移,DDRAM 位址計數器(AC)加1
delay_100us();
//------------LCD显示---------------------------------
for(;;)
{
Delay(50000);
Delay(50000);
Delay(50000);
wcom(0x0082); //设定DDRAM的地址在第一行 82H
delay_100us();
for(i =0;i<10;i++)
{
wram(data_buff1[i]);
delay_100us();
asm(" nop ");
}
asm(" nop ");
//------------------------------
wcom(0x0092); //设定DDRAM的地址在第二行 92H
delay_100us();
for(i =0;i<10;i++)
{
wram(data_buff2[i]);
delay_100us();
}
asm(" nop ");
//--------------------------------
wcom(0x008a); //设定DDRAM的地址在第三行 8AH
delay_100us();
for(i =0;i<10;i++)
{
wram(data_buff3[i]);
delay_100us();
}
asm(" nop ");
//--------------------------------
wcom(0x009a); //设定DDRAM的地址在第四行 9AH
delay_100us();
for(i =0;i<10;i++)
{
wram(data_buff4[i]);
delay_100us();
}
asm(" nop ");
delay_100us();
Delay(50000);
Delay(50000);
Delay(50000);
delay_100us();
wcom(CLEAR); //清除显示
}
//----------- 踏步--------------------------
while(1)
{
temp = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -