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

📄 test.lst

📁 ICC编译绝对可用M16的HD7279驱动测试程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 37E1      CPI	R30,0x71
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E0058  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: D:\软件\hd7279disp\no.c
(0001) /*------------------------------------------------------------
(0002) ;------------------------------------------------------------
(0003) ;		     HD7279 LIB  
(0004) ;		     V0.1c
(0005) ; 	  	     zhongwh
(0006) ;		Copyright 2003-2005 
(0007) ;   	Email: hfkj01@163.com
(0008) ;        mtel : 13708004895
(0009) ;		2005-9-28 15:38:52
(0010) ;    ICC-AVR application builder
(0011) ;-------------------------------------------------------------
(0012) ;-------------------------------------------------------------
(0013) ;   	Target : M16
(0014) ;		Crystal: 8Mhz					
(0015) ;-------------------------------------------------------------
(0016) ;-------------------------------------------------------------*/
(0017) #include <iom16v.h> 
(0018) #include <macros.h> 
(0019) //HD7279_DATA
(0020) #define	 HD7279_DATA_H   PORTB|=BIT(PB0)
(0021) #define	 HD7279_DATA_L   PORTB&=~BIT(PB0)
(0022) //HD7279_CLK
(0023) #define	 HD7279_CLK_H   PORTB|=BIT(PB1)
(0024) #define	 HD7279_CLK_L   PORTB&=~BIT(PB1)
(0025) //HD7279_CS
(0026) #define	 HD7279_CS_H    PORTB|=BIT(PB2)
(0027) #define	 HD7279_CS_L    PORTB&=~BIT(PB2)
(0028) //DDR
(0029) #define  HD7279_DDR_H   DDRB|=BIT(PB0)
(0030) #define  HD7279_DDR_L   DDRB&=~BIT(PB0)
(0031) //
(0032) #define	 HD7279_DATA    PINB
(0033) //*** 函数定义 *** 
(0034) void long_delay(void);                         // 长延时 
(0035) void short_delay(void);                         // 短暂延时 
(0036) void write7279(unsigned char, unsigned char);   // 写入到HD7279 
(0037) unsigned char read7279(unsigned char);      // 从HD7279读出 
(0038) void send_byte(unsigned char);         // 发送一个字节 
(0039) unsigned char receive_byte(void);      // 接收一个字节 
(0040) void delay_us(int);                                  // 微秒延时 
(0041) void dely_ms(unsigned int);                          // 毫秒延时 
(0042) 
(0043) //*** 变量及I/O口定义 *** 
(0044) unsigned char digit[8]; 
(0045) unsigned char j,k,key_number; 
(0046) unsigned int tmr; 
(0047) unsigned long wait_cnter; 
(0048) 
(0049) //***I/O*** 
(0050) void port_init(void) 
(0051) { 
(0052)  PORTB = 0x00; 
_port_init:
    004B 2422      CLR	R2
    004C BA28      OUT	0x18,R2
(0053)  DDRB  = 0x07; 
    004D E087      LDI	R24,7
    004E BB87      OUT	0x17,R24
(0054)  PORTC = 0x00; 
    004F BA25      OUT	0x15,R2
(0055)  DDRC  = 0x07; 
    0050 BB84      OUT	0x14,R24
(0056)   MCUCR = 0x02;
    0051 E082      LDI	R24,2
    0052 BF85      OUT	0x35,R24
(0057)  GICR  = 0x40;
    0053 E480      LDI	R24,0x40
    0054 BF8B      OUT	0x3B,R24
(0058)  TIMSK = 0x00; //timer interrupt sources
    0055 BE29      OUT	0x39,R2
(0059)  SEI(); //re-enable interrupts
    0056 9478      BSET	7
(0060) } 
    0057 9508      RET
