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

📄 wnl.lst

📁 万年历 megal128 iccavr开发平台
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    0065 EFCF      LDI	R28,0xFF
    0066 E1D0      LDI	R29,0x10
    0067 BFCD      OUT	0x3D,R28
    0068 BFDE      OUT	0x3E,R29
    0069 51C0      SUBI	R28,0x10
    006A 40D0      SBCI	R29,0
    006B EA0A      LDI	R16,0xAA
    006C 8308      STD	Y+0,R16
    006D 2400      CLR	R0
    006E E1E6      LDI	R30,0x16
    006F E0F1      LDI	R31,1
    0070 E011      LDI	R17,1
    0071 31E6      CPI	R30,0x16
    0072 07F1      CPC	R31,R17
    0073 F011      BEQ	0x0076
    0074 9201      ST	R0,Z+
    0075 CFFB      RJMP	0x0071
    0076 8300      STD	Z+0,R16
    0077 EBE4      LDI	R30,0xB4
    0078 E0F0      LDI	R31,0
    0079 E0A0      LDI	R26,0
    007A E0B1      LDI	R27,1
    007B E010      LDI	R17,0
    007C 3CEA      CPI	R30,0xCA
    007D 07F1      CPC	R31,R17
    007E F021      BEQ	0x0083
    007F 95C8      LPM
    0080 9631      ADIW	R30,1
    0081 920D      ST	R0,X+
    0082 CFF9      RJMP	0x007C
    0083 940E0554  CALL	_main
_exit:
    0085 CFFF      RJMP	_exit
_delay:
  k                    --> R20
  x                    --> R16
    0086 940E067C  CALL	push_gset1
