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

📄 rd_uselcdsp027.s

📁 LCD1602键盘显示模块实例
💻 S
字号:
	.module RD_UseLCDSP027.c
	.area text(rom, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
_LCDSP027_DispBuff:
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
_LCDSP027_DISPCODE:
	.blkb 2
	.area idata
	.byte 9,207
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 145,133
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 'G,37
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 33,143
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 1,5
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 3,'a
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 57,193
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 49,51
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 41,255
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.blkb 2
	.area idata
	.byte 247,23
	.area data(ram, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.area text(rom, con, rel)
	.dbfile H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
	.dbfunc e Set_DISP_BUFF_SP027 _Set_DISP_BUFF_SP027 fV
;              e -> y+4
;              d -> y+2
;              c -> y+0
;              b -> R18
;              a -> R16
	.even
_Set_DISP_BUFF_SP027::
	.dbline -1
	.dbline 135
; /***********************************************************
; *   函数库说明:SP-027液晶段码显示器驱动函数库             *
; *   版本:      v1.00                                      *
; *   作者:      王卓然                                     *
; *   创建日期:  2006年5月11日                              *
; * -------------------------------------------------------- *
; *  [支 持 库]                                              *
; *   支持库名称:RD_UseLCDPS027.h                           *
; *   需要版本:  v1.00                                      *
; *   支持库说明:SP-027液晶段码显示器驱动函数库             *
; * -------------------------------------------------------- *
; *  [版本更新]                                              *
; *   修改:                                                 *
; *   修改日期:                                             *
; *   版本:                                                 *
; * -------------------------------------------------------- *
; *  [版本历史]                                              *
; * -------------------------------------------------------- *
; *  [说    明]                                              *
; ***********************************************************/
; 
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "RD_UseLCDSP027.h"
; 
; /********************
; *   系 统 宏 定 义  *
; ********************/
; 
; /*------------------*
; * 硬 件 连 接 定 义 *
; *------------------*/
; #ifndef SP027_DI
;     #error None defined SP027 PIN: DI
; #endif
; #ifndef SP027_CLK
;     #error None defined SP027 PIN: CLK  
; #endif
; # define SP027_NO_ICON      17
; # define SP027_MID_LINE     18
; # define SP027_CIRCLE       19
; /********************
; *   模块变量声明区  *
; ********************/
; static unsigned char LCDSP027_DispBuff[5] = {0,0,0,0,0};
; static unsigned char LCDSP027_DISPCODE[] = {0x09,0xcf,0x91,0x85,0x47,0x25,0x21,0x8f,0x01,0x05,
;                             0x03,0x61,0x39,0xc1,0x31,0x33,0x29,0xff,0xf7,0x17};
; 
; /********************
; *   函 数 声 明 区  *
; ********************/                            
; void Set_DISP_BUFF_SP027(char a,char b,char c,char d,char e);
; void LCDSP027_refresh_DISP_BUFF(void);
; void LCDSP027_Clear(void);
; void LCDSP027_PrintN(int16 nNumber);
; void LCDSP027_PrintU(uint16 nNumber);
; 
; /********************
; *   模块函数声明区  *
; ********************/
; 
; static void LCDSP027_Send_Data(char Data);
; /*
; void LCDSP027_PrintU(uint16 nNumber)
; {
;     uint16 wAbsNUM = nNumber;
;     uint8 NumberA = 0;
;     uint8 NumberB = 0;
;     uint8 NumberC = 0;
;     uint8 NumberD = 0;
;     
;     NumberD = wAbsNUM % 10;
;     wAbsNUM = wAbsNUM * 0.1;
;     NumberC = wAbsNUM % 10;
;     wAbsNUM = wAbsNUM * 0.1;
;     NumberB = wAbsNUM % 10;
;     wAbsNUM = wAbsNUM * 0.1;
;     NumberA = wAbsNUM % 10;
;     
;     Set_DISP_BUFF_SP027
;         (
;             NumberA,
;             NumberB,
;             NumberC,
;             NumberD,
;             SP027_NO_ICON
;         );
; }
; 
; void LCDSP027_PrintN(int16 nNumber)
; {
;     uint16 wAbsNUM = ABS(nNumber);
;     uint8 NumberA = 0;
;     uint8 NumberB = 0;
;     uint8 NumberC = 0;
;     
;     //NumberC = wAbsNUM % 10;
;     //wAbsNUM = wAbsNUM * 0.1;
;     //NumberB = wAbsNUM % 10;
;     //wAbsNUM = wAbsNUM * 0.1;
;     //NumberA = wAbsNUM % 10;
;     
;     if (nNumber < 0)
;     {
;         Set_DISP_BUFF_SP027
;         (
;             SP027_MID_LINE,                                             
;             NumberA,
;             NumberB,
;             NumberC,
;             SP027_CIRCLE
;         );
;     }
;     else
;     {
;         Set_DISP_BUFF_SP027
;         (
;             SP027_NO_ICON,                                             
;             NumberA,
;             NumberB,
;             NumberC,
;             SP027_CIRCLE
;         );
;     }
; }*/
; 
; /***********************************************************
; *   函数说明:显示缓冲区设置函数                           *
; *   输入:    要显示的5个数字量(BCD)                       *
; *   输出:    无                                           *
; *   调用函数:LCDSP027_refresh_DISP_BUFF()                 *
; ***********************************************************/
; void Set_DISP_BUFF_SP027(char a,char b,char c,char d,char e)
; {
	.dbline 136
;     LCDSP027_DispBuff[0] = a;
	sts _LCDSP027_DispBuff,R16
	.dbline 137
;     LCDSP027_DispBuff[1] = b;
	sts _LCDSP027_DispBuff+1,R18
	.dbline 138
;     LCDSP027_DispBuff[2] = c;
	ldd R0,y+0
	sts _LCDSP027_DispBuff+2,R0
	.dbline 139
;     LCDSP027_DispBuff[3] = d;
	ldd R0,y+2
	sts _LCDSP027_DispBuff+3,R0
	.dbline 140
;     LCDSP027_DispBuff[4] = e;
	ldd R0,y+4
	sts _LCDSP027_DispBuff+4,R0
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym l e 4 c
	.dbsym l d 2 c
	.dbsym l c 0 c
	.dbsym r b 18 c
	.dbsym r a 16 c
	.dbend
	.dbfunc e LCDSP027_refresh_DISP_BUFF _LCDSP027_refresh_DISP_BUFF fV
;             n1 -> R20
	.even
_LCDSP027_refresh_DISP_BUFF::
	st -y,R20
	.dbline -1
	.dbline 152
; 		
;     //LCDSP027_refresh_DISP_BUFF();
; }
; 
; /***********************************************************
; *   函数说明:刷新显示缓冲区函数                           *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:LCDSP027_Send_Data()                         *
; ***********************************************************/
; void LCDSP027_refresh_DISP_BUFF(void)
; {
	.dbline 153
;     char n = 0;
	.dbline 155
;     //LCDSP027_Clear();
;     for (n = 0;n<5;n++)
	clr R20
	xjmp L10
L7:
	.dbline 156
;     {
	.dbline 157
;         if (n == 2)
	cpi R20,2
	brne L11
X0:
	.dbline 158
;         {
	.dbline 159
;             LCDSP027_Send_Data
	ldi R24,<_LCDSP027_DispBuff
	ldi R25,>_LCDSP027_DispBuff
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<_LCDSP027_DISPCODE
	ldi R25,>_LCDSP027_DISPCODE
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	andi R16,254
	xcall _LCDSP027_Send_Data
	.dbline 163
;                 (
;                     LCDSP027_DISPCODE[LCDSP027_DispBuff[n]] & ~BIT(0)
;                 );
;         }
	xjmp L12
L11:
	.dbline 165
;         else
;         {
	.dbline 166
;             LCDSP027_Send_Data(LCDSP027_DISPCODE[LCDSP027_DispBuff[n]]);
	ldi R24,<_LCDSP027_DispBuff
	ldi R25,>_LCDSP027_DispBuff
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<_LCDSP027_DISPCODE
	ldi R25,>_LCDSP027_DISPCODE
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _LCDSP027_Send_Data
	.dbline 167
;         }
L12:
	.dbline 169
;         
;     }
L8:
	.dbline 155
	inc R20
L10:
	.dbline 155
	cpi R20,5
	brlo L7
X1:
	.dbline 170
;     SP027_CLK = LOW;
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 171
;     SP027_CLK = HIGH;
	in R24,0x15
	ori R24,2
	out 0x15,R24
	.dbline -2
L6:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r n1 20 c
	.dbend
	.dbfunc e LCDSP027_Clear _LCDSP027_Clear fV
	.even
_LCDSP027_Clear::
	sbiw R28,5
	.dbline -1
	.dbline 181
; }
; 
; /***********************************************************
; *   函数说明:清屏函数                                     *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:无                                           *
; ***********************************************************/
; void LCDSP027_Clear(void)
; {
	.dbline 191
;     /*
;     char n = 0;
;     for (n = 0;n<40;n++)
;     {
;         SP027_CLK = LOW;
;         SP027_DI = HIGH;
;         SP027_CLK = HIGH;
;     }
;     */
;     Set_DISP_BUFF_SP027
	ldi R24,17
	std y+4,R24
	std y+2,R24
	std y+0,R24
	ldi R18,17
	ldi R16,17
	xcall _Set_DISP_BUFF_SP027
	.dbline -2
L13:
	.dbline 0 ; func end
	adiw R28,5
	ret
	.dbend
	.dbfunc s LCDSP027_Send_Data _LCDSP027_Send_Data fV
;             n1 -> R20
;           Data -> R10
	.even
_LCDSP027_Send_Data:
	st -y,R10
	st -y,R20
	mov R10,R16
	.dbline -1
	.dbline 208
;         (
;             SP027_NO_ICON,
;             SP027_NO_ICON,
;             SP027_NO_ICON,
;             SP027_NO_ICON,
;             SP027_NO_ICON
;         );
; }
; 
; /***********************************************************
; *   函数说明:发送数据函数                                 *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:无                                           *
; ***********************************************************/
; static void LCDSP027_Send_Data(char Data)
; {
	.dbline 209
;     char n = 0;
	.dbline 211
;     
;     for (n = 0;n<8;n++)
	clr R20
	xjmp L18
L15:
	.dbline 212
;     {
	.dbline 213
;         SP027_CLK = LOW;
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 214
;         if (Data<<n>>7)
	mov R16,R10
	mov R17,R20
	xcall lsl8
	mov R2,R16
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	breq L19
X2:
	.dbline 215
;         {
	.dbline 216
;             SP027_DI = HIGH;
	in R24,0x15
	ori R24,1
	out 0x15,R24
	.dbline 217
;         }
	xjmp L20
L19:
	.dbline 219
;         else
;         {
	.dbline 220
;             SP027_DI = LOW;
	in R24,0x15
	andi R24,254
	out 0x15,R24
	.dbline 221
;         }
L20:
	.dbline 222
;         SP027_CLK = HIGH;
	in R24,0x15
	ori R24,2
	out 0x15,R24
	.dbline 223
;     }
L16:
	.dbline 211
	inc R20
L18:
	.dbline 211
	cpi R20,8
	brlo L15
X3:
	.dbline -2
L14:
	.dbline 0 ; func end
	ld R20,y+
	ld R10,y+
	ret
	.dbsym r n1 20 c
	.dbsym r Data 10 c
	.dbend
; }
; 
; 

⌨️ 快捷键说明

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