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

📄 icc17-1.lst

📁 手把手教你学AVR单片机C程序设计实验程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    092D 1DFB      ADC	R31,R11
    092E 9144      LPM	R20,0(Z)
(0107) if(fb)dx=255-dx;				
    092F 20CC      TST	R12
    0930 F029      BEQ	0x0936
    0931 2E24      MOV	R2,R20
    0932 2433      CLR	R3
    0933 EF4F      LDI	R20,0xFF
    0934 1942      SUB	R20,R2
    0935 0953      SBC	R21,R3
(0108) lw(xx*8+i,yy,dx);				
    0936 8348      STD	Y+0,R20
    0937 852D      LDD	R18,Y+13
    0938 E088      LDI	R24,0x8
    0939 840B      LDD	R0,Y+11
    093A 9D80      MUL	R24,R0
    093B 2D00      MOV	R16,R0
    093C 0F06      ADD	R16,R22
    093D DF65      RCALL	_lw
(0109) dx=p[(2*i+1)+n*32];			
    093E E280      LDI	R24,0x20
    093F 9D8E      MUL	R24,R14
    0940 0110      MOVW	R2,R0
    0941 E082      LDI	R24,2
    0942 9F86      MUL	R24,R22
    0943 01F0      MOVW	R30,R0
    0944 9631      ADIW	R30,1
    0945 0DE2      ADD	R30,R2
    0946 1DF3      ADC	R31,R3
    0947 0DEA      ADD	R30,R10
    0948 1DFB      ADC	R31,R11
    0949 9144      LPM	R20,0(Z)
(0110) if(fb)dx=255-dx;			
    094A 20CC      TST	R12
    094B F029      BEQ	0x0951
    094C 2E24      MOV	R2,R20
    094D 2433      CLR	R3
    094E EF4F      LDI	R20,0xFF
    094F 1942      SUB	R20,R2
    0950 0953      SBC	R21,R3
(0111) lw(xx*8+i,yy+1,dx);			
    0951 8348      STD	Y+0,R20
    0952 852D      LDD	R18,Y+13
    0953 5F2F      SUBI	R18,0xFF
    0954 E088      LDI	R24,0x8
    0955 840B      LDD	R0,Y+11
    0956 9D80      MUL	R24,R0
    0957 2D00      MOV	R16,R0
    0958 0F06      ADD	R16,R22
    0959 DF49      RCALL	_lw
    095A 9563      INC	R22
    095B 3160      CPI	R22,0x10
    095C F408      BCC	0x095E
    095D CFC6      RJMP	0x0924
    095E 9621      ADIW	R28,1
    095F 940E1292  CALL	pop_gset5
    0961 9624      ADIW	R28,4
    0962 9508      RET
_display_chinese:
  loop                 --> R20
    0963 940E129D  CALL	push_gset1
    0965 9726      SBIW	R28,6
