📄 dispkeyboard.lst
字号:
__text_start:
__start:
D3 E5CF LDI R28,0x5F
D4 E0D4 LDI R29,4
D5 BFCD OUT 0x3D,R28
D6 BFDE OUT 0x3E,R29
D7 51C0 SUBI R28,0x10
D8 40D0 SBCI R29,0
D9 EA0A LDI R16,0xAA
DA 8308 STD Y+0,R16
DB 2400 CLR R0
DC E5E9 LDI R30,0x59
DD E0F1 LDI R31,1
DE E012 LDI R17,2
DF 30EE CPI R30,0xE
E0 07F1 CPC R31,R17
E1 F011 BEQ 0x00E4
E2 9201 ST R0,Z+
E3 CFFB RJMP 0x00DF
E4 8300 STD Z+0,R16
E5 EAED LDI R30,0xAD
E6 E0F0 LDI R31,0
E7 E6A0 LDI R26,0x60
E8 E0B0 LDI R27,0
E9 E011 LDI R17,1
EA E000 LDI R16,0
EB BF0B OUT 0x3B,R16
EC 3AE6 CPI R30,0xA6
ED 07F1 CPC R31,R17
EE F021 BEQ 0x00F3
EF 95C8 LPM
F0 9631 ADIW R30,1
F1 920D ST R0,X+
F2 CFF9 RJMP 0x00EC
F3 940E 0E61 CALL _main
_exit:
F5 CFFF RJMP _exit
FILE: H:\单片机\源程序\2007全国电子设计大赛\键盘显示模块\RD_UseLCDSP027.c
(0001) /***********************************************************
(0002) * 函数库说明:SP-027液晶段码显示器驱动函数库 *
(0003) * 版本: v1.00 *
(0004) * 作者: 王卓然 *
(0005) * 创建日期: 2006年5月11日 *
(0006) * -------------------------------------------------------- *
(0007) * [支 持 库] *
(0008) * 支持库名称:RD_UseLCDPS027.h *
(0009) * 需要版本: v1.00 *
(0010) * 支持库说明:SP-027液晶段码显示器驱动函数库 *
(0011) * -------------------------------------------------------- *
(0012) * [版本更新] *
(0013) * 修改: *
(0014) * 修改日期: *
(0015) * 版本: *
(0016) * -------------------------------------------------------- *
(0017) * [版本历史] *
(0018) * -------------------------------------------------------- *
(0019) * [说 明] *
(0020) ***********************************************************/
(0021)
(0022) /********************
(0023) * 头 文 件 配 置 区 *
(0024) ********************/
(0025) # include "RD_UseLCDSP027.h"
(0026)
(0027) /********************
(0028) * 系 统 宏 定 义 *
(0029) ********************/
(0030)
(0031) /*------------------*
(0032) * 硬 件 连 接 定 义 *
(0033) *------------------*/
(0034) #ifndef SP027_DI
(0035) #error None defined SP027 PIN: DI
(0036) #endif
(0037) #ifndef SP027_CLK
(0038) #error None defined SP027 PIN: CLK
(0039) #endif
(0040) # define SP027_NO_ICON 17
(0041) # define SP027_MID_LINE 18
(0042) # define SP027_CIRCLE 19
(0043) /********************
(0044) * 模块变量声明区 *
(0045) ********************/
(0046) static unsigned char LCDSP027_DispBuff[5] = {0,0,0,0,0};
(0047) static unsigned char LCDSP027_DISPCODE[] = {0x09,0xcf,0x91,0x85,0x47,0x25,0x21,0x8f,0x01,0x05,
(0048) 0x03,0x61,0x39,0xc1,0x31,0x33,0x29,0xff,0xf7,0x17};
(0049)
(0050) /********************
(0051) * 函 数 声 明 区 *
(0052) ********************/
(0053) void Set_DISP_BUFF_SP027(char a,char b,char c,char d,char e);
(0054) void LCDSP027_refresh_DISP_BUFF(void);
(0055) void LCDSP027_Clear(void);
(0056) void LCDSP027_PrintN(int16 nNumber);
(0057) void LCDSP027_PrintU(uint16 nNumber);
(0058)
(0059) /********************
(0060) * 模块函数声明区 *
(0061) ********************/
(0062)
(0063) static void LCDSP027_Send_Data(char Data);
(0064) /*
(0065) void LCDSP027_PrintU(uint16 nNumber)
(0066) {
(0067) uint16 wAbsNUM = nNumber;
(0068) uint8 NumberA = 0;
(0069) uint8 NumberB = 0;
(0070) uint8 NumberC = 0;
(0071) uint8 NumberD = 0;
(0072)
(0073) NumberD = wAbsNUM % 10;
(0074) wAbsNUM = wAbsNUM * 0.1;
(0075) NumberC = wAbsNUM % 10;
(0076) wAbsNUM = wAbsNUM * 0.1;
(0077) NumberB = wAbsNUM % 10;
(0078) wAbsNUM = wAbsNUM * 0.1;
(0079) NumberA = wAbsNUM % 10;
(0080)
(0081) Set_DISP_BUFF_SP027
(0082) (
(0083) NumberA,
(0084) NumberB,
(0085) NumberC,
(0086) NumberD,
(0087) SP027_NO_ICON
(0088) );
(0089) }
(0090)
(0091) void LCDSP027_PrintN(int16 nNumber)
(0092) {
(0093) uint16 wAbsNUM = ABS(nNumber);
(0094) uint8 NumberA = 0;
(0095) uint8 NumberB = 0;
(0096) uint8 NumberC = 0;
(0097)
(0098) //NumberC = wAbsNUM % 10;
(0099) //wAbsNUM = wAbsNUM * 0.1;
(0100) //NumberB = wAbsNUM % 10;
(0101) //wAbsNUM = wAbsNUM * 0.1;
(0102) //NumberA = wAbsNUM % 10;
(0103)
(0104) if (nNumber < 0)
(0105) {
(0106) Set_DISP_BUFF_SP027
(0107) (
(0108) SP027_MID_LINE,
(0109) NumberA,
(0110) NumberB,
(0111) NumberC,
(0112) SP027_CIRCLE
(0113) );
(0114) }
(0115) else
(0116) {
(0117) Set_DISP_BUFF_SP027
(0118) (
(0119) SP027_NO_ICON,
(0120) NumberA,
(0121) NumberB,
(0122) NumberC,
(0123) SP027_CIRCLE
(0124) );
(0125) }
(0126) }*/
(0127)
(0128) /***********************************************************
(0129) * 函数说明:显示缓冲区设置函数 *
(0130) * 输入: 要显示的5个数字量(BCD) *
(0131) * 输出: 无 *
(0132) * 调用函数:LCDSP027_refresh_DISP_BUFF() *
(0133) ***********************************************************/
(0134) void Set_DISP_BUFF_SP027(char a,char b,char c,char d,char e)
(0135) {
(0136) LCDSP027_DispBuff[0] = a;
_Set_DISP_BUFF_SP027:
e --> Y,+4
d --> Y,+2
c --> Y,+0
b --> R18
a --> R16
F6 9300 0060 STS 0x0060,R16
(0137) LCDSP027_DispBuff[1] = b;
F8 9320 0061 STS 0x0061,R18
(0138) LCDSP027_DispBuff[2] = c;
FA 8008 LDD R0,Y+0
FB 9200 0062 STS 0x0062,R0
(0139) LCDSP027_DispBuff[3] = d;
FD 800A LDD R0,Y+2
FE 9200 0063 STS 0x0063,R0
(0140) LCDSP027_DispBuff[4] = e;
100 800C LDD R0,Y+4
101 9200 0064 STS 0x0064,R0
103 9508 RET
_LCDSP027_refresh_DISP_BUFF:
n1 --> R20
104 934A ST R20,-Y
(0141)
(0142) //LCDSP027_refresh_DISP_BUFF();
(0143) }
(0144)
(0145) /***********************************************************
(0146) * 函数说明:刷新显示缓冲区函数 *
(0147) * 输入: 无 *
(0148) * 输出: 无 *
(0149) * 调用函数:LCDSP027_Send_Data() *
(0150) ***********************************************************/
(0151) void LCDSP027_refresh_DISP_BUFF(void)
(0152) {
(0153) char n = 0;
(0154) //LCDSP027_Clear();
(0155) for (n = 0;n<5;n++)
105 2744 CLR R20
106 C021 RJMP 0x0128
(0156) {
(0157) if (n == 2)
107 3042 CPI R20,2
108 F481 BNE 0x0119
(0158) {
(0159) LCDSP027_Send_Data
109 E680 LDI R24,0x60
10A E090 LDI R25,0
10B 2FE4 MOV R30,R20
10C 27FF CLR R31
10D 0FE8 ADD R30,R24
10E 1FF9 ADC R31,R25
10F 81E0 LDD R30,Z+0
110 27FF CLR R31
111 E685 LDI R24,0x65
112 E090 LDI R25,0
113 0FE8 ADD R30,R24
114 1FF9 ADC R31,R25
115 8100 LDD R16,Z+0
116 7F0E ANDI R16,0xFE
117 D024 RCALL _LCDSP027_Send_Data
(0160) (
(0161) LCDSP027_DISPCODE[LCDSP027_DispBuff[n]] & ~BIT(0)
(0162) );
(0163) }
118 C00E RJMP 0x0127
(0164) else
(0165) {
(0166) LCDSP027_Send_Data(LCDSP027_DISPCODE[LCDSP027_DispBuff[n]]);
119 E680 LDI R24,0x60
11A E090 LDI R25,0
11B 2FE4 MOV R30,R20
11C 27FF CLR R31
11D 0FE8 ADD R30,R24
11E 1FF9 ADC R31,R25
11F 81E0 LDD R30,Z+0
120 27FF CLR R31
121 E685 LDI R24,0x65
122 E090 LDI R25,0
123 0FE8 ADD R30,R24
124 1FF9 ADC R31,R25
125 8100 LDD R16,Z+0
126 D015 RCALL _LCDSP027_Send_Data
127 9543 INC R20
128 3045 CPI R20,5
129 F2E8 BCS 0x0107
(0167) }
(0168)
(0169) }
(0170) SP027_CLK = LOW;
12A B385 IN R24,0x15
12B 7F8D ANDI R24,0xFD
12C BB85 OUT 0x15,R24
(0171) SP027_CLK = HIGH;
12D B385 IN R24,0x15
12E 6082 ORI R24,2
12F BB85 OUT 0x15,R24
130 9149 LD R20,Y+
131 9508 RET
_LCDSP027_Clear:
132 9725 SBIW R28,5
(0172) }
(0173)
(0174) /***********************************************************
(0175) * 函数说明:清屏函数 *
(0176) * 输入: 无 *
(0177) * 输出: 无 *
(0178) * 调用函数:无 *
(0179) ***********************************************************/
(0180) void LCDSP027_Clear(void)
(0181) {
(0182) /*
(0183) char n = 0;
(0184) for (n = 0;n<40;n++)
(0185) {
(0186) SP027_CLK = LOW;
(0187) SP027_DI = HIGH;
(0188) SP027_CLK = HIGH;
(0189) }
(0190) */
(0191) Set_DISP_BUFF_SP027
133 E181 LDI R24,0x11
134 838C STD Y+4,R24
135 838A STD Y+2,R24
136 8388 STD Y+0,R24
137 E121 LDI R18,0x11
138 E101 LDI R16,0x11
139 DFBC RCALL _Set_DISP_BUFF_SP027
13A 9625 ADIW R28,5
13B 9508 RET
_LCDSP027_Send_Data:
n1 --> R20
Data --> R10
RD_UseLCDSP027.c:LCDSP027_Send_Data:
13C 92AA ST R10,-Y
13D 934A ST R20,-Y
13E 2EA0 MOV R10,R16
(0192) (
(0193) SP027_NO_ICON,
(0194) SP027_NO_ICON,
(0195) SP027_NO_ICON,
(0196) SP027_NO_ICON,
(0197) SP027_NO_ICON
(0198) );
(0199) }
(0200)
(0201) /***********************************************************
(0202) * 函数说明:发送数据函数 *
(0203) * 输入: 无 *
(0204) * 输出: 无 *
(0205) * 调用函数:无 *
(0206) ***********************************************************/
(0207) static void LCDSP027_Send_Data(char Data)
(0208) {
(0209) char n = 0;
(0210)
(0211) for (n = 0;n<8;n++)
13F 2744 CLR R20
140 C01B RJMP 0x015C
(0212) {
(0213) SP027_CLK = LOW;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -