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

📄 zuhe.lst

📁 AVR单片机实现液晶显示的程序代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    002B E5CF      LDI	R28,0x5F
    002C E0D4      LDI	R29,4
    002D BFCD      OUT	0x3D,R28
    002E BFDE      OUT	0x3E,R29
    002F 51C0      SUBI	R28,0x10
    0030 40D0      SBCI	R29,0
    0031 EA0A      LDI	R16,0xAA
    0032 8308      STD	Y+0,R16
    0033 2400      CLR	R0
    0034 E6E9      LDI	R30,0x69
    0035 E0F0      LDI	R31,0
    0036 E010      LDI	R17,0
    0037 37EF      CPI	R30,0x7F
    0038 07F1      CPC	R31,R17
    0039 F011      BEQ	0x003C
    003A 9201      ST	R0,Z+
    003B CFFB      RJMP	0x0037
    003C 8300      STD	Z+0,R16
    003D E4EC      LDI	R30,0x4C
    003E E0F0      LDI	R31,0
    003F E6A0      LDI	R26,0x60
    0040 E0B0      LDI	R27,0
    0041 E010      LDI	R17,0
    0042 35E5      CPI	R30,0x55
    0043 07F1      CPC	R31,R17
    0044 F021      BEQ	0x0049
    0045 95C8      LPM
    0046 9631      ADIW	R30,1
    0047 920D      ST	R0,X+
    0048 CFF9      RJMP	0x0042
    0049 D08B      RCALL	_main
_exit:
    004A CFFF      RJMP	_exit
_delay:
  j                    --> R20
  x                    --> R16
    004B D2A8      RCALL	push_gset1
FILE: zuhe.c
(0001) #include<iom8v.h>		//??¨1o?ATMEGA8|ì?¨a?¤???t
(0002) #include<macros.h>		//??¨1o?¨°?D?3?ê¨??o¨o|ì???§¨°?
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #define osccal_addr 0x1ff
(0006) #define fosc 8000000 //??ì??8MHZ
(0007) #define baud 9600 //2?§¨???¨o
(0008) #define LcdCmdPort PORTB
(0009) #define LcdDataPort PORTB
(0010) uint datax;
(0011) char d[9]={0x57,0x3d,0x11,0x2e,0x11,0x11,0x11,0x77,0x23};
(0012) uchar x,datah,K,datal,a[3],i,K,w1,w2,w3,w4;
(0013) float v,W;
(0014) 
(0015) //?á?D??¨?¨o?à|죤???ê???16??é??
(0016) void delay(uint x)   
(0017) {   uchar j;
    004C C005      RJMP	0x0052
(0018)     while(x-->0)
(0019) 	{
(0020)        for(j=0;j<5;j++)
    004D 2744      CLR	R20
    004E C001      RJMP	0x0050
    004F 9543      INC	R20
    0050 3045      CPI	R20,5
    0051 F3E8      BCS	0x004F
    0052 0118      MOVW	R2,R16
    0053 5001      SUBI	R16,1
    0054 4010      SBCI	R17,0
    0055 2022      TST	R2
    0056 F7B1      BNE	0x004D
    0057 2033      TST	R3
    0058 F7A1      BNE	0x004D
(0021) 	   {;}
(0022)     }
(0023) }
    0059 D29D      RCALL	pop_gset1
    005A 9508      RET
(0024) 
(0025) 
(0026) 
(0027) unsigned char EEPROM_read(unsigned int uiAddress)
(0028) {while(EECR&(1<<EEWE));
_EEPROM_read:
  uiAddress            --> R16
    005B 99E1      SBIC	0x1C,1
    005C CFFE      RJMP	_EEPROM_read
(0029)  EEAR=uiAddress;
    005D BB1F      OUT	0x1F,R17
    005E BB0E      OUT	0x1E,R16
(0030)  EECR|=(1<<EERE);
    005F 9AE0      SBI	0x1C,0
(0031)  return EEDR;
    0060 B30D      IN	R16,0x1D
    0061 9508      RET
(0032) }
(0033) 
(0034) void init_adc(void)
(0035) {ADMUX=(3<<REFS0);      //ADC2???|ì??1?a?¨22?2.56V,??ê?a¨a?§|쨤????ADC0
_init_adc:
    0062 EC80      LDI	R24,0xC0
    0063 B987      OUT	0x07,R24
(0036)  ADCSRA=(1<<ADEN)|(1<<ADSC); //ADC¨o1?¨1?ê?2?é????¥¨°?????áa???ê?2?à??¤??|ì,
    0064 B986      OUT	0x06,R24
(0037)                                          
(0038) }	
    0065 9508      RET