(0112) }								
(0113) }	
(0114) /******************************************/
(0115) 
(0116) void display_chinese(void)
(0117) {
(0118) uchar loop;
(0119) for(loop=0;loop<8;loop++)				
    0966 2744      CLR	R20
    0967 C00D      RJMP	0x0975
(0120) 	{display_hz(2*loop,0,loop,1,chinese);}		
    0968 E28C      LDI	R24,0x2C
    0969 E09C      LDI	R25,0xC
    096A 839D      STD	Y+5,R25
    096B 838C      STD	Y+4,R24
    096C E081      LDI	R24,1
    096D 838A      STD	Y+2,R24
    096E 8348      STD	Y+0,R20
    096F 2722      CLR	R18
    0970 E082      LDI	R24,2
    0971 9F84      MUL	R24,R20
    0972 2D00      MOV	R16,R0
    0973 DFA5      RCALL	_display_hz
    0974 9543      INC	R20
    0975 3048      CPI	R20,0x8
    0976 F388      BCS	0x0968
(0121) /****************************************/
(0122) for(loop=0;loop<8;loop++)				
    0977 2744      CLR	R20
    0978 C00F      RJMP	0x0988
(0123) 	{display_hz(2*loop,2,loop+8,1,chinese);}	
    0979 E28C      LDI	R24,0x2C
    097A E09C      LDI	R25,0xC
    097B 839D      STD	Y+5,R25
    097C 838C      STD	Y+4,R24
    097D E081      LDI	R24,1
    097E 838A      STD	Y+2,R24
    097F 2F84      MOV	R24,R20
    0980 5F88      SUBI	R24,0xF8
    0981 8388      STD	Y+0,R24
    0982 E022      LDI	R18,2
    0983 E082      LDI	R24,2
    0984 9F84      MUL	R24,R20
    0985 2D00      MOV	R16,R0
    0986 DF92      RCALL	_display_hz
    0987 9543      INC	R20
    0988 3048      CPI	R20,0x8
    0989 F378      BCS	0x0979
(0124) 	
(0125) /**************************************/
(0126) for(loop=0;loop<8;loop++)				
    098A 2744      CLR	R20
    098B C00F      RJMP	0x099B
(0127) 	{display_hz(2*loop,4,loop+16,1,chinese);}
    098C E28C      LDI	R24,0x2C
    098D E09C      LDI	R25,0xC
    098E 839D      STD	Y+5,R25
    098F 838C      STD	Y+4,R24
    0990 E081      LDI	R24,1
    0991 838A      STD	Y+2,R24
    0992 2F84      MOV	R24,R20
    0993 5F80      SUBI	R24,0xF0
    0994 8388      STD	Y+0,R24
    0995 E024      LDI	R18,4
    0996 E082      LDI	R24,2
    0997 9F84      MUL	R24,R20
    0998 2D00      MOV	R16,R0
    0999 DF7F      RCALL	_display_hz
    099A 9543      INC	R20
    099B 3048      CPI	R20,0x8
    099C F378      BCS	0x098C
(0128) /*******************************************/
(0129) for(loop=0;loop<8;loop++)				
    099D 2744      CLR	R20
    099E C00F      RJMP	0x09AE
(0130) 	{display_hz(2*loop,6,loop+24,1,chinese);}
    099F E28C      LDI	R24,0x2C
    09A0 E09C      LDI	R25,0xC
    09A1 839D      STD	Y+5,R25
    09A2 838C      STD	Y+4,R24
    09A3 E081      LDI	R24,1
    09A4 838A      STD	Y+2,R24
    09A5 2F84      MOV	R24,R20
    09A6 5E88      SUBI	R24,0xE8
    09A7 8388      STD	Y+0,R24
    09A8 E026      LDI	R18,6
    09A9 E082      LDI	R24,2
    09AA 9F84      MUL	R24,R20
    09AB 2D00      MOV	R16,R0
    09AC DF6C      RCALL	_display_hz
    09AD 9543      INC	R20
    09AE 3048      CPI	R20,0x8
    09AF F378      BCS	0x099F
    09B0 9626      ADIW	R28,6
    09B1 940E12A0  CALL	pop_gset1
    09B3 9508      RET
_Putstr:
  X                    --> R20
  j                    --> R22
  i                    --> R10
  puts                 --> R12
    09B4 940E1297  CALL	push_gset4
    09B6 2EA2      MOV	R10,R18
    09B7 0168      MOVW	R12,R16
(0131) }
(0132) 
(0133) /****************************************/
(0134) /* 一个字串的输出   */
(0135) /****************************************/
(0136) void Putstr(uchar const *puts,uchar i)
(0137)  {
(0138)   uchar j,X;
(0139)   for (j=0;j<i;j++)
    09B8 2766      CLR	R22
    09B9 C009      RJMP	0x09C3
(0140)   {
(0141)    X = puts[j];
    09BA 2FE6      MOV	R30,R22
    09BB 27FF      CLR	R31
    09BC 0DEC      ADD	R30,R12
    09BD 1DFD      ADC	R31,R13
    09BE 9144      LPM	R20,0(Z)
(0142)    Putedot(X-0x20);  /*ascii码表从0x20开始*/
    09BF 2F04      MOV	R16,R20
    09C0 5200      SUBI	R16,0x20
    09C1 D006      RCALL	_Putedot
    09C2 9563      INC	R22
    09C3 156A      CP	R22,R10
    09C4 F3A8      BCS	0x09BA
    09C5 940E128F  CALL	pop_gset4
    09C7 9508      RET
_Putedot:
  bakerx               --> R20
  bakery               --> R22
  x                    --> R10
  i                    --> R12
  Order                --> R10
    09C8 940E1297  CALL	push_gset4
    09CA 2EA0      MOV	R10,R16
    09CB 9721      SBIW	R28,1
(0143)   }
(0144)  }
(0145) /****************************************/
(0146) /*   半角字符点阵码数据输出  */
(0147) /****************************************/
(0148) void Putedot(uchar Order)
(0149)  {
(0150)  uchar i,bakerx,bakery; /*共定义4个局部变量   */
(0151)  int x;   /*偏移量,字符量少的可以定义为UCHAR */
(0152)  bakerx = col;  /*暂存x,y坐标,已备下半个字符使用 */
    09CC 9140008F  LDS	R20,col
(0153)  bakery = row;
    09CE 9160008E  LDS	R22,row
(0154)  x=Order*16;  /*半角字符,每个字符16字节 */
    09D0 E180      LDI	R24,0x10
    09D1 9D8A      MUL	R24,R10
    09D2 0150      MOVW	R10,R0
(0155) /*上半个字符输出,8列 */
(0156)  for(i=0;i<8;i++)
    09D3 24CC      CLR	R12
    09D4 C02D      RJMP	0x0A02
(0157)   {
(0158)   cbyte = Ezk[x];    /*取点阵码,rom数组 */
    09D5 EB8C      LDI	R24,0xBC
    09D6 E090      LDI	R25,0
    09D7 01F5      MOVW	R30,R10
    09D8 0FE8      ADD	R30,R24
    09D9 1FF9      ADC	R31,R25
    09DA 91E4      LPM	R30,0(Z)
    09DB 93E0008D  STS	cbyte,R30
(0159)   lw(col,row,cbyte);    /*写输出一字节  */
    09DD 2E2E      MOV	R2,R30
    09DE 8228      STD	Y+0,R2
    09DF 9120008E  LDS	R18,row
    09E1 9100008F  LDS	R16,col
    09E3 DEBF      RCALL	_lw
(0160)   x++;
    09E4 01C5      MOVW	R24,R10
    09E5 9601      ADIW	R24,1
    09E6 015C      MOVW	R10,R24
(0161)   col++;
    09E7 9180008F  LDS	R24,col
    09E9 5F8F      SUBI	R24,0xFF
    09EA 9380008F  STS	col,R24
(0162)   if (col==128){col=0;row++;row++;}; /*下一列,如果列越界换行*/
    09EC 3880      CPI	R24,0x80
    09ED F459      BNE	0x09F9
    09EE 2422      CLR	R2
    09EF 9220008F  STS	col,R2
    09F1 9180008E  LDS	R24,row
    09F3 5F8F      SUBI	R24,0xFF
    09F4 9380008E  STS	row,R24
    09F6 5F8F      SUBI	R24,0xFF
    09F7 9380008E  STS	row,R24
(0163)    if (row>7) row=0;  /*如果行越界,返回首行 */
    09F9 E087      LDI	R24,7
    09FA 9020008E  LDS	R2,row
    09FC 1582      CP	R24,R2
    09FD F418      BCC	0x0A01
    09FE 2422      CLR	R2
    09FF 9220008E  STS	row,R2
    0A01 94C3      INC	R12
    0A02 2D8C      MOV	R24,R12
    0A03 3088      CPI	R24,0x8
    0A04 F280      BCS	0x09D5
(0164)   }     /*上半个字符输出结束 */
(0165) 
(0166)  col = bakerx;     /*列对齐  */
    0A05 9340008F  STS	col,R20
(0167)  row = bakery+1;     /*指向下半个字符行 */
    0A07 2F86      MOV	R24,R22
    0A08 5F8F      SUBI	R24,0xFF
    0A09 9380008E  STS	row,R24
(0168) /*下半个字符输出,8列 */
(0169)  for(i=0;i<8;i++)
    0A0B 24CC      CLR	R12
    0A0C C02A      RJMP	0x0A37
(0170)   {
(0171)   cbyte = Ezk[x];    /*取点阵码  */
    0A0D EB8C      LDI	R24,0xBC
    0A0E E090      LDI	R25,0
    0A0F 01F5      MOVW	R30,R10
    0A10 0FE8      ADD	R30,R24
    0A11 1FF9      ADC	R31,R25
    0A12 91E4      LPM	R30,0(Z)
    0A13 93E0008D  STS	cbyte,R30
(0172)   lw(col,row,cbyte);     /*写输出一字节  */
    0A15 2E2E      MOV	R2,R30
    0A16 8228      STD	Y+0,R2
    0A17 9120008E  LDS	R18,row
    0A19 9100008F  LDS	R16,col
    0A1B DE87      RCALL	_lw
(0173)   x++;
    0A1C 01C5      MOVW	R24,R10
    0A1D 9601      ADIW	R24,1
    0A1E 015C      MOVW	R10,R24
(0174)   col++;
    0A1F 9180008F  LDS	R24,col
    0A21 5F8F      SUBI	R24,0xFF
    0A22 9380008F  STS	col,R24
(0175)   if (col==128){col=0;row=row+2;}; /*下一列,如果列越界换行*/
    0A24 3880      CPI	R24,0x80
    0A25 F441      BNE	0x0A2E
    0A26 2422      CLR	R2
    0A27 9220008F  STS	col,R2
    0A29 9180008E  LDS	R24,row
    0A2B 5F8E      SUBI	R24,0xFE
    0A2C 9380008E  STS	row,R24
(0176)    if (row>7) row=1;  /*如果行越界,返回首行 */
    0A2E E087      LDI	R24,7
    0A2F 9020008E  LDS	R2,row
    0A31 1582      CP	R24,R2
    0A32 F418      BCC	0x0A36
    0A33 E081      LDI	R24,1
    0A34 9380008E  STS	row,R24
    0A36 94C3      INC	R12
    0A37 2D8C      MOV	R24,R12
    0A38 3088      CPI	R24,0x8
    0A39 F298      BCS	0x0A0D
(0177)   }     /*下半个字符输出结束 */
(0178)  row=bakery;
    0A3A 9360008E  STS	row,R22
    0A3C 9621      ADIW	R28,1
    0A3D 940E128F  CALL	pop_gset4
    0A3F 9508      RET
_display_tu:
  n                    --> R20
  dx                   --> R12
  i                    --> R10
  fb                   --> R22
    0A40 940E1297  CALL	push_gset4
    0A42 2F60      MOV	R22,R16
    0A43 9721      SBIW	R28,1
(0179)  }      /*整个字符输出结束 */
(0180)  /******************************************************/
(0181)  /*---------------显示一幅图片的子函数--------------*/
(0182)  /******************************************************/
(0183) void display_tu(uchar fb) 				
(0184) {									
(0185) uchar i,dx,n; 							
(0186)   for(n=0;n<8;n++)					
    0A44 2744      CLR	R20
    0A45 C01F      RJMP	0x0A65
(0187)   {									
(0188)     for(i=0;i<128;i++)					
    0A46 24AA      CLR	R10
    0A47 C019      RJMP	0x0A61
(0189)     {dx=tu[i+n*128];					
    0A48 E880      LDI	R24,0x80
    0A49 9F84      MUL	R24,R20
    0A4A 2DEA      MOV	R30,R10
    0A4B 27FF      CLR	R31
    0A4C 0DE0      ADD	R30,R0
    0A4D 1DF1      ADC	R31,R1
    0A4E E28C      LDI	R24,0x2C
    0A4F E098      LDI	R25,0x8
    0A50 0FE8      ADD	R30,R24
    0A51 1FF9      ADC	R31,R25
    0A52 90C4      LPM	R12,0(Z)
(0190)       if(fb)dx=255-dx;					
    0A53 2366      TST	R22
    0A54 F039      BEQ	0x0A5C
    0A55 2C2C      MOV	R2,R12
    0A56 2433      CLR	R3
    0A57 EF8F      LDI	R24,0xFF
    0A58 E090      LDI	R25,0
    0A59 2EC8      MOV	R12,R24
    0A5A 18C2      SUB	R12,R2
    0A5B 08D3      SBC	R13,R3
(0191)       lw(i,n,dx);						
    0A5C 82C8      STD	Y+0,R12
    0A5D 2F24      MOV	R18,R20
    0A5E 2D0A      MOV	R16,R10
    0A5F DE43      RCALL	_lw
    0A60 94A3      INC	R10
    0A61 2D8A      MOV	R24,R10
    0A62 3880      CPI	R24,0x80
    0A63 F320      BCS	0x0A48
    0A64 9543      INC	R20
    0A65 3048      CPI	R20,0x8
    0A66 F2F8      BCS	0x0A46
    0A67 9621      ADIW	R28,1
    0A68 940E128F  CALL	pop_gset4
    0A6A 9508      RET
FILE: D:\文稿\手把手教你学AVR单片机C程序设计\第17章~1\第17章实验程序\icc17-1\display_time.c
(0001) void dis_time(void)
(0002) {
(0003) col=0;row=0;Putedot(year/1000+0x10);
_dis_time:
    0A6B 2422      CLR	R2
    0A6C 9220008F  STS	col,R2
    0A6E 9220008E  STS	row,R2
    0A70 EE28      LDI	R18,0xE8

⌨️ 快捷键说明

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