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

📄 ds1203.lst

📁 1602液晶显示模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0019) #define CLK_1  PORTD|=(1<<1)
(0020) #define CLK_0  PORTD&=~(1<<1)
(0021) /******************************************************************************
(0022)                         定义数码管的选择端口
(0023) ********************************************************************************/
(0024) #define LED1  PORTD=0X07//LED2
(0025) #define LED2  PORTD=0X0B//LED1
(0026) #define LED3  PORTD=0X13//LED3
(0027) #define LED4  PORTD=0X23//LED4
(0028) #define LED0  PORTD=0X03//灭
(0029) 
(0030) /*******************************************************************************
(0031)                              单片机初始化程序
(0032) 
(0033) ******************************************************************************/
(0034) void port_init(void)
(0035) {
(0036)  PORTB = 0x00;
_port_init:
    012B 2422      CLR	R2
    012C BA28      OUT	0x18,R2
(0037)  DDRB  = 0x00;
    012D BA27      OUT	0x17,R2
(0038)  PORTC = 0x00; //m103 output only
    012E BA25      OUT	0x15,R2
(0039)  DDRC  = 0xff;
    012F EF8F      LDI	R24,0xFF
    0130 BB84      OUT	0x14,R24
(0040)  PORTD = 0x00;
    0131 BA22      OUT	0x12,R2
(0041)  DDRD  = 0xFF;
    0132 BB81      OUT	0x11,R24
    0133 9508      RET
(0042) }
(0043) 
(0044) //TIMER1 initialize - prescale:1
(0045) // WGM: 0) Normal, TOP=0xFFFF
(0046) // desired value: 1mSec
(0047) // actual value:  1.000mSec (0.0%)
(0048) void timer1_init(void)
(0049) {
(0050)  TCCR1B = 0x00; //stop
_timer1_init:
    0134 2422      CLR	R2
    0135 BC2E      OUT	0x2E,R2
(0051)  TCNT1H = 0xFC; //setup
    0136 EF8C      LDI	R24,0xFC
    0137 BD8D      OUT	0x2D,R24
(0052)  TCNT1L = 0x18;
    0138 E188      LDI	R24,0x18
    0139 BD8C      OUT	0x2C,R24
(0053)  OCR1AH = 0x03;
    013A E083      LDI	R24,3
    013B BD8B      OUT	0x2B,R24
(0054)  OCR1AL = 0xE8;
    013C EE88      LDI	R24,0xE8
    013D BD8A      OUT	0x2A,R24
(0055)  OCR1BH = 0x03;
    013E E083      LDI	R24,3
    013F BD89      OUT	0x29,R24
(0056)  OCR1BL = 0xE8;
    0140 EE88      LDI	R24,0xE8
    0141 BD88      OUT	0x28,R24
(0057)  ICR1H  = 0x03;
    0142 E083      LDI	R24,3
    0143 BD87      OUT	0x27,R24
(0058)  ICR1L  = 0xE8;
    0144 EE88      LDI	R24,0xE8
    0145 BD86      OUT	0x26,R24
(0059)  TCCR1A = 0x00;
    0146 BC2F      OUT	0x2F,R2
(0060)  TCCR1B = 0x01; //start Timer
    0147 E081      LDI	R24,1
    0148 BD8E      OUT	0x2E,R24
    0149 9508      RET
(0061) }
(0062) 
(0063) 
(0064) void init_devices(void)
(0065) {
(0066)  CLI(); //disable all interrupts
_init_devices:
    014A 94F8      BCLR	7
(0067)  port_init();
    014B DFDF      RCALL	_port_init
(0068)  timer1_init();
    014C DFE7      RCALL	_timer1_init
(0069)  MCUCR = 0x00;
    014D 2422      CLR	R2
    014E BE25      OUT	0x35,R2
(0070)  GICR  = 0x00;
    014F BE2B      OUT	0x3B,R2
(0071)  TIMSK = 0x04; 
    0150 E084      LDI	R24,4
    0151 BF89      OUT	0x39,R24
(0072)  SEI(); //re-enable interrupts
    0152 9478      BSET	7
    0153 9508      RET
_sendbeyt:
  i                    --> R20
  x                    --> R22
    0154 D0BE      RCALL	push_gset2
    0155 2F60      MOV	R22,R16
(0073) 
(0074) }
(0075) /*******************************************************************************
(0076)                              显示程序
(0077) 
(0078) ******************************************************************************/
(0079) /*发送显示一个字节*/
(0080) void sendbeyt(char x)
(0081) {
(0082)   int i;
(0083)   for(i=0;i<8;i++)
    0156 2744      CLR	R20
    0157 2755      CLR	R21
(0084)  {
(0085)     CLK_1;
    0158 9A91      SBI	0x12,1
(0086)    if(x&(1<<i))
    0159 E001      LDI	R16,1
    015A E010      LDI	R17,0
    015B 019A      MOVW	R18,R20
    015C D0FD      RCALL	lsl16
    015D 2E26      MOV	R2,R22
    015E 2433      CLR	R3
    015F 2220      AND	R2,R16
    0160 2231      AND	R3,R17
    0161 2022      TST	R2
    0162 F411      BNE	0x0165
    0163 2033      TST	R3
    0164 F011      BEQ	0x0167
(0087)       DATA_1;  
    0165 9A90      SBI	0x12,0
    0166 C001      RJMP	0x0168
(0088)    else 
(0089)      DATA_0;
    0167 9890      CBI	0x12,0
(0090)   CLK_0;
    0168 9891      CBI	0x12,1
    0169 5F4F      SUBI	R20,0xFF
    016A 4F5F      SBCI	R21,0xFF
    016B 3048      CPI	R20,0x8
    016C E0E0      LDI	R30,0
    016D 075E      CPC	R21,R30
    016E F34C      BLT	0x0158
(0091)  }
(0092)   CLK_1;
    016F 9A91      SBI	0x12,1
    0170 D096      RCALL	pop_gset2
    0171 9508      RET
(0093) }
(0094) 
(0095) /* 发送显示4字节*/
(0096) void sendFOURbeyt()
(0097) { LED3;
_sendFOURbeyt:
    0172 E183      LDI	R24,0x13
    0173 BB82      OUT	0x12,R24
(0098)   sendbeyt(SEG_table[Sec_buffer[0]]);
    0174 E286      LDI	R24,0x26
    0175 E090      LDI	R25,0
    0176 91E0006E  LDS	R30,Sec_buffer
    0178 27FF      CLR	R31
    0179 0FE8      ADD	R30,R24
    017A 1FF9      ADC	R31,R25
    017B 9104      LPM	R16,0(Z)
    017C DFD7      RCALL	_sendbeyt
(0099)   delay_nus(200);
    017D EC08      LDI	R16,0xC8
    017E E010      LDI	R17,0
    017F DF87      RCALL	_delay_nus
(0100)     LED4;
    0180 E283      LDI	R24,0x23
    0181 BB82      OUT	0x12,R24
(0101) 	sendbeyt(SEG_table[Sec_buffer[1]]);
    0182 E286      LDI	R24,0x26
    0183 E090      LDI	R25,0
    0184 91E0006F  LDS	R30,Sec_buffer+1
    0186 27FF      CLR	R31
    0187 0FE8      ADD	R30,R24
    0188 1FF9      ADC	R31,R25
    0189 9104      LPM	R16,0(Z)
    018A DFC9      RCALL	_sendbeyt
(0102)      delay_nus(200);
    018B EC08      LDI	R16,0xC8
    018C E010      LDI	R17,0
    018D DF79      RCALL	_delay_nus
(0103) 	LED1;
    018E E087      LDI	R24,7
    018F BB82      OUT	0x12,R24
(0104)     sendbeyt(SEG_table[Min_buffer[0]]);
    0190 E286      LDI	R24,0x26
    0191 E090      LDI	R25,0
    0192 91E00072  LDS	R30,Min_buffer
    0194 27FF      CLR	R31
    0195 0FE8      ADD	R30,R24
    0196 1FF9      ADC	R31,R25
    0197 9104      LPM	R16,0(Z)
    0198 DFBB      RCALL	_sendbeyt
(0105)     delay_nus(200);
    0199 EC08      LDI	R16,0xC8
    019A E010      LDI	R17,0
    019B DF6B      RCALL	_delay_nus
(0106)     LED2;
    019C E08B      LDI	R24,0xB
    019D BB82      OUT	0x12,R24
(0107) 	sendbeyt(SEG_table[Min_buffer[1]]);
    019E E286      LDI	R24,0x26
    019F E090      LDI	R25,0
    01A0 91E00073  LDS	R30,Min_buffer+1
    01A2 27FF      CLR	R31
    01A3 0FE8      ADD	R30,R24
    01A4 1FF9      ADC	R31,R25
    01A5 9104      LPM	R16,0(Z)
    01A6 DFAD      RCALL	_sendbeyt
(0108)     delay_nus(200);
    01A7 EC08      LDI	R16,0xC8
    01A8 E010      LDI	R17,0
    01A9 DF5D      RCALL	_delay_nus
(0109)   LED0;
    01AA E083      LDI	R24,3
    01AB BB82      OUT	0x12,R24
(0110)    delay_nus(200);
    01AC EC08      LDI	R16,0xC8
    01AD E010      LDI	R17,0
    01AE DF58      RCALL	_delay_nus
    01AF 9508      RET
_timer1_ovf_isr:
    01B0 D07B      RCALL	push_lset
(0111)  }
(0112) /*******************************************************************************
(0113)                              中断送显程序
(0114) 
(0115) ******************************************************************************/ 
(0116) #pragma interrupt_handler timer1_ovf_isr:9
(0117) void timer1_ovf_isr(void)
(0118) {
(0119)  sendFOURbeyt();
    01B1 DFC0      RCALL	_sendFOURbeyt
(0120)  //TIMER1 has overflowed
(0121)  TCNT1H = 0xFC; //reload counter high value
    01B2 EF8C      LDI	R24,0xFC
    01B3 BD8D      OUT	0x2D,R24
(0122)  TCNT1L = 0x18; //reload counter low value
    01B4 E188      LDI	R24,0x18
    01B5 BD8C      OUT	0x2C,R24
    01B6 D08C      RCALL	pop_lset
    01B7 9518      RETI
_BINtoArray:
  temp                 --> R20
  i                    --> R22
  count                --> R10
  p                    --> R12
    01B8 D056      RCALL	push_gset4
    01B9 0159      MOVW	R10,R18
    01BA 0168      MOVW	R12,R16
(0123) }
(0124) /******************************************************************************
(0125)                         BCD分解为数组元素
(0126) ***************************************************************************/
(0127) void BINtoArray(char *p,unsigned int count)
(0128)  {   unsigned char i,temp;
(0129)      CLI();
    01BB 94F8      BCLR	7
(0130) 	 for(i=0;i<4;i++)
    01BC 2766      CLR	R22
    01BD C010      RJMP	0x01CE
(0131) 	 {
(0132) 	   temp=count%10;
    01BE E02A      LDI	R18,0xA
    01BF E030      LDI	R19,0
    01C0 0185      MOVW	R16,R10
    01C1 D029      RCALL	mod16u
    01C2 2F40      MOV	R20,R16
(0133) 	   *p=temp;
    01C3 01F6      MOVW	R30,R12
    01C4 8340      STD	Z+0,R20
(0134) 	   count=count/10;
    01C5 E02A      LDI	R18,0xA
    01C6 E030      LDI	R19,0
    01C7 0185      MOVW	R16,R10
    01C8 D024      RCALL	div16u
    01C9 0158      MOVW	R10,R16
(0135)            p++;
    01CA 01C6      MOVW	R24,R12
    01CB 9601      ADIW	R24,1
    01CC 016C      MOVW	R12,R24
    01CD 9563      INC	R22
    01CE 3064      CPI	R22,4
    01CF F370      BCS	0x01BE
(0136) 	  }
(0137)     SEI();
    01D0 9478      BSET	7
    01D1 D037      RCALL	pop_gset4
    01D2 9508      RET
(0138)  } 
(0139) 
(0140) void main()
(0141) {char CO=0;
_main:
  CO                   --> R20
    01D3 2744      CLR	R20
(0142) init_devices();
    01D4 DF75      RCALL	_init_devices
(0143) DS1302_WriteTime();   //时间校准
    01D5 DF1A      RCALL	_DS1302_WriteTime
    01D6 C012      RJMP	0x01E9
(0144) while(1)
(0145)  { 
(0146)   DS1302_ReadTime();
    01D7 DEE7      RCALL	_DS1302_ReadTime
(0147)   BINtoArray(Sec_buffer,second);
    01D8 91200082  LDS	R18,second
    01DA 91300083  LDS	R19,second+1
    01DC E60E      LDI	R16,0x6E
    01DD E010      LDI	R17,0
    01DE DFD9      RCALL	_BINtoArray
(0148)   BINtoArray(Min_buffer,date);
    01DF 9120007C  LDS	R18,date
    01E1 9130007D  LDS	R19,date+1
    01E3 E702      LDI	R16,0x72
    01E4 E010      LDI	R17,0
    01E5 DFD2      RCALL	_BINtoArray
(0149)   delay_nus(1);
FILE: <library>
    01E6 E001      LDI	R16,1
    01E7 E010      LDI	R17,0
    01E8 DF1E      RCALL	_delay_nus
    01E9 CFED      RJMP	0x01D7
    01EA 9508      RET
mod16u:
    01EB 9468      BSET	6
    01EC C001      RJMP	xdiv16u
div16u:
    01ED 94E8      BCLR	6
xdiv16u:
    01EE 92EA      ST	R14,-Y
    01EF 92FA      ST	R15,-Y
    01F0 938A      ST	R24,-Y
    01F1 24EE      CLR	R14
    01F2 24FF      CLR	R15
    01F3 E180      LDI	R24,0x10
    01F4 0F00      LSL	R16
    01F5 1F11      ROL	R17
    01F6 1CEE      ROL	R14
    01F7 1CFF      ROL	R15
    01F8 16E2      CP	R14,R18
    01F9 06F3      CPC	R15,R19
    01FA F018      BCS	0x01FE
    01FB 1AE2      SUB	R14,R18
    01FC 0AF3      SBC	R15,R19
    01FD 9503      INC	R16
    01FE 958A      DEC	R24
    01FF F7A1      BNE	0x01F4
    0200 F416      BRTC	0x0203
    0201 2D0E      MOV	R16,R14
    0202 2D1F      MOV	R17,R15
    0203 9189      LD	R24,Y+
    0204 90F9      LD	R15,Y+
    0205 90E9      LD	R14,Y+
    0206 9508      RET
pop_gset2:
    0207 E0E2      LDI	R30,2
    0208 C010      RJMP	pop
pop_gset4:
    0209 E0E8      LDI	R30,0x8
    020A C00E      RJMP	pop
pop_gset5:
    020B 27EE      CLR	R30
    020C C00C      RJMP	pop
push_gset5:
    020D 92FA      ST	R15,-Y
    020E 92EA      ST	R14,-Y
push_gset4:
    020F 92DA      ST	R13,-Y
    0210 92CA      ST	R12,-Y
push_gset3:
    0211 92BA      ST	R11,-Y
    0212 92AA      ST	R10,-Y
push_gset2:
    0213 937A      ST	R23,-Y
    0214 936A      ST	R22,-Y
push_gset1:
    0215 935A      ST	R21,-Y
    0216 934A      ST	R20,-Y
    0217 9508      RET
pop_gset1:
    0218 E0E1      LDI	R30,1
pop:
    0219 9149      LD	R20,Y+
    021A 9159      LD	R21,Y+
    021B FDE0      SBRC	R30,0
    021C 9508      RET
    021D 9169      LD	R22,Y+
    021E 9179      LD	R23,Y+
    021F FDE1      SBRC	R30,1
    0220 9508      RET
    0221 90A9      LD	R10,Y+
    0222 90B9      LD	R11,Y+
    0223 FDE2      SBRC	R30,2
    0224 9508      RET
    0225 90C9      LD	R12,Y+
    0226 90D9      LD	R13,Y+
    0227 FDE3      SBRC	R30,3
    0228 9508      RET
    0229 90E9      LD	R14,Y+
    022A 90F9      LD	R15,Y+
    022B 9508      RET
push_lset:
    022C 93FA      ST	R31,-Y
    022D 93EA      ST	R30,-Y
    022E 93BA      ST	R27,-Y
    022F 93AA      ST	R26,-Y
    0230 939A      ST	R25,-Y
    0231 938A      ST	R24,-Y
    0232 933A      ST	R19,-Y
    0233 932A      ST	R18,-Y
    0234 931A      ST	R17,-Y
    0235 930A      ST	R16,-Y
    0236 929A      ST	R9,-Y
    0237 928A      ST	R8,-Y
    0238 927A      ST	R7,-Y
    0239 926A      ST	R6,-Y
    023A 925A      ST	R5,-Y
    023B 924A      ST	R4,-Y
    023C 923A      ST	R3,-Y
    023D 922A      ST	R2,-Y
    023E 921A      ST	R1,-Y
    023F 920A      ST	R0,-Y
    0240 B60F      IN	R0,0x3F
    0241 920A      ST	R0,-Y
    0242 9508      RET
pop_lset:
    0243 9009      LD	R0,Y+
    0244 BE0F      OUT	0x3F,R0
    0245 9009      LD	R0,Y+
    0246 9019      LD	R1,Y+
    0247 9029      LD	R2,Y+
    0248 9039      LD	R3,Y+
    0249 9049      LD	R4,Y+
    024A 9059      LD	R5,Y+
    024B 9069      LD	R6,Y+
    024C 9079      LD	R7,Y+
    024D 9089      LD	R8,Y+
    024E 9099      LD	R9,Y+
    024F 9109      LD	R16,Y+
    0250 9119      LD	R17,Y+
    0251 9129      LD	R18,Y+
    0252 9139      LD	R19,Y+
    0253 9189      LD	R24,Y+
    0254 9199      LD	R25,Y+
    0255 91A9      LD	R26,Y+
    0256 91B9      LD	R27,Y+
    0257 91E9      LD	R30,Y+
    0258 91F9      LD	R31,Y+
    0259 9508      RET
lsl16:
    025A 2322      TST	R18
    025B F021      BEQ	0x0260
    025C 0F00      LSL	R16
    025D 1F11      ROL	R17
    025E 952A      DEC	R18
    025F CFFA      RJMP	lsl16
    0260 9508      RET
lsl8:
    0261 2311      TST	R17
    0262 F019      BEQ	0x0266
    0263 0F00      LSL	R16
    0264 951A      DEC	R17
    0265 CFFB      RJMP	lsl8
    0266 9508      RET

⌨️ 快捷键说明

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