📄 rd_lcd1602b.lis
字号:
.module RD_LCD1602B.c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
.area data(ram, con, rel)
0000 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0000 _CHR:
0000 .blkb 2
.area idata
0000 3031 .byte 48,49
.area data(ram, con, rel)
0002 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0002 .blkb 2
.area idata
0002 3233 .byte 50,51
.area data(ram, con, rel)
0004 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0004 .blkb 2
.area idata
0004 3435 .byte 52,53
.area data(ram, con, rel)
0006 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0006 .blkb 2
.area idata
0006 3637 .byte 54,55
.area data(ram, con, rel)
0008 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0008 .blkb 2
.area idata
0008 3839 .byte 56,57
.area data(ram, con, rel)
000A .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
000A .blkb 2
.area idata
000A 6162 .byte 'a,'b
.area data(ram, con, rel)
000C .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
000C .blkb 2
.area idata
000C 6364 .byte 'c,'d
.area data(ram, con, rel)
000E .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
000E .blkb 2
.area idata
000E 6566 .byte 'e,'f
.area data(ram, con, rel)
0010 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0010 _LCD_Temp:
0010 .blkb 1
.area idata
0010 00 .byte 0
.area data(ram, con, rel)
0011 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0000 .dbfunc s LCDDelay _LCDDelay fV
0000 ; TimeCounter1 -> R20,R21
0000 ; Time -> R10,R11
.even
0000 _LCDDelay:
0000 00D0 rcall push_xgset300C
0002 5801 movw R10,R16
0004 .dbline -1
0004 .dbline 211
0004 ; /***********************************************************
0004 ; * 函数库说明:LCD1602B基本驱动函数库 *
0004 ; * 版本: v2.11 *
0004 ; * 作者: 傻孩子 *
0004 ; * 创建日期: 2005年9月6日 *
0004 ; * -------------------------------------------------------- *
0004 ; * [支 持 库] *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本更新] *
0004 ; * 修改: 傻孩子 *
0004 ; * 修改日期: 2006年6月8日 *
0004 ; * 版本: v2.11 *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本历史] *
0004 ; * -------------------------------------------------------- *
0004 ; * [使用说明] *
0004 ; * 1、需要底层硬件驱动函数支持 *
0004 ; * 基本的宏定义: *
0004 ; * LCD_RS LCD_RW LCD_E *
0004 ; * LCD_SET_WRITE_DATA LCD_SET_READ_DATA *
0004 ; * LCD_SEND_HALF_CHAR_HIGH(a) *
0004 ; * LCD_SEND_HALF_CHAR_LOW(a) *
0004 ; * 当处于串行状态下时,只定义LCD_RS *
0004 ; * LCD_E LCD_SEND_HALF_CHAR_HIGH(a) *
0004 ; * LCD_SEND_HALF_CHAR_LOW(a) *
0004 ; * 2、如果采用8数据位连接,则需要定义数据端口 *
0004 ; * LCD_DATA_PORT,同时需要定义宏来开启该功 *
0004 ; * 能:_LCD1602_FULL_DATA_MODEL *
0004 ; * 3、需要修改引用宏定义来指定底层硬件驱动 *
0004 ; * 函数库。 *
0004 ; * 4、本库驱动下的LCD显示支持1602的各种连 *
0004 ; * 接方法。当使用只写模式是请在引用该头 *
0004 ; * 文件之前加上宏定义: *
0004 ; * # define _USE_LCD_ONLY_WRITE *
0004 ; * 5、在调用本库之前,定义RunStringSpeed可 *
0004 ; * 以设置滚屏的速度。通过在引用前定义 *
0004 ; * FlashTimeOut 和 FlashGIFTimeOut 可以 *
0004 ; * 改变字符闪烁的频率。 *
0004 ; * 6、增加一个GIF字幕特效函数。 *
0004 ; * 7、确定没有LCD复位问题。 *
0004 ; * 8、增加对595串行转并行连接的支持。 *
0004 ; * 需要头文件SerialToCollateral.h *
0004 ; ***********************************************************/
0004 ;
0004 ; /********************
0004 ; * 头 文 件 配 置 区 *
0004 ; ********************/
0004 ; # include "RD_MacroAndConst.h"
0004 ; # include "LIB_Config.h"
0004 ; # include "RD_LCD1602B.h"
0004 ;
0004 ;
0004 ; /********************
0004 ; * 系 统 宏 定 义 *
0004 ; ********************/
0004 ;
0004 ; /*------------------*
0004 ; * 常 数 宏 定 义 *
0004 ; *------------------*/
0004 ; # define LCD_CMD_DISP_CTR 0x0c
0004 ; # define LCD_CMD_CLS 0x01
0004 ; # define LCD_CMD_ENTER_SET 0x02
0004 ; # define LCD_CMD_ICON_SHOW 0x0f
0004 ; # define LCD_CMD_ICON_HIDE 0x0c
0004 ; # define LCD_CMD_NOT_MOVE 0x14
0004 ;
0004 ;
0004 ; # define LCD_WRITE 0x00
0004 ; # define LCD_READ 0x01
0004 ; # define LCD_COMMAND 0x00
0004 ; # define LCD_DATA 0x01
0004 ;
0004 ; #ifndef LCD_RUN_STRING_SPEED
0004 ; # define LCD_RUN_STRING_SPEED 100
0004 ; #endif
0004 ;
0004 ; #ifndef LCD_FLASH_TIME_OUT
0004 ; # define LCD_FLASH_TIME_OUT 0x03ff
0004 ; #endif
0004 ; #ifndef LCD_FLASH_STRING_GROUP_TIME_OUT
0004 ; # define LCD_FLASH_STRING_GROUP_TIME_OUT 0x03ff
0004 ; #endif
0004 ;
0004 ; /*------------------*
0004 ; * 动 作 宏 定 义 *
0004 ; *------------------*/
0004 ;
0004 ; #if defined(_USE_LCD_ONLY_WRITE) || defined(_Use_LCD1602B_Serial)
0004 ; #ifndef LCD_SET_WRITE_DATA
0004 ; # define LCD_SET_WRITE_DATA
0004 ; #endif
0004 ; #ifndef LCD_SET_READ_DATA
0004 ; # define LCD_SET_READ_DATA
0004 ; #endif
0004 ; #ifndef LCD_RW
0004 ; # define LCD_RW LCD_Temp
0004 ; #endif
0004 ;
0004 ; #ifndef LCD_BF
0004 ; # define LCD_BF LCD_Temp
0004 ; #endif
0004 ; #else
0004 ; #ifndef LCD_SET_WRITE_DATA
0004 ; # error No define LCD_SET_WRITE_DATA
0004 ; #endif
0004 ; #ifndef LCD_SET_READ_DATA
0004 ; # error No define LCD_SET_READ_DATA
0004 ; #endif
0004 ; #ifndef LCD_RW
0004 ; # error No define LCD_RW
0004 ; #endif
0004 ; #ifndef LCD_BF
0004 ; # error No define LCD_BF
0004 ; #endif
0004 ; #endif
0004 ;
0004 ; #ifndef LCD_RS
0004 ; # error Need define LCD_RS
0004 ; #endif
0004 ;
0004 ; #ifndef _Use_LCD1602B_Serial
0004 ; # define SetReadState LCD_SET_READ_DATA;LCD_RS = LCD_COMMAND;LCD_RW = LCD_READ;
0004 ; # define SetRead LCD_SET_READ_DATA;LCD_RW = LCD_READ;
0004 ; # define SetWrite LCD_SET_WRITE_DATA;LCD_RW = LCD_WRITE;
0004 ; # define SetCommand LCD_RS = LCD_COMMAND;
0004 ; # define SetData LCD_RS = LCD_DATA;
0004 ; #else
0004 ; # define _USE_LCD_ONLY_WRITE
0004 ; # define SetReadState
0004 ; # define SetRead
0004 ; # define SetWrite
0004 ; # define SetCommand LCD_RS = LCD_COMMAND;refreshVirtualPORT();
0004 ; # define SetData LCD_RS = LCD_DATA;refreshVirtualPORT();
0004 ; # define SetEnable LCD_E = High;refreshVirtualPORT();
0004 ; # define SetDisable LCD_E = Low;refreshVirtualPORT();
0004 ; #endif
0004 ;
0004 ; #ifdef _LCD1602_FULL_DATA_MODEL
0004 ; #ifndef LCD_DATA_PORT
0004 ; #error Need for macro: LCD_DATA_PORT
0004 ; #endif
0004 ; #endif
0004 ; /********************
0004 ; * 用户变量类型定义 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 模块结构体定义区 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 模块函数声明区 *
0004 ; ********************/
0004 ; static void LCDDelay(UINT16 Time);
0004 ; static void LCDDelayUs(UINT16 Time);
0004 ;
0004 ;
0004 ; /********************
0004 ; * 全局函数声明区 *
0004 ; ********************/
0004 ; void LCDInit(void);
0004 ; void LCDSetXY(UINT8 X,UINT8 Y);
0004 ; void LCDDisplayString(UINT8 *String);
0004 ; void LCDDisplayNum(unsigned long Num,UINT8 BitCount);
0004 ; void RunString(UINT8 *String,UINT8 Y,UINT8 StartX,UINT8 EndX);
0004 ; UINT8 StringLength(UINT8 *String);
0004 ; void Flash(UINT8 *String,UINT8 Icon,UINT8 X,UINT8 Y);
0004 ; void FlashStringGroup(UINT8 String[][17],UINT8 StringCounter,UINT8 X,UINT8 Y);
0004 ; void LCDWaitForReady(void);
0004 ; void LCDSendCommand(UINT8 Command);
0004 ; void LCDSendData(UINT8 Data);
0004 ; void PrintD(INT32 nNumber,UINT8 chCounter);
0004 ;
0004 ; /********************
0004 ; * 全局函数引用区 *
0004 ; ********************/
0004 ; #ifdef _Use_LCD1602B_Serial
0004 ; extern void refreshVirtualPORT(void);
0004 ; #endif
0004 ;
0004 ; /********************
0004 ; * 模块变量声明区 *
0004 ; ********************/
0004 ; const static UINT8 CHR[16] = {'0','1','2','3','4','5','6','7','8'
0004 ; ,'9','a','b','c','d','e','f'};
0004 ;
0004 ; /********************
0004 ; * 全局变量声明区 *
0004 ; ********************/
0004 ; static UINT8 LCD_Temp = 0;
0004 ;
0004 ; /********************
0004 ; * 全局变量引用区 *
0004 ; ********************/
0004 ; #ifndef SYS_TIMER_MS_ADD_UNTILL_OVF
0004 ; extern UINT16 g_wSystemTimer;
0004 ; #define SYS_TIMER_MS_ADD_UNTILL_OVF g_wSystemTimer
0004 ; #else
0004 ; extern UINT16 SYS_TIMER_MS_ADD_UNTILL_OVF;
0004 ; #endif
0004 ;
0004 ;
0004 ;
0004 ; /***********************************************************
0004 ; * 函数说明:LCD驱动类毫秒延时函数 *
0004 ; * 输入: 需要延时的大体毫秒数 *
0004 ; * 输出: 无 *
0004 ; * 调用函数:LCDDelayUs() *
0004 ; ***********************************************************/
0004 ; static void LCDDelay(UINT16 Time)
0004 ; {
0004 .dbline 212
0004 ; UINT16 TimeCounter = 0;
0004 .dbline 214
0004 ;
0004 ; for (TimeCounter = 0;TimeCounter < Time;TimeCounter ++)
0004 4427 clr R20
0006 5527 clr R21
0008 05C0 rjmp L5
000A L2:
000A .dbline 215
000A ; {
000A .dbline 216
000A ; LCDDelayUs(255);
000A 0FEF ldi R16,255
000C 10E0 ldi R17,0
000E 06D0 rcall _LCDDelayUs
0010 .dbline 217
0010 ; }
0010 L3:
0010 .dbline 214
0010 4F5F subi R20,255 ; offset = 1
0012 5F4F sbci R21,255
0014 L5:
0014 .dbline 214
0014 4A15 cp R20,R10
0016 5B05 cpc R21,R11
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -