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

📄 键盘显示模块.lst

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0218)                     case 0xDF :
(0219)                     {
(0220)                         KeyStatu = Key_Press;
    0143 2422      CLR	R2
    0144 92200106  STS	KeyStatu,R2
(0221)                         return Key_3;
    0146 E003      LDI	R16,3
    0147 C00E      RJMP	0x0156
(0222)                         break;
(0223)                     }
(0224)                     
(0225)                     case 0xBF :
(0226)                     {
(0227)                         KeyStatu = Key_Press;
    0148 2422      CLR	R2
    0149 92200106  STS	KeyStatu,R2
(0228)                         return Key_2;
    014B E002      LDI	R16,2
    014C C009      RJMP	0x0156
(0229)                         break;
(0230)                     }
(0231)                     
(0232)                     case 0x7F :
(0233)                     {
(0234)                         KeyStatu = Key_Press;
    014D 2422      CLR	R2
    014E 92200106  STS	KeyStatu,R2
(0235)                         return Key_1;
    0150 E001      LDI	R16,1
    0151 C004      RJMP	0x0156
(0236)                         break;
(0237)                     }
(0238)                 }
(0239)                 KeyStatu = Key_Press;           //读到的端口状态无法解析
    0152 2422      CLR	R2
    0153 92200106  STS	KeyStatu,R2
(0240)             }                               //End Of "if (KeyPin == 0)"
(0241)             break;
(0242)         }                                   //End Of " case Key_Release :"
(0243)     }                                       //End Of "switch (KeyStatu)"
(0244)     return Key_Null;
    0155 2700      CLR	R16
    0156 9508      RET
