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

📄 dispkeyboard.lst

📁 液晶模块LCD1602配合键盘显示的一个实例
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -