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

📄 dispkeyboard.lst

📁 液晶模块LCD1602配合键盘显示的一个实例
💻 LST
📖 第 1 页 / 共 5 页
字号:
     1B4 2700      CLR	R16
     1B5 C014      RJMP	0x01CA
     1B6 01FB      MOVW	R30,R22
     1B7 0DEC      ADD	R30,R12
     1B8 1DFD      ADC	R31,R13
     1B9 8320      STD	Z+0,R18
     1BA 5F6F      SUBI	R22,0xFF
     1BB 4F7F      SBCI	R23,0xFF
     1BC 5F4F      SUBI	R20,0xFF
     1BD 4F5F      SBCI	R21,0xFF
     1BE 156A      CP	R22,R10
     1BF 057B      CPC	R23,R11
     1C0 F411      BNE	0x01C3
     1C1 2766      CLR	R22
     1C2 2777      CLR	R23
     1C3 01F8      MOVW	R30,R16
     1C4 8377      STD	Z+7,R23
     1C5 8366      STD	Z+6,R22
     1C6 8751      STD	Z+9,R21
     1C7 8740      STD	Z+8,R20
     1C8 9478      BSET	7
(0086)     (
(0087)         pBuffer = pQueue->pBuffer;
(0088)         nSize = pQueue->nSize;
(0089)         
(0090)         if ((pBuffer == NULL) || (!nSize))
(0091)         {
(0092)             SEI();
(0093)             return FALSE;                                   //缓冲区未分配空间
(0094)         }
(0095)         nTail = pQueue->nTail;
(0096)         nHead = pQueue->nHead;
(0097)         nCount = pQueue->nCount;
(0098)     
(0099)     
(0100)         if ((nTail == nHead) && (nCount == nSize))          //缓冲区已满
(0101)         {
(0102)             SEI();
(0103)             return FALSE;
(0104)         }
(0105)     
(0106)         pBuffer[nTail] = cData;
(0107)         nTail++;
(0108)         nCount++;
(0109)         if (nTail == nSize)
(0110)         {
(0111)             nTail = 0;
(0112)         }
(0113)         
(0114)         pQueue->nTail = nTail;
(0115)         pQueue->nCount = nCount;
(0116)     )
(0117)     
(0118)     return TRUE;
     1C9 E001      LDI	R16,1
     1CA 940C 0E7F JMP	pop_xgsetF0FC
_ADT_Queue_Get_From_Buffer:
  pBuffer              --> R12
  nHead1               --> R22
  nCount0              --> R20
  nHead0               --> R14
  nTail0               --> R22
  nSize0               --> R10
  pData                --> R18
  pQueue               --> R16
     1CC 940E 0E8A CALL	push_xgsetF0FC
(0119) }
(0120) 
(0121) /***********************************************************
(0122) *   函数说明:抽象数据类型队列,系统默认队列缓冲区读取函数 *
(0123) *   输入:    存放读取变量的空间指针                       *
(0124) *   输出:    队列是否为空                                 *
(0125) *   调用函数:无                                           *
(0126) ***********************************************************/
(0127) BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
(0128) {
(0129)     uint8 *pBuffer;
(0130)     uint   nSize;
(0131)     uint   nTail;
(0132)     uint   nHead;
(0133)     uint   nCount;
(0134)     
(0135)     SAFE_CODE_PERFORMANCE                                   //原子操作
     1CE 94F8      BCLR	7
     1CF 01F8      MOVW	R30,R16
     1D0 80C0      LDD	R12,Z+0
     1D1 80D1      LDD	R13,Z+1
     1D2 80A2      LDD	R10,Z+2
     1D3 80B3      LDD	R11,Z+3
     1D4 20CC      TST	R12
     1D5 F411      BNE	0x01D8
     1D6 20DD      TST	R13
     1D7 F021      BEQ	0x01DC
     1D8 20AA      TST	R10
     1D9 F429      BNE	0x01DF
     1DA 20BB      TST	R11
     1DB F419      BNE	0x01DF
     1DC 9478      BSET	7
     1DD 2700      CLR	R16
     1DE C027      RJMP	0x0206
     1DF 01F8      MOVW	R30,R16
     1E0 8166      LDD	R22,Z+6
     1E1 8177      LDD	R23,Z+7
     1E2 80E4      LDD	R14,Z+4
     1E3 80F5      LDD	R15,Z+5
     1E4 8540      LDD	R20,Z+8
     1E5 8551      LDD	R21,Z+9
     1E6 156E      CP	R22,R14
     1E7 057F      CPC	R23,R15
     1E8 F431      BNE	0x01EF
     1E9 3040      CPI	R20,0
     1EA 0745      CPC	R20,R21
     1EB F419      BNE	0x01EF
     1EC 9478      BSET	7
     1ED 2700      CLR	R16
     1EE C017      RJMP	0x0206
     1EF 01B7      MOVW	R22,R14
     1F0 5F6F      SUBI	R22,0xFF
     1F1 4F7F      SBCI	R23,0xFF
     1F2 01F7      MOVW	R30,R14
     1F3 0DEC      ADD	R30,R12
     1F4 1DFD      ADC	R31,R13
     1F5 8020      LDD	R2,Z+0
     1F6 01F9      MOVW	R30,R18
     1F7 8220      STD	Z+0,R2
     1F8 5041      SUBI	R20,1
     1F9 4050      SBCI	R21,0
     1FA 156A      CP	R22,R10
     1FB 057B      CPC	R23,R11
     1FC F411      BNE	0x01FF
     1FD 2766      CLR	R22
     1FE 2777      CLR	R23
     1FF 01F8      MOVW	R30,R16
     200 8375      STD	Z+5,R23
     201 8364      STD	Z+4,R22
     202 8751      STD	Z+9,R21
     203 8740      STD	Z+8,R20
     204 9478      BSET	7
(0136)     (
(0137)         pBuffer = pQueue->pBuffer;
(0138)         nSize = pQueue->nSize;
(0139)         
(0140)         if ((pBuffer == NULL) || (!nSize))
(0141)         {
(0142)             SEI();
(0143)             return FALSE;                                   //缓冲区未分配空间
(0144)         }
(0145)         nTail = pQueue->nTail;
(0146)         nHead = pQueue->nHead;
(0147)         nCount = pQueue->nCount;
(0148)         
(0149)     
(0150)         if ((nTail == nHead) && (nCount == 0))              //缓冲区为空
(0151)         {
(0152)             SEI();
(0153)             return FALSE;
(0154)         }
(0155)         
(0156)         (*pData) = pBuffer[nHead++];
(0157)         
(0158)         nCount--;
(0159)         if (nHead == nSize)
(0160)         {
(0161)             nHead = 0;
(0162)         }
(0163)         
(0164)         pQueue->nHead = nHead;
(0165)         pQueue->nCount = nCount;
(0166)     )
(0167)     
(0168)     return TRUE;
     205 E001      LDI	R16,1
     206 940C 0E7F JMP	pop_xgsetF0FC
_ADT_Queue_Check_Empty:
  pBuffer              --> R10
  pQueue               --> R16
     208 92AA      ST	R10,-Y
     209 92BA      ST	R11,-Y
(0169) }
(0170) 
(0171) /***********************************************************
(0172) *   函数说明:队列判空函数                                 *
(0173) *   输入:    队列指针                                     *
(0174) *   输出:    队列是否为空                                 *
(0175) *   调用函数:无                                           *
(0176) ***********************************************************/
(0177) BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue)
(0178) {
(0179)     uint8 *pBuffer;
(0180) 
(0181)     SAFE_CODE_PERFORMANCE
     20A 94F8      BCLR	7
     20B 01F8      MOVW	R30,R16
     20C 80A0      LDD	R10,Z+0
     20D 80B1      LDD	R11,Z+1
     20E 20AA      TST	R10
     20F F411      BNE	0x0212
     210 20BB      TST	R11
     211 F031      BEQ	0x0218
     212 8022      LDD	R2,Z+2
     213 8033      LDD	R3,Z+3
     214 2022      TST	R2
     215 F429      BNE	0x021B
     216 2033      TST	R3
     217 F419      BNE	0x021B
     218 9478      BSET	7
     219 E001      LDI	R16,1
     21A C013      RJMP	0x022E
     21B 01F8      MOVW	R30,R16
     21C 8024      LDD	R2,Z+4
     21D 8035      LDD	R3,Z+5
     21E 8046      LDD	R4,Z+6
     21F 8057      LDD	R5,Z+7
     220 1442      CP	R4,R2
     221 0453      CPC	R5,R3
     222 F449      BNE	0x022C
     223 8420      LDD	R2,Z+8
     224 8431      LDD	R3,Z+9
     225 2022      TST	R2
     226 F429      BNE	0x022C
     227 2033      TST	R3
     228 F419      BNE	0x022C
     229 9478      BSET	7
     22A E001      LDI	R16,1
     22B C002      RJMP	0x022E
     22C 9478      BSET	7
(0182)     (
(0183)         pBuffer = pQueue->pBuffer;
(0184)         
(0185)         if ((pBuffer == NULL) || (!(pQueue->nSize)))
(0186)         {
(0187)             SEI();
(0188)             return TRUE;                                    //缓冲区未分配空间
(0189)         }
(0190) 
(0191)     
(0192)         if (((pQueue->nTail) == (pQueue->nHead)) 
(0193)           && ((pQueue->nCount) == 0))                       //缓冲区为空
(0194)         {
(0195)             SEI();
(0196)             return TRUE;
(0197)         }
(0198)     )
(0199)     
(0200)     return FALSE;
     22D 2700      CLR	R16
     22E 90B9      LD	R11,Y+
     22F 90A9      LD	R10,Y+
     230 9508      RET
_ADT_Queue_Peek_From_Buffer:
  pBuffer              --> R10
  nCount0              --> R14
  nHead0               --> R12
  nTail0               --> R20
  nSize0               --> R12
  pData                --> R18
  pQueue               --> R16
     231 940E 0E8C CALL	push_xgset30FC
(0201) }
(0202) 
(0203) /***********************************************************
(0204) *   函数说明:队列首个数据预览函数                         *
(0205) *   输入:    存放读取变量的空间指针                       *
(0206) *   输出:    队列是否为空                                 *
(0207) *   调用函数:无                                           *
(0208) ***********************************************************/
(0209) BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
(0210) {
(0211)     uint8 *pBuffer;
(0212)     uint   nSize;
(0213)     uint   nTail;
(0214)     uint   nHead;
(0215)     uint   nCount;
(0216)     
(0217)     SAFE_CODE_PERFORMANCE                                   //原子操作
     233 94F8      BCLR	7
     234 01F8      MOVW	R30,R16
     235 80A0      LDD	R10,Z+0
     236 80B1      LDD	R11,Z+1
     237 80C2      LDD	R12,Z+2
     238 80D3      LDD	R13,Z+3
     239 20AA      TST	R10
     23A F411      BNE	0x023D
     23B 20BB      TST	R11
     23C F021      BEQ	0x0241
     23D 20CC      TST	R12
     23E F429      BNE	0x0244
     23F 20DD      TST	R13
     240 F419      BNE	0x0244
     241 9478      BSET	7
     242 2700      CLR	R16
     243 C019      RJMP	0x025D
     244 01F8      MOVW	R30,R16
     245 8146      LDD	R20,Z+6
     246 8157      LDD	R21,Z+7
     247 80C4      LDD	R12,Z+4
     248 80D5      LDD	R13,Z+5
     249 84E0      LDD	R14,Z+8
     24A 84F1      LDD	R15,Z+9
     24B 154C      CP	R20,R12
     24C 055D      CPC	R21,R13
     24D F439      BNE	0x0255
     24E 20EE      TST	R14
     24F F429      BNE	0x0255
     250 20FF      TST	R15
     251 F419      BNE	0x0255
     252 9478      BSET	7
     253 2700      CLR	R16
     254 C008      RJMP	0x025D
     255 01F6      MOVW	R30,R12
     256 0DEA      ADD	R30,R10
     257 1DFB      ADC	R31,R11
     258 8020      LDD	R2,Z+0
     259 01F9      MOVW	R30,R18
     25A 8220      STD	Z+0,R2
     25B 9478      BSET	7
(0218)     (
(0219)         pBuffer = pQueue->pBuffer;
(0220)         nSize = pQueue->nSize;
(0221)         
(0222)         if ((pBuffer == NULL) || (!nSize))
(0223)         {
(0224)             SEI();
(0225)             return FALSE;                                   //缓冲区未分配空间
(0226)         }
(0227)         nTail = pQueue->nTail;
(0228)         nHead = pQueue->nHead;
(0229)         nCount = pQueue->nCount;
(0230)         
(0231)     
(0232)         if ((nTail == nHead) && (nCount == 0))              //缓冲区为空
(0233)         {
(0234)             SEI();
(0235)             return FALSE;

⌨️ 快捷键说明

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