(0245) }
(0246) 
(0247) /***********************************************************
(0248) *   函数说明:端口通讯程序                                 *
(0249) *   输入:    无                                           *
(0250) *   输出:    无                                           *
(0251) *   调用函数:                                             *
(0252) ***********************************************************/
(0253) void Port_refresh (void)
(0254) {
(0255)     unsigned char i;
(0256) 
(0257)     SS_Low;                         //模拟#SS的下跳沿
_Port_refresh:
  i                    --> R16
    0157 982A      CBI	0x05,2
(0258) 
(0259)     for (i=0; i<ExtPortNum; i++)
    0158 2700      CLR	R16
    0159 C014      RJMP	0x016E
(0260)     {
(0261)         SPDR = PortBuffer[i];       //刷新虚拟端口的一个字节
    015A E184      LDI	R24,0x14
    015B E091      LDI	R25,1
    015C 2FE0      MOV	R30,R16
    015D 27FF      CLR	R31
    015E 0FE8      ADD	R30,R24
    015F 1FF9      ADC	R31,R25
    0160 8020      LDD	R2,Z+0
    0161 BC2E      OUT	0x2E,R2
(0262)         while(!(SPSR&(1<<SPIF)));   //等待通讯完成
    0162 B42D      IN	R2,0x2D
    0163 FE27      SBRS	R2,7
    0164 CFFD      RJMP	0x0162
(0263)         PortBuffer[i] = SPDR;       //读回的数据返写回端口缓冲区
    0165 E184      LDI	R24,0x14
    0166 E091      LDI	R25,1
    0167 2FE0      MOV	R30,R16
    0168 27FF      CLR	R31
    0169 0FE8      ADD	R30,R24
    016A 1FF9      ADC	R31,R25
    016B B42E      IN	R2,0x2E
    016C 8220      STD	Z+0,R2
    016D 9503      INC	R16
    016E 3003      CPI	R16,3
    016F F350      BCS	0x015A
(0264)     }
(0265) 
(0266)     SS_High;                        //模拟#SS的上跳沿
    0170 9A2A      SBI	0x05,2
    0171 9508      RET
FILE: D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\System.c
(0001) /*********************************************************/
(0002) /*                                                       */
(0003) /*               实例15   键盘显示模块                   */
(0004) /*                                                       */
(0005) /*                                                       */
(0006) /*                 程序设计 江海波                       */
(0007) /*                                                       */
(0008) /*        编写时间 : 2007-06     版本 : V1.0             */
(0009) /*                                                       */
(0010) /*     提示 : 代码受版权保护,示例程序用于工程应谨慎      */
(0011) /*                                                       */
(0012) /*           E-mail : soundman@sohu.com                  */
(0013) /*-------------------------------------------------------*/
(0014) /* 硬件环境:                                             */
(0015) /*                                                       */
(0016) /*     实验电路板,ATmega48单片机,CPU时钟1MHz             */
(0017) /* ------------------------------------------------------*/
(0018) /* 软件环境:                                             */
(0019) /*                                                       */
(0020) /*     ICCAVR 6.31A                                      */
(0021) /* ------------------------------------------------------*/
(0022) /* 最后修改时间:                                         */
(0023) /*                                                       */
(0024) /*-------------------------------------------------------*/
(0025) /* 历史版本纪录:                                         */
(0026) /*                                                       */
(0027) /*********************************************************/
(0028) 
(0029) /********************
(0030) * 头 文 件 配 置 区 *
(0031) ********************/
(0032) #include "PF_Config.h"
(0033) #include "KeyDis_Drv.h"
(0034) 
(0035) /********************
(0036) *   系 统 宏 定 义  *
(0037) ********************/
(0038) 
(0039) /*------------------*
(0040) *   常 数 宏 定 义  *
(0041) *------------------*/
(0042) 
(0043) /*------------------*
(0044) *   动 作 宏 定 义  *
(0045) *------------------*/
(0046) 
(0047) /********************
(0048) *  模块结构体定义区 *
(0049) ********************/
(0050) 
(0051) /********************
(0052) *   模块函数声明区  *
(0053) ********************/
(0054) 
(0055) /********************
(0056) *   模块变量声明区  *
(0057) ********************/
(0058) 
(0059) /***********************************************************
(0060) *   函数说明:主函数                                       *
(0061) *   输入:    无                                           *
(0062) *   输出:    无                                           *
(0063) *   调用函数:System_INIT()                                *
(0064) ***********************************************************/
(0065) void main(void)
(0066) {
(0067)     unsigned char i;
(0068)     
(0069)     System_INIT();                                          //代码初始化
_main:
  i                    --> R20
    0172 DED8      RCALL	_System_INIT
(0070)     
(0071)     LEDDisBuffer[0] = Key_Null;
    0173 2422      CLR	R2
    0174 9220010C  STS	LEDDisBuffer,R2
(0072)     LEDDisBuffer[1] = Key_Null;
    0176 9220010D  STS	LEDDisBuffer+1,R2
(0073)     LEDDisBuffer[2] = Key_Null;
    0178 9220010E  STS	LEDDisBuffer+2,R2
(0074)     LEDDisBuffer[3] = Key_Null;
    017A 9220010F  STS	LEDDisBuffer+3,R2
(0075)     LEDDisBuffer[4] = Key_Null;
    017C 92200110  STS	0x110,R2
(0076)     LEDDisBuffer[5] = Key_Null;
    017E 92200111  STS	0x111,R2
(0077)     LEDDisBuffer[6] = Key_Null;
    0180 92200112  STS	0x112,R2
(0078)     LEDDisBuffer[7] = Key_Null;
    0182 92200113  STS	0x113,R2
    0184 C02B      RJMP	0x01B0
(0079) 
(0080)     while(TRUE)                                             //超级循环
(0081)     {
(0082)         if (KeyBuffer != Key_Null)
    0185 9020010B  LDS	R2,KeyBuffer
    0187 2022      TST	R2
    0188 F0D9      BEQ	0x01A4
(0083)         {
(0084)             for (i=7; i>0; i--)
    0189 E047      LDI	R20,7
    018A C00F      RJMP	0x019A
(0085)             {
(0086)                 LEDDisBuffer[i] = LEDDisBuffer[i-1];
    018B E08B      LDI	R24,0xB
    018C E091      LDI	R25,1
    018D 2FE4      MOV	R30,R20
    018E 27FF      CLR	R31
    018F 0FE8      ADD	R30,R24
    0190 1FF9      ADC	R31,R25
    0191 8020      LDD	R2,Z+0
    0192 E08C      LDI	R24,0xC
    0193 E091      LDI	R25,1
    0194 2FE4      MOV	R30,R20
    0195 27FF      CLR	R31
    0196 0FE8      ADD	R30,R24
    0197 1FF9      ADC	R31,R25
    0198 8220      STD	Z+0,R2
    0199 954A      DEC	R20
    019A 2422      CLR	R2
    019B 1624      CP	R2,R20
    019C F370      BCS	0x018B
(0087)             }
(0088)             
(0089)             LEDDisBuffer[0] = KeyBuffer;
    019D 9020010B  LDS	R2,KeyBuffer
    019F 9220010C  STS	LEDDisBuffer,R2
(0090)             
(0091)             KeyBuffer = Key_Null;
    01A1 2422      CLR	R2
    01A2 9220010B  STS	KeyBuffer,R2
(0092)         }
(0093)         
(0094)         if (DoTime == TRUE)
    01A4 91800102  LDS	R24,DoTime
    01A6 3081      CPI	R24,1
    01A7 F441      BNE	0x01B0
(0095)         {
(0096)             DoTime = FALSE;
    01A8 2422      CLR	R2
    01A9 92200102  STS	DoTime,R2
(0097)             LEDDisplay();
    01AB DEE1      RCALL	_LEDDisplay
(0098)             Port_refresh();
    01AC DFAA      RCALL	_Port_refresh
(0099)             KeyBuffer = Key_service();
FILE: <library>
    01AD DF08      RCALL	_Key_service
    01AE 9300010B  STS	KeyBuffer,R16
    01B0 CFD4      RJMP	0x0185
    01B1 9508      RET
mod16u:
    01B2 9468      BSET	6
    01B3 C001      RJMP	xdiv16u
div16u:
    01B4 94E8      BCLR	6
xdiv16u:
    01B5 92EA      ST	R14,-Y
    01B6 92FA      ST	R15,-Y
    01B7 938A      ST	R24,-Y
    01B8 24EE      CLR	R14
    01B9 24FF      CLR	R15
    01BA E180      LDI	R24,0x10
    01BB 0F00      LSL	R16
    01BC 1F11      ROL	R17
    01BD 1CEE      ROL	R14
    01BE 1CFF      ROL	R15
    01BF 16E2      CP	R14,R18
    01C0 06F3      CPC	R15,R19
    01C1 F018      BCS	0x01C5
    01C2 1AE2      SUB	R14,R18
    01C3 0AF3      SBC	R15,R19
    01C4 9503      INC	R16
    01C5 958A      DEC	R24
    01C6 F7A1      BNE	0x01BB
    01C7 F416      BRTC	0x01CA
    01C8 2D0E      MOV	R16,R14
    01C9 2D1F      MOV	R17,R15
    01CA 9189      LD	R24,Y+
    01CB 90F9      LD	R15,Y+
    01CC 90E9      LD	R14,Y+
    01CD 9508      RET
push_gset5:
    01CE 92FA      ST	R15,-Y
    01CF 92EA      ST	R14,-Y
push_gset4:
    01D0 92DA      ST	R13,-Y
    01D1 92CA      ST	R12,-Y
push_gset3:
    01D2 92BA      ST	R11,-Y
    01D3 92AA      ST	R10,-Y
push_gset2:
    01D4 937A      ST	R23,-Y
    01D5 936A      ST	R22,-Y
push_gset1:
    01D6 935A      ST	R21,-Y
    01D7 934A      ST	R20,-Y
    01D8 9508      RET
pop_gset1:
    01D9 E0E1      LDI	R30,1
pop:
    01DA 9149      LD	R20,Y+
    01DB 9159      LD	R21,Y+
    01DC FDE0      SBRC	R30,0
    01DD 9508      RET
    01DE 9169      LD	R22,Y+
    01DF 9179      LD	R23,Y+
    01E0 FDE1      SBRC	R30,1
    01E1 9508      RET
    01E2 90A9      LD	R10,Y+
    01E3 90B9      LD	R11,Y+
    01E4 FDE2      SBRC	R30,2
    01E5 9508      RET
    01E6 90C9      LD	R12,Y+
    01E7 90D9      LD	R13,Y+
    01E8 FDE3      SBRC	R30,3
    01E9 9508      RET
    01EA 90E9      LD	R14,Y+
    01EB 90F9      LD	R15,Y+
    01EC 9508      RET
push_lset:
    01ED 93FA      ST	R31,-Y
    01EE 93EA      ST	R30,-Y
    01EF 93BA      ST	R27,-Y
    01F0 93AA      ST	R26,-Y
    01F1 939A      ST	R25,-Y
    01F2 938A      ST	R24,-Y
    01F3 933A      ST	R19,-Y
    01F4 932A      ST	R18,-Y
    01F5 931A      ST	R17,-Y
    01F6 930A      ST	R16,-Y
    01F7 929A      ST	R9,-Y
    01F8 928A      ST	R8,-Y
    01F9 927A      ST	R7,-Y
    01FA 926A      ST	R6,-Y
    01FB 925A      ST	R5,-Y
    01FC 924A      ST	R4,-Y
    01FD 923A      ST	R3,-Y
    01FE 922A      ST	R2,-Y
    01FF 921A      ST	R1,-Y
    0200 920A      ST	R0,-Y
    0201 B60F      IN	R0,0x3F
    0202 920A      ST	R0,-Y
    0203 9508      RET
pop_lset:
    0204 9009      LD	R0,Y+
    0205 BE0F      OUT	0x3F,R0
    0206 9009      LD	R0,Y+
    0207 9019      LD	R1,Y+
    0208 9029      LD	R2,Y+
    0209 9039      LD	R3,Y+
    020A 9049      LD	R4,Y+
    020B 9059      LD	R5,Y+
    020C 9069      LD	R6,Y+
    020D 9079      LD	R7,Y+
    020E 9089      LD	R8,Y+
    020F 9099      LD	R9,Y+
    0210 9109      LD	R16,Y+
    0211 9119      LD	R17,Y+
    0212 9129      LD	R18,Y+
    0213 9139      LD	R19,Y+
    0214 9189      LD	R24,Y+
    0215 9199      LD	R25,Y+
    0216 91A9      LD	R26,Y+
    0217 91B9      LD	R27,Y+
    0218 91E9      LD	R30,Y+
    0219 91F9      LD	R31,Y+
    021A 9508      RET
lsl8:
    021B 2311      TST	R17
    021C F019      BEQ	0x0220
    021D 0F00      LSL	R16
    021E 951A      DEC	R17
    021F CFFB      RJMP	lsl8
    0220 9508      RET

⌨️ 快捷键说明

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