(0039) 
(0040) void readadc(void)
(0041) {datal=ADCL;
_readadc:
    0066 B024      IN	R2,0x04
    0067 92200079  STS	_datal,R2
(0042)  datah=ADCH;
    0069 B025      IN	R2,0x05
    006A 9220007B  STS	_datah,R2
(0043)  //ADCSRA=(1<<ADSC);    //|죤????áa??¥
(0044)  //datax=(datah<<8)+datal;
(0045) }
    006C 9508      RET
(0046) 
(0047) void LcdBusy(void); /* LCD???ì?????? */
(0048) 
(0049) void LcdBusy()
(0050) { 
(0051) 
(0052) PORTC &= ~(1<<PORTC4);
_LcdBusy:
    006D 98AC      CBI	0x15,4
(0053) PORTC |=  (1<<PORTC5);
    006E 9AAD      SBI	0x15,5
(0054) LcdCmdPort = 0xff;
    006F EF8F      LDI	R24,0xFF
    0070 BB88      OUT	0x18,R24
(0055) DDRB=0x00;
    0071 2422      CLR	R2
    0072 BA27      OUT	0x17,R2
(0056) PORTC |=  (1<<PORTC3);
    0073 9AAB      SBI	0x15,3
(0057) PORTC &= ~(1<<PORTC3);
    0074 98AB      CBI	0x15,3
    0075 C002      RJMP	0x0078
(0058) while ((PINB&0x80)!=0)
(0059) { 
(0060) 
(0061) PORTC &= ~(1<<PORTC3);
    0076 98AB      CBI	0x15,3
(0062) PORTC |=  (1<<PORTC3);
    0077 9AAB      SBI	0x15,3
    0078 99B7      SBIC	0x16,7
    0079 CFFC      RJMP	0x0076
(0063) }
(0064) PORTC |=  (1<<PORTC3);
    007A 9AAB      SBI	0x15,3
(0065) DDRB=0xff;
    007B EF8F      LDI	R24,0xFF
    007C BB87      OUT	0x17,R24
(0066) //LcdDelay(500);
(0067) }
    007D 9508      RET
_LcdXY:
  y                    --> R22
  x                    --> R20
    007E D28C      RCALL	push_gset2
    007F 2F62      MOV	R22,R18
    0080 2F40      MOV	R20,R16
(0068) 
(0069) 
(0070) 
(0071) 
(0072) void LcdXY(char,char); /* LCD?????¨?????? */
(0073) void LcdXY(char x,char y)
(0074) { 
(0075) 
(0076) if ((y&0x01)!=0)LcdCmd(0x80|(x-1));
    0081 FF60      SBRS	R22,0
    0082 C007      RJMP	0x008A
    0083 2F04      MOV	R16,R20
    0084 2711      CLR	R17
    0085 5001      SUBI	R16,1
    0086 4010      SBCI	R17,0
    0087 6800      ORI	R16,0x80
    0088 D009      RCALL	_LcdCmd
    0089 C006      RJMP	0x0090
(0077) else LcdCmd(0xC0|(x-1));
    008A 2F04      MOV	R16,R20
    008B 2711      CLR	R17
    008C 5001      SUBI	R16,1
    008D 4010      SBCI	R17,0
    008E 6C00      ORI	R16,0xC0
    008F D002      RCALL	_LcdCmd
(0078) 
(0079) 
(0080) }
    0090 D261      RCALL	pop_gset2
    0091 9508      RET
_LcdCmd:
  c                    --> R20
    0092 D261      RCALL	push_gset1
    0093 2F40      MOV	R20,R16
