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

📄 display_dhtxx.lst

📁 温湿度检测仪一套
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    001E E5CF      LDI	R28,0x5F
    001F E0D4      LDI	R29,4
    0020 BFCD      OUT	0x3D,R28
    0021 BFDE      OUT	0x3E,R29
    0022 51C0      SUBI	R28,0x10
    0023 40D0      SBCI	R29,0
    0024 EA0A      LDI	R16,0xAA
    0025 8308      STD	Y+0,R16
    0026 2400      CLR	R0
    0027 E6E6      LDI	R30,0x66
    0028 E0F0      LDI	R31,0
    0029 E010      LDI	R17,0
    002A 37EA      CPI	R30,0x7A
    002B 07F1      CPC	R31,R17
    002C F011      BEQ	0x002F
    002D 9201      ST	R0,Z+
    002E CFFB      RJMP	0x002A
    002F 8300      STD	Z+0,R16
    0030 E3E5      LDI	R30,0x35
    0031 E0F0      LDI	R31,0
    0032 E6A0      LDI	R26,0x60
    0033 E0B0      LDI	R27,0
    0034 E010      LDI	R17,0
    0035 33EB      CPI	R30,0x3B
    0036 07F1      CPC	R31,R17
    0037 F021      BEQ	0x003C
    0038 95C8      LPM
    0039 9631      ADIW	R30,1
    003A 920D      ST	R0,X+
    003B CFF9      RJMP	0x0035
    003C D284      RCALL	_main
_exit:
    003D CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
(0001) //ICC-AVR application builder : 2008-4-28 9:22:37
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) /*************************************************************************
(0005) 程序:6_LED
(0006) 功能:湿度传感器显示板(六个数码管显示)
(0007) 公司:奥松电子
(0008) 芯片:M8
(0009) 晶振:内部 2.0000Mhz
(0010) 创建人:木工
(0011) 创建时间:08.05.05
(0012) 修改人:
(0013) 修改时间:
(0014) 修改原因:
(0015) **************************************************************************/
(0016) 
(0017) #include <iom8v.h>
(0018) #include <macros.h>
(0019) #include <eeprom.h> 
(0020) #include "mu_io.h"
(0021) typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable 	  无符号8位整型变量  */
(0022) typedef signed   char  S8;       /* defined for signed 8-bits integer variable		  有符号8位整型变量  */
(0023) typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable 	  无符号16位整型变量 */
(0024) typedef signed   int   S16;      /* defined for signed 16-bits integer variable 	  有符号16位整型变量 */
(0025) typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable 	  无符号32位整型变量 */
(0026) typedef signed   long  S32;      /* defined for signed 32-bits integer variable 	  有符号32位整型变量 */
(0027) typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
(0028) typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
(0029) 
(0030) /**************************************************************************
(0031)                        数码管显示赋值区
(0032) ***************************************************************************/
(0033) #define		_a		0x01
(0034) #define		_b		0x02
(0035) #define		_c		0x04
(0036) #define		_d		0x08
(0037) #define		_e		0x10
(0038) #define		_f		0x20
(0039) #define		_g		0x40   
(0040) #define		_dp		0x80
(0041) 
(0042) #define		num0		_g                     //灭的数码管
(0043) #define		num1		_a|_d|_e|_f|_g
(0044) #define		num2		_c|_f
(0045) #define		num3		_e|_f
(0046) #define		num4		_a|_d|_e
(0047) #define		num5		_b|_e
(0048) #define		num6		_b
(0049) #define		num7		_d|_e|_f|_g
(0050) #define		num8		0x00
(0051) #define		num9		_e
(0052) #define     num_        _a|_b|_c|_d|_e|_f|_dp
(0053) #define     num_11      _a|_d|_e|_f
(0054) #define     num_E       _b|_c|_dp              //13
(0055) #define     num_r       _a|_b|_c|_d|_f|_dp     //14
(0056) #define     num_N       _a|_b|_c|_d|_e|_f|_g|_dp    //15
(0057) 
(0058) 
(0059) 
(0060) 
(0061) 
(0062) #define     dc2         0x04
(0063) #define     dc3         0x08
(0064) #define     dd          0x03                  //数码管控制端口
(0065) #define     dd4         0x10
(0066) #define     dd5         0x20
(0067) #define     dd6         0x40
(0068) #define     dd7         0x80
(0069) #define     dd2         0x04
(0070) #define     dd3         0x08
(0071) 
(0072) #define     led1        dc3                  //使用时要先将数码管全熄灭掉
(0073) #define     led2        dd5
(0074) #define     led3        dd4
(0075) #define     led4        dd7
(0076) #define     led5        dd6
(0077) #define     led6        dd2
(0078) /**************************************************************************
(0079)                     I/O空间定义
(0080) ***************************************************************************/
(0081) // B0_IN	DDRB &= ~(1 << PB0)		/*设置输入*/
(0082) // B0_OUT	DDRB |= (1 << PB0)		/*设置输出*/
(0083) // B0_CLR	PORTB &= ~(1 << PB0)	/*置低电平*/
(0084) // B0_SET	PORTB |= (1 << PB0)		/*置高电平*/
(0085) // B0_R	    PINB & (1 <<PB0)		/*读了电平*/
(0086) /**************************************************************************
(0087)                     通讯I/O空间定义
(0088) ***************************************************************************/
(0089)  #define       COM_IN          C5_IN  
(0090)  #define       COM_OUT         C5_OUT
(0091)  #define       COM_CLR         C5_CLR
(0092)  #define       COM_SET         C5_SET
(0093)  #define       COM_R           C5_R
(0094)  
(0095) /**************************************************************************
(0096)                     全局变量定义区
(0097) ***************************************************************************/
(0098) U8       i;
(0099) //U16 
(0100) //RM      为临时变量 在RC测电阻中使用      
(0101) const U8 LED[ ]={num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,num_,num_11,num_E,num_r,num_N };       //数码管笔形码数组
(0102)       U8 PLAY[6]={0,0,0,0,0,0};                                             //这个数组放在SARM里
(0103)       U8    U8FLAG,k;
(0104)       U8    U8count,U8temp;
(0105)       U8    U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
(0106)       U8    U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
(0107)       U8    U8comdata;
(0108)       U16   ReceiveHighByte;
(0109)       U16   ReceiveLowByte;
(0110) /**************************************************************************
(0111) ***************************************************************************/
(0112) void port_init(void)
(0113) {
(0114)  PORTB = 0x00;
_port_init:
    003E 2422      CLR	R2
    003F BA28      OUT	0x18,R2
(0115)  DDRB  = 0xFF;
    0040 EF8F      LDI	R24,0xFF
    0041 BB87      OUT	0x17,R24
(0116)  PORTC = 0x03;                      //m103 output only
    0042 E083      LDI	R24,3
    0043 BB85      OUT	0x15,R24
(0117)  DDRC  = 0x0C;
    0044 E08C      LDI	R24,0xC
    0045 BB84      OUT	0x14,R24
(0118)  PORTD = 0x00;
    0046 BA22      OUT	0x12,R2
(0119)  DDRD  = 0xF0;
    0047 EF80      LDI	R24,0xF0
    0048 BB81      OUT	0x11,R24
    0049 9508      RET
(0120) }
(0121) 
(0122) void watchdog_init(void)
(0123) {
_watchdog_init:
    004A 9508      RET
(0124)   //WDR();        //this prevents a timout on enabling
(0125)   //WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
(0126) }
(0127) 
(0128) 
(0129) void init_devices(void) 
(0130) {
(0131) unsigned char i;
(0132) 		   CLI();                       //disable all interrupts
_init_devices:
  i                    --> Y+1
    004B 94F8      BCLR	7
(0133)      port_init();
    004C DFF1      RCALL	_port_init
(0134)  watchdog_init();
    004D DFFC      RCALL	_watchdog_init
(0135)  
(0136)     MCUCR = 0x03;
    004E E083      LDI	R24,3
    004F BF85      OUT	0x35,R24
(0137)     GICR  = 0x00;                //关外部中断0
    0050 2422      CLR	R2
    0051 BE2B      OUT	0x3B,R2
(0138)     TIMSK = 0x00;                //关定时器1中断
    0052 BE29      OUT	0x39,R2
(0139)            SEI();                //re-enable interrupts
    0053 9478      BSET	7
    0054 9508      RET
(0140)                            
(0141) }
(0142) 
(0143) void Delay(unsigned int i)
(0144) {
(0145) 	while(i--);
_Delay:
  i                    --> R16
    0055 D2DB      RCALL	0x0331
    0056 F7F1      BNE	0x0055
    0057 2033      TST	R3
    0058 F7E1      BNE	0x0055
    0059 9508      RET
_DelayNS:
  i                    --> R20
  dly                  --> R16
    005A D2A6      RCALL	push_gset1
(0146) }
(0147) void DelayNS (U16 dly)                     //延时子程序    1.010ms
(0148) {
(0149) 	U16 i;
(0150) 	for ( ; dly>0; dly--)WDR();
    005B C003      RJMP	0x005F
    005C 95A8      WDR
    005D 5001      SUBI	R16,1
    005E 4010      SBCI	R17,0
    005F 3000      CPI	R16,0
    0060 0701      CPC	R16,R17
    0061 F7D1      BNE	0x005C
(0151) 		for (i=0; i<1131; i++);           //1131
    0062 2744      CLR	R20
    0063 2755      CLR	R21
    0064 C002      RJMP	0x0067
    0065 5F4F      SUBI	R20,0xFF
    0066 4F5F      SBCI	R21,0xFF
    0067 364B      CPI	R20,0x6B
    0068 E0E4      LDI	R30,4
    0069 075E      CPC	R21,R30
    006A F3D0      BCS	0x0065
    006B D298      RCALL	pop_gset1
    006C 9508      RET
_DelaymS:
  i                    --> R20
  dly                  --> R16
    006D D293      RCALL	push_gset1
(0152) }
(0153) void DelaymS (U16 dly)                     //延时子程序    1.010ms
(0154) {
(0155) 	U16 i;
(0156) 	for ( ; dly>0; dly--)
    006E C00C      RJMP	0x007B
(0157) 	{
(0158) 	    WDR();
    006F 95A8      WDR
(0159) 		for (i=0; i<280; i++);           //1131
    0070 2744      CLR	R20
    0071 2755      CLR	R21
    0072 C002      RJMP	0x0075
    0073 5F4F      SUBI	R20,0xFF
    0074 4F5F      SBCI	R21,0xFF
    0075 3148      CPI	R20,0x18
    0076 E0E1      LDI	R30,1
    0077 075E      CPC	R21,R30
    0078 F3D0      BCS	0x0073
    0079 5001      SUBI	R16,1
    007A 4010      SBCI	R17,0
    007B 3000      CPI	R16,0
    007C 0701      CPC	R16,R17
    007D F789      BNE	0x006F
    007E D285      RCALL	pop_gset1
    007F 9508      RET
_Display:
    0080 D278      RCALL	push_gset5
(0160) 	}
(0161) }
(0162) void Display (void)
(0163) {
(0164) 
(0165) for(i=0;i<=5;i++)
    0081 2422      CLR	R2
    0082 92200079  STS	i,R2
    0084 C07F      RJMP	0x0104
(0166)  {
(0167)  DDRD |= 0XFC;
    0085 B381      IN	R24,0x11
    0086 6F8C      ORI	R24,0xFC
    0087 BB81      OUT	0x11,R24
(0168)  PORTD&=0x03;
    0088 B382      IN	R24,0x12
    0089 7083      ANDI	R24,3
    008A BB82      OUT	0x12,R24
(0169)  DDRC |= 0X0C;
    008B B384      IN	R24,0x14
    008C 608C      ORI	R24,0xC
    008D BB84      OUT	0x14,R24
(0170)  PORTC&=0xF3;
    008E B385      IN	R24,0x15
    008F 7F83      ANDI	R24,0xF3
    0090 BB85      OUT	0x15,R24
(0171)  Delay(1);
    0091 E001      LDI	R16,1
    0092 E010      LDI	R17,0
    0093 DFC1      RCALL	_Delay
(0172)  
(0173)  switch(i)
    0094 91400079  LDS	R20,i
    0096 2755      CLR	R21
    0097 3040      CPI	R20,0
    0098 0745      CPC	R20,R21
    0099 F0A9      BEQ	0x00AF
    009A 3041      CPI	R20,1
    009B E0E0      LDI	R30,0
    009C 075E      CPC	R21,R30
    009D F099      BEQ	0x00B1
    009E 3042      CPI	R20,2
    009F E0E0      LDI	R30,0
    00A0 075E      CPC	R21,R30
    00A1 F089      BEQ	0x00B3
    00A2 3043      CPI	R20,3
    00A3 E0E0      LDI	R30,0
    00A4 075E      CPC	R21,R30
    00A5 F079      BEQ	0x00B5
    00A6 3044      CPI	R20,4
    00A7 E0E0      LDI	R30,0
    00A8 075E      CPC	R21,R30
    00A9 F069      BEQ	0x00B7
    00AA 3045      CPI	R20,5
    00AB E0E0      LDI	R30,0
    00AC 075E      CPC	R21,R30
    00AD F059      BEQ	0x00B9
    00AE C00B      RJMP	0x00BA
(0174)  {
(0175)  case 0: PORTC|=led1;break;
    00AF 9AAB      SBI	0x15,3
    00B0 C009      RJMP	0x00BA
(0176)  case 1: PORTD|=led2;break;
    00B1 9A95      SBI	0x12,5
    00B2 C007      RJMP	0x00BA
(0177)  case 2: PORTD|=led3;break;
    00B3 9A94      SBI	0x12,4
    00B4 C005      RJMP	0x00BA
(0178)  case 3: PORTD|=led4;break;
    00B5 9A97      SBI	0x12,7
    00B6 C003      RJMP	0x00BA
(0179)  case 4: PORTD|=led5;break;
    00B7 9A96      SBI	0x12,6
    00B8 C001      RJMP	0x00BA
(0180)  case 5: PORTD|=led6;break;
    00B9 9A92      SBI	0x12,2
(0181)  default :break;
(0182)  }
(0183)  PORTB=LED[PLAY[i]] ;         //送数据 
    00BA E680      LDI	R24,0x60
    00BB E090      LDI	R25,0
    00BC 91E00079  LDS	R30,i
    00BE 27FF      CLR	R31
    00BF 0FE8      ADD	R30,R24
    00C0 1FF9      ADC	R31,R25
    00C1 81E0      LDD	R30,Z+0
    00C2 27FF      CLR	R31
    00C3 E286      LDI	R24,0x26
    00C4 E090      LDI	R25,0
    00C5 0FE8      ADD	R30,R24
    00C6 1FF9      ADC	R31,R25
    00C7 91E4      LPM	R30,0(Z)
    00C8 BBE8      OUT	0x18,R30
(0184)  if((i==0)|(i==2)|(i==3)|(i==5))
    00C9 90200079  LDS	R2,i
    00CB 2022      TST	R2
    00CC F421      BNE	0x00D1
    00CD E081      LDI	R24,1
    00CE E090      LDI	R25,0
    00CF 017C      MOVW	R14,R24
    00D0 C002      RJMP	0x00D3
    00D1 24EE      CLR	R14
    00D2 24FF      CLR	R15
    00D3 91800079  LDS	R24,i
    00D5 3082      CPI	R24,2
    00D6 F421      BNE	0x00DB
    00D7 E081      LDI	R24,1
    00D8 E090      LDI	R25,0
    00D9 016C      MOVW	R12,R24
    00DA C002      RJMP	0x00DD
    00DB 24CC      CLR	R12

⌨️ 快捷键说明

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