📄 lcd_19264_main.lst
字号:
.................... 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 + -