(0081) 
(0082) void LcdCmd(char); /* LCD?????ü?????? */
(0083) void LcdCmd(char c)
(0084) { 
(0085) 
(0086) LcdBusy();
    0094 DFD8      RCALL	_LcdBusy
(0087) PORTC |=  (1<<PORTC3);
    0095 9AAB      SBI	0x15,3
(0088) PORTC &= ~(1<<PORTC4);
    0096 98AC      CBI	0x15,4
(0089) PORTC &= ~(1<<PORTC5);
    0097 98AD      CBI	0x15,5
(0090) //PORTC &= ~(1<<PORTC3);
(0091) 
(0092) LcdCmdPort = c;
    0098 BB48      OUT	0x18,R20
(0093) delay(500);
    0099 EF04      LDI	R16,0xF4
    009A E011      LDI	R17,1
    009B DFAF      RCALL	_delay
(0094) PORTC &= ~(1<<PORTC3);
    009C 98AB      CBI	0x15,3
(0095) 
(0096) }
    009D D259      RCALL	pop_gset1
    009E 9508      RET
_LcdData:
  c                    --> R20
    009F D254      RCALL	push_gset1
    00A0 2F40      MOV	R20,R16
(0097) 
(0098) 
(0099) void LcdData(char); /* LCD???????????? */
(0100) void LcdData(char c)
(0101) { 
(0102) 
(0103) LcdBusy();
    00A1 DFCB      RCALL	_LcdBusy
(0104) PORTC |=  (1<<PORTC3);
    00A2 9AAB      SBI	0x15,3
(0105) PORTC |=  (1<<PORTC4);
    00A3 9AAC      SBI	0x15,4
(0106) PORTC &= ~(1<<PORTC5);
    00A4 98AD      CBI	0x15,5
(0107) //PORTC &= ~(1<<PORTC3);
(0108) 
(0109) LcdDataPort = c;
    00A5 BB48      OUT	0x18,R20
(0110) delay(500);
    00A6 EF04      LDI	R16,0xF4
    00A7 E011      LDI	R17,1
    00A8 DFA2      RCALL	_delay
(0111) PORTC &= ~(1<<PORTC3);
    00A9 98AB      CBI	0x15,3
(0112) }
    00AA D24C      RCALL	pop_gset1
    00AB 9508      RET
(0113) 
(0114) void init_wdt(void)
(0115) {WDTCR=(1<<WDCE)|(1<<WDE);
_init_wdt:
    00AC E188      LDI	R24,0x18
    00AD BD81      OUT	0x21,R24
(0116)  WDTCR=(0<<WDCE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);
    00AE E08F      LDI	R24,0xF
    00AF BD81      OUT	0x21,R24
(0117)  /*看门狗允许、溢出时间2.1s,p44*/
(0118) }
    00B0 9508      RET
(0119) 
(0120) void LcdInit(void); /* LCD?????????? */
(0121) void LcdInit()
(0122) { 
(0123) PORTC |=  (1<<PORTC4);
_LcdInit:
    00B1 9AAC      SBI	0x15,4
(0124) PORTC |=  (1<<PORTC5);
    00B2 9AAD      SBI	0x15,5
(0125) PORTC |=  (1<<PORTC3);
    00B3 9AAB      SBI	0x15,3
(0126) LcdCmd(0x38);
    00B4 E308      LDI	R16,0x38
    00B5 DFDC      RCALL	_LcdCmd
(0127) LcdCmd(0x38);
    00B6 E308      LDI	R16,0x38
    00B7 DFDA      RCALL	_LcdCmd
(0128) LcdCmd(0x06);
    00B8 E006      LDI	R16,6
    00B9 DFD8      RCALL	_LcdCmd
(0129) LcdCmd(0x0c);
    00BA E00C      LDI	R16,0xC
    00BB DFD6      RCALL	_LcdCmd
(0130) LcdCmd(0x01);
    00BC E001      LDI	R16,1
(0131) }
    00BD CFD4      RJMP	_LcdCmd
(0132) 
(0133) 
(0134) void LcdClr(void); /* LCD???????? */
(0135) void LcdClr()
(0136) { 
(0137) LcdCmd(0x01);
_LcdClr:
    00BE E001      LDI	R16,1
(0138) }
    00BF CFD2      RJMP	_LcdCmd
