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

📄 lcd_19264_main.lst

📁 LCM19264的测试程序,用于PIC单片机,已经测试通过 可写汉字和英文字符,支持画点
💻 LST
📖 第 1 页 / 共 5 页
字号:
.................... void circle(int Ox,int Oy,int Rx);  
....................   
.................... /********************************************************/  
.................... /* 分区操作允许等待,返回时保留分区选择状态		*/  
.................... /********************************************************/  
.................... //函数功能:选择LCD的左区;  
.................... void lcdbusyL(void)  
.................... { lcd_clear_cs1(); /* CS1=0 */  
*
08CA:  BCF    F96.2
08CC:  BCF    F8D.2
....................   lcd_set_cs2();   /* CS2=1 */  
08CE:  BCF    F96.3
08D0:  BSF    F8D.3
....................   lcd_set_cs3();   /* CS3=1 */  
08D2:  BCF    F96.4
08D4:  BSF    F8D.4
....................   wtcom();         /* 等待LCD使能 */  
08D6:  CALL   08A6
.................... }  
08DA:  RETLW  00
....................   
.................... //函数功能:选择LCD的中区;  
.................... void lcdbusyM(void)  
.................... { lcd_set_cs1();    /* CS1=1 */  
*
0902:  BCF    F96.2
0904:  BSF    F8D.2
....................   lcd_clear_cs2();  /* CS2=0 */  
0906:  BCF    F96.3
0908:  BCF    F8D.3
....................   lcd_set_cs3();    /* CS3=1 */  
090A:  BCF    F96.4
090C:  BSF    F8D.4
....................   wtcom();          /* 等待LCD使能 */  
090E:  CALL   08A6
.................... }  
0912:  RETLW  00
....................   
.................... //函数功能:选择LCD的右区;  
.................... void lcdbusyR(void)  
.................... { lcd_set_cs1();    /* CS1=1 */  
*
093A:  BCF    F96.2
093C:  BSF    F8D.2
....................   lcd_set_cs2();    /* CS2=1 */  
093E:  BCF    F96.3
0940:  BSF    F8D.3
....................   lcd_clear_cs3();  /* CS3=1 */  
0942:  BCF    F96.4
0944:  BCF    F8D.4
....................   wtcom();          /* 等待LCD使能 */  
0946:  CALL   08A6
.................... }  
094A:  RETLW  00
....................   
.................... //函数功能:等待LCD使能  
.................... void wtcom(void)  
.................... { set_tris_d(0xff);         /* 改变RD口的状态,作为输入口 */  
*
08A6:  MOVLW  FF
08A8:  MOVWF  F95
....................   lcd_clear_di();           /* D/I=0,选择指令寄存器 */  
08AA:  BCF    F96.5
08AC:  BCF    F8D.5
....................   lcd_set_rw();  	        /* R/W=1,发送读允许信号 */  
08AE:  BCF    F96.6
08B0:  BSF    F8D.6
....................   //Datalcm = 0xFF;  
....................   lcd_set_e();              /* E=1,发送使能信号 */  
08B2:  BCF    F96.7
08B4:  BSF    F8D.7
....................   delay_us(1);              /* */  
08B6:  NOP   
08B8:  NOP   
....................   while(lcd_read_status()); /* 若LCD忙,则等待*/  
08BA:  BTFSC  F83.7
08BC:  GOTO   08BA
....................   lcd_clear_e();            /* E=0,发送不使能信号 */  
08C0:  BCF    F96.7
08C2:  BCF    F8D.7
....................   set_tris_d(0x00);         /* 改变RD口的状态,作为输出口 */  
08C4:  MOVLW  00
08C6:  MOVWF  F95
.................... }  
08C8:  RETLW  00
....................   
.................... /********************************/  
.................... /* 命令输出到左区控制口		*/  
.................... /********************************/  
.................... void WrcmdL(int X)  
.................... { lcdbusyL();       /* 选择LCD的左区,且等待LCD使能; */  
*
08DC:  CALL   08CA
....................   lcd_clear_di();   /* D/I=0,选择指令寄存器 */  
08E0:  BCF    F96.5
08E2:  BCF    F8D.5
....................   lcd_clear_rw();   /* R/W=0,发送写允许信号 */  
08E4:  BCF    F96.6
08E6:  BCF    F8D.6
....................   delay_us(1);      /* 延时1us */  
08E8:  NOP   
08EA:  NOP   
....................   set_tris_d(0x00); /* 改变RD口的状态,作为输出口 */    
08EC:  MOVLW  00
08EE:  MOVWF  F95
....................   Datalcm= X;       /* 数据写到数据口 */  
08F0:  MOVFF  53,F83
....................   lcd_set_e();      /* E=1,发送使能信号 */  
08F4:  BCF    F96.7
08F6:  BSF    F8D.7
....................   delay_us(1);      /* 延时1us */  
08F8:  NOP   
08FA:  NOP   
....................   lcd_clear_e();    /* E=0,发送不使能信号 */  
08FC:  BCF    F96.7
08FE:  BCF    F8D.7
.................... }  
0900:  RETLW  00
....................   
.................... /********************************/  
.................... /* 命令输出到中区控制口		*/  
.................... /********************************/  
.................... void WrcmdM(int X)  
.................... { lcdbusyM();       /* 选择LCD的中区,且等待LCD使能; */  
*
0914:  CALL   0902
....................   lcd_clear_di();   /* D/I=0,选择指令寄存器 */  
0918:  BCF    F96.5
091A:  BCF    F8D.5
....................   lcd_clear_rw();   /* R/W=0,发送写允许信号 */  
091C:  BCF    F96.6
091E:  BCF    F8D.6
....................   delay_us(1);      /* 延时1us */  
0920:  NOP   
0922:  NOP   
....................   set_tris_d(0x00); /* 改变RD口的状态,作为输出口 */    
0924:  MOVLW  00
0926:  MOVWF  F95
....................   Datalcm= X;       /* 数据写到数据口 */  
0928:  MOVFF  53,F83
....................   lcd_set_e();      /* E=1,发送使能信号 */  
092C:  BCF    F96.7
092E:  BSF    F8D.7
....................   delay_us(1);      /* 延时1us */  
0930:  NOP   
0932:  NOP   
....................   lcd_clear_e();    /* E=0,发送不使能信号 */  
0934:  BCF    F96.7
0936:  BCF    F8D.7
.................... }  
0938:  RETLW  00
....................   
.................... /********************************/  
.................... /* 命令输出到右区控制口		*/  
.................... /********************************/  
.................... void WrcmdR(int X)  
.................... { lcdbusyR();       /* 选择LCD的右区,且等待LCD使能; */  
*
094C:  CALL   093A
....................   lcd_clear_di();   /* D/I=0,选择指令寄存器 */  
0950:  BCF    F96.5
0952:  BCF    F8D.5
....................   lcd_clear_rw();   /* R/W=0,发送写允许信号 */  
0954:  BCF    F96.6
0956:  BCF    F8D.6
....................   delay_us(1);      /* 延时1us */  
0958:  NOP   
095A:  NOP   
....................   set_tris_d(0x00); /* 改变RD口的状态,作为输出口 */    
095C:  MOVLW  00
095E:  MOVWF  F95
....................   Datalcm= X;       /* 数据写到数据口 */  
0960:  MOVFF  53,F83
....................   lcd_set_e();      /* E=1,发送使能信号 */  
0964:  BCF    F96.7
0966:  BSF    F8D.7
....................   delay_us(1);      /* 延时1us */  
0968:  NOP   
096A:  NOP   
....................   lcd_clear_e();    /* E=0,发送不使能信号 */  
096C:  BCF    F96.7
096E:  BCF    F8D.7
.................... }  
0970:  RETLW  00
....................   
.................... /********************************************************/  
.................... /*将坐标(col,row)转换为"命令x"和"命令y",选中DDRAM中的"列地址"和"行地址"*/  
.................... /********************************************************/  
.................... void Locatexy(void)  
.................... { int x,y;  
....................   switch(col&0xc0)  
....................    {  /*条件分支执行*/  
0972:  MOVF   05,W
0974:  ANDLW  C0
0976:  MOVWF  00
0978:  MOVF   00,F
097A:  BTFSC  FD8.2
097C:  GOTO   0998
0980:  MOVLW  40
0982:  SUBWF  00,W
0984:  BTFSC  FD8.2
0986:  GOTO   09A0
098A:  MOVLW  80
098C:  SUBWF  00,W
098E:  BTFSC  FD8.2
0990:  GOTO   09A8
0994:  GOTO   09B0
....................      case 0:   { lcdbusyL(); break; }  /* 当0x00<=col<=0x3f时,表示当前坐标位于左区,选择LCD的左区,且等待LCD使能; */  
0998:  CALL   08CA
099C:  GOTO   09B0
....................      case 0x40:{ lcdbusyM(); break; }  /* 当0x40<=col<=0x7f时,表示当前坐标位于中区,选择LCD的中区,且等待LCD使能; */  
09A0:  CALL   0902
09A4:  GOTO   09B0
....................      case 0x80:{ lcdbusyR(); break; }  /* 当0x80<=col<=0xff时,表示当前坐标位于右区,选择LCD的右区,且等待LCD使能; */  
09A8:  CALL   093A
09AC:  GOTO   09B0
....................    }  
....................   x=col&0x3F|SETX;  //将col的值,转换为"Y地址命令"  
09B0:  MOVF   05,W
09B2:  ANDLW  3F
09B4:  IORLW  40
09B6:  MOVWF  x67
....................   y=row&0x07|SETY;  //将row的值,转换为"X地址命令"  
09B8:  MOVF   06,W
09BA:  ANDLW  07
09BC:  IORLW  B8
09BE:  MOVWF  x68
....................   
....................   wtcom();          //等待LCD使能;  
09C0:  CALL   08A6
....................   lcd_clear_di();   // D/I=0,选择指令寄存器;  
09C4:  BCF    F96.5
09C6:  BCF    F8D.5
....................   lcd_clear_rw();   // R/W=0,发送写允许信号;  
09C8:  BCF    F96.6
09CA:  BCF    F8D.6
....................   delay_us(1);      //延时1us;  
09CC:  NOP   
09CE:  NOP   
....................   set_tris_d(0x00); //改变RD口的状态,作为输出口;  
09D0:  MOVLW  00
09D2:  MOVWF  F95
....................   Datalcm=y;        //将"X地址命令"的值y发送到DDRAM的"行地址寄存器"中;  
09D4:  MOVFF  68,F83
....................   lcd_set_e();      //E=1,发送使能信号;  
09D8:  BCF    F96.7
09DA:  BSF    F8D.7
....................   delay_us(1);      //延时1us;  
09DC:  NOP   
09DE:  NOP   
....................   lcd_clear_e();    //E=0,发送不使能信号;  
09E0:  BCF    F96.7
09E2:  BCF    F8D.7
....................   
....................   wtcom();          //等待LCD使能;  
09E4:  CALL   08A6
....................   lcd_clear_di();   // D/I=0,选择指令寄存器;  
09E8:  BCF    F96.5

⌨️ 快捷键说明

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