FILE: E:\ATMEGA~1\万年历实验\2.c
(0001) //李伟于9月3号完成
(0002) #include<iom128v.h>
(0003) /*定义OCMJ4X8端口*/
(0004) //DATA_PORT=PORTA
(0005) #define data_port PORTA
(0006) //ASK=PORTE.6
(0007) #define ask (PINE&0x40)
(0008) //ANSWER=PORTE.7
(0009) #define set_answer asm("sbi 0x03,7")
(0010) #define clr_answer asm("cbi 0x03,7")
(0011) //RESTE=PORTC.3
(0012) #define set_reset asm("sbi 0x15,3")
(0013) #define clr_reset asm("cbi 0x15,3")
(0014) #define wait  asm("nop\n nop")
(0015) unsigned char second=0,minute=0,hour=0,day=4,days=11,month=8;
(0016) unsigned int year=2005;
(0017) unsigned char flag=0;
(0018) unsigned char lcd_buff[4]={0,0,0,0};//放小时,分钟
(0019) unsigned char lcd_buff1[9]={0,0,0,0,0,0,0,0,0};//相当与一个地址,存放月,日
(0020) const unsigned char biao1[]={50,22,40,43,46,33,40,48,38,36,52,40};
(0021) const unsigned char biao2[]={27,94,93,36,69,89,53,39,58,74,34,53};
(0022) const unsigned char table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
(0023) void delay(unsigned int x)
(0024) {
(0025)   unsigned int k;
(0026)   for(k=0;k<x;k++)
    0088 2744      CLR	R20
    0089 2755      CLR	R21
    008A C002      RJMP	0x008D
    008B 5F4F      SUBI	R20,0xFF
    008C 4F5F      SBCI	R21,0xFF
    008D 1740      CP	R20,R16
    008E 0751      CPC	R21,R17
    008F F3D8      BCS	0x008B
    0090 940E067F  CALL	pop_gset1
    0092 9508      RET
(0027)   ;
(0028) }
(0029) void ocmj_init(void)
(0030) {
(0031)  MCUCR=0;
_ocmj_init:
    0093 2422      CLR	R2
    0094 BE25      OUT	0x35,R2
(0032)  DDRA=0xff;
    0095 EF8F      LDI	R24,0xFF
    0096 BB8A      OUT	0x1A,R24
(0033)  PORTA=0xff;
    0097 BB8B      OUT	0x1B,R24
(0034)  DDRE=0b10000000;
    0098 E880      LDI	R24,0x80
    0099 B982      OUT	0x02,R24
(0035)  PORTE=0xff;
    009A EF8F      LDI	R24,0xFF
    009B B983      OUT	0x03,R24
(0036)  clr_reset;//LCD复位
    009C 98AB      CBI	0x15,3
(0037)  delay(10);
    009D E00A      LDI	R16,0xA
    009E E010      LDI	R17,0
    009F DFE6      RCALL	_delay
(0038)  set_reset;
    00A0 9AAB      SBI	0x15,3
(0039)  clr_answer;
    00A1 981F      CBI	0x03,7
(0040)  delay(2);
    00A2 E002      LDI	R16,2
    00A3 E010      LDI	R17,0
    00A4 DFE1      RCALL	_delay
    00A5 9508      RET
(0041) }
(0042) /**********************************************/
(0043) 	 /* 写数据到LCD  */
(0044) /**********************************************/
(0045) void ocmj_write(unsigned char data)
(0046) {
(0047)  while(ask!=0)
_ocmj_write:
  data                 --> R16
    00A6 990E      SBIC	0x01,6
    00A7 CFFE      RJMP	_ocmj_write
(0048)   ;
(0049)  data_port=data;
    00A8 BB0B      OUT	0x1B,R16
(0050)  wait;
    00A9 0000      NOP
    00AA 0000      NOP
(0051)  set_answer;
    00AB 9A1F      SBI	0x03,7
(0052)  wait;
    00AC 0000      NOP
    00AD 0000      NOP
(0053)  while(ask==0)
    00AE 9B0E      SBIS	0x01,6
    00AF CFFE      RJMP	0x00AE
(0054)   ;		
(0055)  clr_answer;
    00B0 981F      CBI	0x03,7
    00B1 9508      RET
_write_ASCII:
  data                 --> Y+6
  yy                   --> Y+4
  xx                   --> R20
  type                 --> R22
    00B2 940E067A  CALL	push_gset2
    00B4 01A9      MOVW	R20,R18
    00B5 01B8      MOVW	R22,R16
(0056) }
(0057) /**********************************************/
(0058) 	 /* 写ASCII码初始化  */
(0059) /**********************************************/
(0060) void write_ASCII(unsigned type,unsigned xx,unsigned yy,unsigned data)
(0061) {
(0062)     ocmj_write(type);
    00B6 2F06      MOV	R16,R22
    00B7 DFEE      RCALL	_ocmj_write
(0063)     ocmj_write(xx);
    00B8 2F04      MOV	R16,R20
    00B9 DFEC      RCALL	_ocmj_write
(0064)     ocmj_write(yy);
    00BA 810C      LDD	R16,Y+4
    00BB 811D      LDD	R17,Y+5
    00BC DFE9      RCALL	_ocmj_write
(0065)     ocmj_write(data);
    00BD 810E      LDD	R16,Y+6
    00BE 811F      LDD	R17,Y+7
    00BF DFE6      RCALL	_ocmj_write
    00C0 940E066E  CALL	pop_gset2
    00C2 9508      RET
_write_hazi:
  data2                --> Y+6
  data1                --> Y+4
  yy                   --> R20
  xx                   --> R22
    00C3 940E067A  CALL	push_gset2
    00C5 01A9      MOVW	R20,R18
    00C6 01B8      MOVW	R22,R16
(0066) }
(0067) /**********************************************/
(0068) 	 /* 写汉字初始化  */
(0069) /**********************************************/
(0070) void write_hazi(unsigned xx,unsigned yy,unsigned data1,unsigned data2)
(0071) {
(0072)     ocmj_write(0xf0);
    00C7 EF00      LDI	R16,0xF0
    00C8 DFDD      RCALL	_ocmj_write
(0073)     ocmj_write(xx);
    00C9 2F06      MOV	R16,R22
    00CA DFDB      RCALL	_ocmj_write
(0074)     ocmj_write(yy);
    00CB 2F04      MOV	R16,R20
    00CC DFD9      RCALL	_ocmj_write
(0075)     ocmj_write(data1);
    00CD 810C      LDD	R16,Y+4
    00CE 811D      LDD	R17,Y+5
    00CF DFD6      RCALL	_ocmj_write
(0076) 	ocmj_write(data2);
    00D0 810E      LDD	R16,Y+6
    00D1 811F      LDD	R17,Y+7
    00D2 DFD3      RCALL	_ocmj_write
    00D3 940E066E  CALL	pop_gset2
    00D5 9508      RET
_scan_key:
  i                    --> R22
  temp                 --> R10
    00D6 940E0678  CALL	push_gset3
(0077) }
(0078) /**********************************************/
(0079) 	 /* 键盘子程序  */
(0080) /**********************************************/
(0081) unsigned char scan_key(void)
(0082) {
(0083)  unsigned char i,temp;
(0084)  DDRB=0x0f;	
    00D8 E08F      LDI	R24,0xF
    00D9 BB87      OUT	0x17,R24
(0085)  PORTB=0xff;	
    00DA EF8F      LDI	R24,0xFF
    00DB BB88      OUT	0x18,R24
(0086)  for(i=0;i<4;i++)
    00DC 2766      CLR	R22
    00DD C05A      RJMP	0x0138
(0087)   {
(0088)    PORTB=~(1<<i); //键盘线扫描
    00DE E001      LDI	R16,1
    00DF 2F16      MOV	R17,R22
    00E0 940E06C1  CALL	lsl8
    00E2 2E20      MOV	R2,R16
    00E3 9420      COM	R2
    00E4 BA28      OUT	0x18,R2
(0089)    delay(30);   //等待低电平稳定
    00E5 E10E      LDI	R16,0x1E
    00E6 E010      LDI	R17,0
    00E7 DF9E      RCALL	_delay
(0090)    temp=PINB&0xf0;//读取键盘扫描信号,屏蔽低四位
    00E8 B386      IN	R24,0x16
    00E9 7F80      ANDI	R24,0xF0
    00EA 2EA8      MOV	R10,R24
(0091)    if (temp!=0xf0)//如果有键按下,延时10ms消抖
    00EB 3F80      CPI	R24,0xF0
    00EC F409      BNE	0x00EE
    00ED C049      RJMP	0x0137
(0092)     {              //本程序用display代替10ms延时,
(0093)      delay(3000); //可消除显示抖动
    00EE EB08      LDI	R16,0xB8
    00EF E01B      LDI	R17,0xB
    00F0 DF95      RCALL	_delay
(0094)      temp=PINB&0xf0;//再读键盘
    00F1 B386      IN	R24,0x16
    00F2 7F80      ANDI	R24,0xF0
    00F3 2EA8      MOV	R10,R24
(0095)      if (temp!=0xf0)
    00F4 3F80      CPI	R24,0xF0
    00F5 F409      BNE	0x00F7
    00F6 C040      RJMP	0x0137
(0096)       {
(0097)         temp&=0xf0;
    00F7 7F80      ANDI	R24,0xF0
    00F8 2EA8      MOV	R10,R24
(0098)         switch(temp) //计算键值
    00F9 2F48      MOV	R20,R24
    00FA 2755      CLR	R21
    00FB 3B40      CPI	R20,0xB0
    00FC E0E0      LDI	R30,0
    00FD 075E      CPC	R21,R30
    00FE F0F9      BEQ	0x011E
    00FF EB80      LDI	R24,0xB0
    0100 E090      LDI	R25,0
    0101 1784      CP	R24,R20
    0102 0795      CPC	R25,R21
    0103 F02C      BLT	0x0109
    0104 3740      CPI	R20,0x70
    0105 E0E0      LDI	R30,0
    0106 075E      CPC	R21,R30
    0107 F071      BEQ	0x0116
    0108 C02C      RJMP	0x0135
    0109 3D40      CPI	R20,0xD0
    010A E0E0      LDI	R30,0
    010B 075E      CPC	R21,R30
    010C F0C9      BEQ	0x0126
    010D 3D40      CPI	R20,0xD0
    010E E0E0      LDI	R30,0
    010F 075E      CPC	R21,R30
    0110 F124      BLT	0x0135
    0111 3E40      CPI	R20,0xE0
    0112 E0E0      LDI	R30,0
    0113 075E      CPC	R21,R30
    0114 F0C9      BEQ	0x012E
    0115 C01F      RJMP	0x0135
(0099)          {
(0100) 		  case 0x70:temp=15-(3-i)*4;break;
    0116 E013      LDI	R17,3
    0117 1B16      SUB	R17,R22
    0118 E004      LDI	R16,4
    0119 0201      MULS	R16,R17
    011A E08F      LDI	R24,0xF
    011B 2EA8      MOV	R10,R24
    011C 18A0      SUB	R10,R0
    011D C017      RJMP	0x0135
(0101)           case 0xb0:temp=14-(3-i)*4;break;
    011E E013      LDI	R17,3
    011F 1B16      SUB	R17,R22
    0120 E004      LDI	R16,4
    0121 0201      MULS	R16,R17
    0122 E08E      LDI	R24,0xE
    0123 2EA8      MOV	R10,R24
    0124 18A0      SUB	R10,R0
    0125 C00F      RJMP	0x0135
(0102)           case 0xd0:temp=13-(3-i)*4;break;
    0126 E013      LDI	R17,3
    0127 1B16      SUB	R17,R22
    0128 E004      LDI	R16,4
    0129 0201      MULS	R16,R17
    012A E08D      LDI	R24,0xD
    012B 2EA8      MOV	R10,R24
    012C 18A0      SUB	R10,R0
    012D C007      RJMP	0x0135
(0103)           case 0xe0:temp=12-(3-i)*4;break;
    012E E013      LDI	R17,3
    012F 1B16      SUB	R17,R22
    0130 E004      LDI	R16,4
    0131 0201      MULS	R16,R17
    0132 E08C      LDI	R24,0xC
    0133 2EA8      MOV	R10,R24
    0134 18A0      SUB	R10,R0
(0104)           default:break;				
(0105)           }
(0106) 		 return temp;
    0135 2D0A      MOV	R16,R10
    0136 C005      RJMP	0x013C
    0137 9563      INC	R22
    0138 3064      CPI	R22,4
    0139 F408      BCC	0x013B
    013A CFA3      RJMP	0x00DE
(0107) 		}
(0108) 	  }
(0109)     }
(0110)    return 0x00;//无键按下
    013B 2700      CLR	R16
    013C 940E0671  CALL	pop_gset3
    013E 9508      RET
_time_display:
    013F 9724      SBIW	R28,4
(0111) }	
(0112) /**********************************************/
(0113) 	 /* LCD显示小时分钟秒*/
(0114) /**********************************************/
(0115) void time_display(void)
(0116) {
(0117) write_ASCII(0xf9,4,0,table[hour/10]);//小时高位
    0140 E02A      LDI	R18,0xA
    0141 E030      LDI	R19,0
    0142 91000102  LDS	R16,hour
    0144 2711      CLR	R17
    0145 940E0628  CALL	div16s
    0147 01F8      MOVW	R30,R16
    0148 EA84      LDI	R24,0xA4
    0149 E090      LDI	R25,0
    014A 0FE8      ADD	R30,R24
    014B 1FF9      ADC	R31,R25
    014C 9024      LPM	R2,0(Z)
    014D 2433      CLR	R3
    014E 823B      STD	Y+3,R3
    014F 822A      STD	Y+2,R2
    0150 2422      CLR	R2
    0151 8239      STD	Y+1,R3
    0152 8228      STD	Y+0,R2
    0153 E024      LDI	R18,4
    0154 E030      LDI	R19,0
    0155 EF09      LDI	R16,0xF9
    0156 E010      LDI	R17,0
    0157 DF5A      RCALL	_write_ASCII
(0118) write_ASCII(0xf9,5,0,table[hour%10]);//小时地位
    0158 E02A      LDI	R18,0xA
    0159 E030      LDI	R19,0
    015A 91000102  LDS	R16,hour
    015C 2711      CLR	R17
    015D 940E0624  CALL	mod16s
    015F 01F8      MOVW	R30,R16
    0160 EA84      LDI	R24,0xA4
    0161 E090      LDI	R25,0
    0162 0FE8      ADD	R30,R24
    0163 1FF9      ADC	R31,R25
    0164 9024      LPM	R2,0(Z)
    0165 2433      CLR	R3
    0166 823B      STD	Y+3,R3
    0167 822A      STD	Y+2,R2
    0168 2422      CLR	R2
    0169 8239      STD	Y+1,R3
    016A 8228      STD	Y+0,R2
    016B E025      LDI	R18,5
    016C E030      LDI	R19,0
    016D EF09      LDI	R16,0xF9
    016E E010      LDI	R17,0
    016F DF42      RCALL	_write_ASCII
(0119) write_ASCII(0xf9,6,0,58); //:
    0170 E38A      LDI	R24,0x3A
    0171 E090      LDI	R25,0
    0172 839B      STD	Y+3,R25
    0173 838A      STD	Y+2,R24
    0174 2422      CLR	R2
    0175 2433      CLR	R3
    0176 8239      STD	Y+1,R3
    0177 8228      STD	Y+0,R2
    0178 E026      LDI	R18,6
    0179 E030      LDI	R19,0
    017A EF09      LDI	R16,0xF9
    017B E010      LDI	R17,0
    017C DF35      RCALL	_write_ASCII
(0120) write_ASCII(0xf9,7,0,table[minute/10]);//分钟高位
    017D E02A      LDI	R18,0xA
    017E E030      LDI	R19,0
    017F 91000101  LDS	R16,minute
    0181 2711      CLR	R17
    0182 940E0628  CALL	div16s
    0184 01F8      MOVW	R30,R16
    0185 EA84      LDI	R24,0xA4
    0186 E090      LDI	R25,0
    0187 0FE8      ADD	R30,R24
    0188 1FF9      ADC	R31,R25
    0189 9024      LPM	R2,0(Z)
    018A 2433      CLR	R3
    018B 823B      STD	Y+3,R3
    018C 822A      STD	Y+2,R2
    018D 2422      CLR	R2
    018E 8239      STD	Y+1,R3
    018F 8228      STD	Y+0,R2
    0190 E027      LDI	R18,7
    0191 E030      LDI	R19,0
    0192 EF09      LDI	R16,0xF9
    0193 E010      LDI	R17,0
    0194 DF1D      RCALL	_write_ASCII
(0121) write_ASCII(0xf9,8,0,table[minute%10]);//分钟地位
    0195 E02A      LDI	R18,0xA
    0196 E030      LDI	R19,0
    0197 91000101  LDS	R16,minute
    0199 2711      CLR	R17
    019A 940E0624  CALL	mod16s
    019C 01F8      MOVW	R30,R16
    019D EA84      LDI	R24,0xA4
    019E E090      LDI	R25,0
    019F 0FE8      ADD	R30,R24
    01A0 1FF9      ADC	R31,R25
    01A1 9024      LPM	R2,0(Z)
    01A2 2433      CLR	R3
    01A3 823B      STD	Y+3,R3
    01A4 822A      STD	Y+2,R2
    01A5 2422      CLR	R2
    01A6 8239      STD	Y+1,R3
    01A7 8228      STD	Y+0,R2
    01A8 E028      LDI	R18,0x8
    01A9 E030      LDI	R19,0
    01AA EF09      LDI	R16,0xF9
    01AB E010      LDI	R17,0
    01AC DF05      RCALL	_write_ASCII
(0122) write_ASCII(0xf9,9,0,58); //:	
    01AD E38A      LDI	R24,0x3A
    01AE E090      LDI	R25,0
    01AF 839B      STD	Y+3,R25
    01B0 838A      STD	Y+2,R24
    01B1 2422      CLR	R2
    01B2 2433      CLR	R3
    01B3 8239      STD	Y+1,R3
    01B4 8228      STD	Y+0,R2
    01B5 E029      LDI	R18,0x9
    01B6 E030      LDI	R19,0
    01B7 EF09      LDI	R16,0xF9
    01B8 E010      LDI	R17,0
    01B9 DEF8      RCALL	_write_ASCII
(0123) write_ASCII(0xf9,10,0,table[second/10]);//秒钟高位	
    01BA E02A      LDI	R18,0xA
    01BB E030      LDI	R19,0
    01BC 91000100  LDS	R16,second
    01BE 2711      CLR	R17
    01BF 940E0628  CALL	div16s

⌨️ 快捷键说明

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