(0061) 
(0062) //****** HD7279A 指令 ****** 
(0063) #define CMD_RESET 0xa4 
(0064) #define CMD_TEST 0xbf 
(0065) #define DECODE0 0x80 
(0066) #define DECODE1 0xc8 
(0067) #define CMD_READ 0x15 
(0068) #define UNDECODE 0x90 
(0069) #define RTL_CYCLE 0xa3 
(0070) #define RTR_CYCLE 0xa2 
(0071) #define RTL_UNCYL 0xa1 
(0072) #define RTR_UNCYL 0xa0 
(0073) #define ACTCTL 0x98 
(0074) #define SEGON 0xe0 
(0075) #define SEGOFF 0xc0 
(0076) #define BLINKCTL 0x88 
(0077) 
(0078) 
(0079) // 
(0080) main() 
(0081) {    
(0082)    port_init(); 
_main:
    0058 DFF2      RCALL	_port_init
    0059 C1BF      RJMP	0x0219
(0083)    while (1) 
(0084)    { 
(0085)       for (tmr=0;tmr<0x2000;tmr++);   // 上电延时 
    005A 2422      CLR	R2
    005B 2433      CLR	R3
    005C 92300065  STS	_tmr+1,R3
    005E 92200064  STS	_tmr,R2
    0060 C009      RJMP	0x006A
    0061 91800064  LDS	R24,_tmr
    0063 91900065  LDS	R25,_tmr+1
    0065 9601      ADIW	R24,1
    0066 93900065  STS	_tmr+1,R25
    0068 93800064  STS	_tmr,R24
    006A 91800064  LDS	R24,_tmr
    006C 91900065  LDS	R25,_tmr+1
    006E 3080      CPI	R24,0
    006F E2E0      LDI	R30,0x20
    0070 079E      CPC	R25,R30
    0071 F378      BCS	0x0061
(0086)       send_byte(CMD_RESET);         // 复位HD7279A 
    0072 EA04      LDI	R16,0xA4
    0073 D1BD      RCALL	_send_byte
(0087) 
(0088) //****************************************** 
(0089) //              测试指令演示 
(0090) //****************************************** 
(0091)       send_byte(CMD_TEST);            // 测试指令 
    0074 EB0F      LDI	R16,0xBF
    0075 D1BB      RCALL	_send_byte
(0092)       for (j=0;j<3;j++)               // 延时约3秒 
    0076 2422      CLR	R2
    0077 92200068  STS	_j,R2
    0079 C008      RJMP	0x0082
(0093)       { 
(0094)          dely_ms(100); 
    007A E604      LDI	R16,0x64
    007B E010      LDI	R17,0
    007C D210      RCALL	_dely_ms
    007D 91800068  LDS	R24,_j
    007F 5F8F      SUBI	R24,0xFF
    0080 93800068  STS	_j,R24
    0082 91800068  LDS	R24,_j
    0084 3083      CPI	R24,3
    0085 F3A0      BCS	0x007A
(0095)       } 
(0096)       send_byte(CMD_RESET);            // 清除显示 
    0086 EA04      LDI	R16,0xA4
    0087 D1A9      RCALL	_send_byte
(0097) 
(0098) //********************************************** 
(0099) //        闪烁指令及键盘接口测试 
(0100) // 将用户按键的键码显示出来, 如果10秒内无按键 
(0101) // 或按S0键即进入下一步演示 
(0102) //********************************************** 
(0103)       wait_cnter=0; 
    0088 E040      LDI	R20,0
    0089 E050      LDI	R21,0
    008A E060      LDI	R22,0
    008B E070      LDI	R23,0
    008C 93500061  STS	_wait_cnter+1,R21
    008E 93400060  STS	_wait_cnter,R20
    0090 93700063  STS	_wait_cnter+3,R23
    0092 93600062  STS	_wait_cnter+2,R22
(0104)       key_number=0xff; 
    0094 EF8F      LDI	R24,0xFF
    0095 93800066  STS	_key_number,R24
(0105)       write7279(BLINKCTL,0xfc);         // 第1、2两位设为闪烁显示 
    0097 EF2C      LDI	R18,0xFC
    0098 E808      LDI	R16,0x88
    0099 D183      RCALL	_write7279
(0106)       write7279(UNDECODE,0X08);         // 在第1位显示下划线'_' 
    009A E028      LDI	R18,0x8
    009B E900      LDI	R16,0x90
    009C D180      RCALL	_write7279
(0107)       write7279(UNDECODE+1,0x08);         // 在第2位显示下划线'_' 
    009D E028      LDI	R18,0x8
    009E E901      LDI	R16,0x91
    009F D17D      RCALL	_write7279
(0108)       do 
(0109)       { 
(0110)          if (!(PIND&0x04))                  // 如果有键按下 
    00A0 9982      SBIC	0x10,2
    00A1 C01C      RJMP	0x00BE
(0111)          { 
(0112)             key_number=read7279(CMD_READ);         // 读出键码 
    00A2 E105      LDI	R16,0x15
    00A3 D184      RCALL	_read7279
    00A4 93000066  STS	_key_number,R16
(0113)             write7279(DECODE1+1,key_number/16);      // 在第2位显示键码高8位 
    00A6 2F20      MOV	R18,R16
    00A7 9522      SWAP	R18
    00A8 702F      ANDI	R18,0xF
    00A9 EC09      LDI	R16,0xC9
    00AA D172      RCALL	_write7279
(0114)             write7279(DECODE1,key_number&0x0f);      // 在第1位显示键码低8位 
    00AB 91200066  LDS	R18,_key_number
    00AD 702F      ANDI	R18,0xF
    00AE EC08      LDI	R16,0xC8
    00AF D16D      RCALL	_write7279
(0115)             while (!(PIND&0x04));                     // 等待按键放开 
    00B0 9B82      SBIS	0x10,2
    00B1 CFFE      RJMP	0x00B0
(0116)             wait_cnter=0; 
    00B2 E040      LDI	R20,0
    00B3 E050      LDI	R21,0
    00B4 E060      LDI	R22,0
    00B5 E070      LDI	R23,0
    00B6 93500061  STS	_wait_cnter+1,R21
    00B8 93400060  STS	_wait_cnter,R20
    00BA 93700063  STS	_wait_cnter+3,R23
    00BC 93600062  STS	_wait_cnter+2,R22
(0117)          } 
(0118)          wait_cnter++; 
    00BE E041      LDI	R20,1
    00BF E050      LDI	R21,0
    00C0 E060      LDI	R22,0
    00C1 E070      LDI	R23,0
    00C2 90400062  LDS	R4,_wait_cnter+2
    00C4 90500063  LDS	R5,_wait_cnter+3
    00C6 90200060  LDS	R2,_wait_cnter
    00C8 90300061  LDS	R3,_wait_cnter+1
    00CA 0E24      ADD	R2,R20
    00CB 1E35      ADC	R3,R21
    00CC 1E46      ADC	R4,R22
    00CD 1E57      ADC	R5,R23
    00CE 92300061  STS	_wait_cnter+1,R3
    00D0 92200060  STS	_wait_cnter,R2
    00D2 92500063  STS	_wait_cnter+3,R5
    00D4 92400062  STS	_wait_cnter+2,R4
(0119)       } while (key_number!=0 && wait_cnter<0x30000);   // 如果按键为‘0’和超时则进入下一步演示 
    00D6 90200066  LDS	R2,_key_number
    00D8 2022      TST	R2
    00D9 F091      BEQ	0x00EC
    00DA E040      LDI	R20,0
    00DB E050      LDI	R21,0
    00DC E063      LDI	R22,3
    00DD E070      LDI	R23,0
    00DE 90400062  LDS	R4,_wait_cnter+2
    00E0 90500063  LDS	R5,_wait_cnter+3
    00E2 90200060  LDS	R2,_wait_cnter
    00E4 90300061  LDS	R3,_wait_cnter+1
    00E6 1624      CP	R2,R20
    00E7 0635      CPC	R3,R21
    00E8 0646      CPC	R4,R22
    00E9 0657      CPC	R5,R23
    00EA F408      BCC	0x00EC
    00EB CFB4      RJMP	0x00A0
(0120)       write7279(BLINKCTL,0xff);                  // 清除闪烁设置 
    00EC EF2F      LDI	R18,0xFF
    00ED E808      LDI	R16,0x88
    00EE D12E      RCALL	_write7279
(0121) 
(0122) //****************************************** 
(0123) //            快速计数演示 
(0124) //****************************************** 
(0125)      for (j=0;j<5;j++)               // 计数初始值为00000 
    00EF 2422      CLR	R2
    00F0 92200068  STS	_j,R2
    00F2 C018      RJMP	0x010B
(0126)       { 
(0127)          digit[j]=0; 
    00F3 E689      LDI	R24,0x69
    00F4 E090      LDI	R25,0
    00F5 91E00068  LDS	R30,_j
    00F7 27FF      CLR	R31
    00F8 0FE8      ADD	R30,R24
    00F9 1FF9      ADC	R31,R25
    00FA 2422      CLR	R2
    00FB 8220      STD	Z+0,R2
(0128)          write7279(DECODE0+j,digit[j]); 
    00FC 91E00068  LDS	R30,_j
    00FE 27FF      CLR	R31
    00FF 0FE8      ADD	R30,R24
    0100 1FF9      ADC	R31,R25
    0101 8120      LDD	R18,Z+0
    0102 91000068  LDS	R16,_j
    0104 5800      SUBI	R16,0x80
    0105 D117      RCALL	_write7279
    0106 91800068  LDS	R24,_j
    0108 5F8F      SUBI	R24,0xFF
    0109 93800068  STS	_j,R24
    010B 91800068  LDS	R24,_j
    010D 3085      CPI	R24,5
    010E F320      BCS	0x00F3
    010F C065      RJMP	0x0175
(0129)       } 

⌨️ 快捷键说明

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