_LcdStr:
  d                    --> R20
  c                    --> R22
    00C0 D24A      RCALL	push_gset2
    00C1 01B8      MOVW	R22,R16
(0139) 
(0140) 
(0141) 
(0142) 
(0143) 
(0144) void LcdStr(char *); /* ????×?·??????? */
(0145) void LcdStr(char *c)
(0146) {
(0147) int d=0;
    00C2 2744      CLR	R20
    00C3 2755      CLR	R21
    00C4 C008      RJMP	0x00CD
(0148) while (c[d]!=0)
(0149) LcdData(c[d++]); /* char of LCM */
    00C5 011A      MOVW	R2,R20
    00C6 5F4F      SUBI	R20,0xFF
    00C7 4F5F      SBCI	R21,0xFF
    00C8 01F1      MOVW	R30,R2
    00C9 0FE6      ADD	R30,R22
    00CA 1FF7      ADC	R31,R23
    00CB 8100      LDD	R16,Z+0
    00CC DFD2      RCALL	_LcdData
    00CD 01FA      MOVW	R30,R20
    00CE 0FE6      ADD	R30,R22
    00CF 1FF7      ADC	R31,R23
    00D0 8020      LDD	R2,Z+0
    00D1 2022      TST	R2
    00D2 F791      BNE	0x00C5
(0150) 
(0151) }
    00D3 D21E      RCALL	pop_gset2
    00D4 9508      RET
_main:
    00D5 972C      SBIW	R28,0xC
(0152) 
(0153) 
(0154) 
(0155) void main(void)
(0156) {  
(0157)    delay(2000);
    00D6 ED00      LDI	R16,0xD0
    00D7 E017      LDI	R17,7
    00D8 DF72      RCALL	_delay
(0158)    OSCCAL=EEPROM_read(osccal_addr);
    00D9 EF0F      LDI	R16,0xFF
    00DA E011      LDI	R17,1
    00DB DF7F      RCALL	_EEPROM_read
    00DC BF01      OUT	0x31,R16
(0159)    DDRC=0xfe;
    00DD EF8E      LDI	R24,0xFE
    00DE BB84      OUT	0x14,R24
(0160)    DDRB=0Xff;   
    00DF EF8F      LDI	R24,0xFF
    00E0 BB87      OUT	0x17,R24
(0161)    //init_wdt();
(0162)    SEI();
    00E1 9478      BSET	7
(0163)    init_adc();
    00E2 DF7F      RCALL	_init_adc
(0164)    LcdInit();
    00E3 DFCD      RCALL	_LcdInit
(0165)    LcdClr();
    00E4 DFD9      RCALL	_LcdClr
    00E5 C1CB      RJMP	0x02B1
(0166)   
(0167)    while(1)
(0168)    {   delay(10000);
    00E6 E100      LDI	R16,0x10
    00E7 E217      LDI	R17,0x27
    00E8 DF62      RCALL	_delay
(0169)        WDR();
    00E9 95A8      WDR
(0170) 	   init_adc();
    00EA DF77      RCALL	_init_adc
(0171)        //LcdClr();
(0172)        ADCSRA|=(1<<ADSC);
    00EB 9A36      SBI	0x06,6
(0173) 	   while(ADCSRA&(1<<ADIF));
    00EC 9934      SBIC	0x06,4
    00ED CFFE      RJMP	0x00EC
(0174)        readadc();
    00EE DF77      RCALL	_readadc
(0175) 	   ADCSRA|=(1<<ADIF);
    00EF 9A34      SBI	0x06,4
(0176) 	   datax=(datah<<8)+datal;
    00F0 90200079  LDS	R2,_datal
    00F2 9030007B  LDS	R3,_datah
    00F4 9230007E  STS	_datax+1,R3
    00F6 9220007D  STS	_datax,R2
(0177) 	   ADCSRA&=~(1<<ADEN);
    00F8 9837      CBI	0x06,7
(0178) 	   v=(float)datax/0x3ff*2.56;
    00F9 E30E      LDI	R16,0x3E
    00FA E010      LDI	R17,0
    00FB D21B      RCALL	lpm32
    00FC 933A      ST	R19,-Y
    00FD 932A      ST	R18,-Y
    00FE 931A      ST	R17,-Y
    00FF 930A      ST	R16,-Y
    0100 E30A      LDI	R16,0x3A
    0101 E010      LDI	R17,0
    0102 D214      RCALL	lpm32
    0103 933A      ST	R19,-Y
    0104 932A      ST	R18,-Y
    0105 931A      ST	R17,-Y
    0106 930A      ST	R16,-Y
    0107 9100007D  LDS	R16,_datax
    0109 9110007E  LDS	R17,_datax+1
    010B 9516      LSR	R17
    010C 9507      ROR	R16
    010D D25B      RCALL	int2fp
    010E 933A      ST	R19,-Y
    010F 932A      ST	R18,-Y
    0110 931A      ST	R17,-Y
    0111 930A      ST	R16,-Y
    0112 D386      RCALL	empy32fs
    0113 9100007D  LDS	R16,_datax
    0115 9110007E  LDS	R17,_datax+1
    0117 7001      ANDI	R16,1
    0118 7010      ANDI	R17,0
    0119 D24F      RCALL	int2fp
    011A 933A      ST	R19,-Y
    011B 932A      ST	R18,-Y
    011C 931A      ST	R17,-Y
    011D 930A      ST	R16,-Y
    011E D29F      RCALL	add32fs
    011F E306      LDI	R16,0x36
    0120 E010      LDI	R17,0
    0121 D1F5      RCALL	lpm32
    0122 933A      ST	R19,-Y
    0123 932A      ST	R18,-Y
    0124 931A      ST	R17,-Y
    0125 930A      ST	R16,-Y
    0126 D2EB      RCALL	div32fs
    0127 D373      RCALL	empy32f
    0128 9310006E  STS	_v+1,R17
    012A 9300006D  STS	_v,R16
    012C 93300070  STS	_v+3,R19
    012E 9320006F  STS	_v+2,R18
(0179) 	   W=(float)v*v;
    0130 933A      ST	R19,-Y
    0131 932A      ST	R18,-Y
    0132 931A      ST	R17,-Y
    0133 930A      ST	R16,-Y
    0134 933A      ST	R19,-Y
    0135 932A      ST	R18,-Y
    0136 931A      ST	R17,-Y
    0137 930A      ST	R16,-Y
    0138 D362      RCALL	empy32f
    0139 9310006A  STS	_W+1,R17
    013B 93000069  STS	_W,R16
    013D 9330006C  STS	_W+3,R19
    013F 9320006B  STS	_W+2,R18
(0180) 	   w1=(uint)W;
    0141 933A      ST	R19,-Y
    0142 932A      ST	R18,-Y
    0143 931A      ST	R17,-Y
    0144 930A      ST	R16,-Y
    0145 E302      LDI	R16,0x32
    0146 E010      LDI	R17,0
    0147 D1CF      RCALL	lpm32
    0148 933A      ST	R19,-Y
    0149 932A      ST	R18,-Y
    014A 931A      ST	R17,-Y
    014B 930A      ST	R16,-Y
    014C D31D      RCALL	cmp32f
    014D F0D4      BLT	0x0168
    014E 9040006B  LDS	R4,_W+2
    0150 9050006C  LDS	R5,_W+3
    0152 90200069  LDS	R2,_W
    0154 9030006A  LDS	R3,_W+1
    0156 925A      ST	R5,-Y
    0157 924A      ST	R4,-Y
    0158 923A      ST	R3,-Y
    0159 922A      ST	R2,-Y
    015A E302      LDI	R16,0x32
    015B E010      LDI	R17,0
    015C D1BA      RCALL	lpm32
    015D 933A      ST	R19,-Y
    015E 932A      ST	R18,-Y
    015F 931A      ST	R17,-Y
    0160 930A      ST	R16,-Y
    0161 D263      RCALL	sub32f
    0162 D1C8      RCALL	fp2int
    0163 01C8      MOVW	R24,R16
    0164 5080      SUBI	R24,0
    0165 4890      SBCI	R25,0x80
    0166 015C      MOVW	R10,R24
    0167 C00A      RJMP	0x0172
    0168 9120006B  LDS	R18,_W+2

⌨️ 快捷键说明

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