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

📄 main.s

📁 AVR单片机做的数字电压表
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area lit(rom, con, rel)
_AC_TABLE::
	.byte 128,129
	.byte 130,131
	.byte 132,133
	.byte 134,135
	.byte 144,145
	.byte 146,147
	.byte 148,149
	.byte 150,151
	.byte 136,137
	.byte 138,139
	.byte 140,141
	.byte 142,143
	.byte 152,153
	.byte 154,155
	.byte 156,157
	.byte 158,159
	.dbfile E:\单片机\本人实验\重新实验\adc_vcc/lcd.h
	.dbsym e AC_TABLE _AC_TABLE A[32:32]kc
	.area data(ram, con, rel)
	.dbfile E:\单片机\本人实验\重新实验\adc_vcc/lcd.h
_str20::
	.blkb 17
	.area idata
	.byte 187,182,211,173,185,226,193,217,'s,'o,'n,'s,'a,'n,33,33
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\本人实验\重新实验\adc_vcc/lcd.h
	.dbsym e str20 _str20 A[17:17]c
_str10::
	.blkb 65
	.area idata
	.byte 187,198,186,211,212,182,201,207,176,215,212,198,188,228,163,172
	.byte 210,187,198,172,185,194,179,199,205,242,216,240,201,189,161,163
	.byte 199,188,181,209,186,206,208,235,212,185,209,238,193,248,163,172
	.byte 180,186,183,231,178,187,182,200,211,241,195,197,185,216,161,163
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\本人实验\重新实验\adc_vcc/lcd.h
	.dbsym e str10 _str10 A[65:65]c
	.area text(rom, con, rel)
	.dbfile E:\单片机\本人实验\重新实验\adc_vcc/lcd.h
	.dbfunc e DelayKey _DelayKey fV
;              i -> R20,R21
;             ms -> R16,R17
	.even
_DelayKey::
	xcall push_gset1
	.dbline -1
	.dbline 41
;  #include  "iom16v.h"
;  #include  "macros.h"
;  #include  "lcd.h"
;  //#include <stdio.h> 
; // #include <stdlib.h>  //sprintf函数用
;  //#include <string.h>  //字符连接函数用
;  #define  uchar unsigned char
;  #define  uint  unsigned int
;  uchar str[]="电压为      毫伏";
;  uchar  str2[4]  ;
;  float adc_data;  //不能为uint型,否则只显示个位
;  uint vcc;
;  
;  
;  void delay_ms(uchar i)
;  {
;    uchar a,b;
;    for(a=1;a<i;a++)
;      for(b=1;b<141;b++)
; 	 {;}
;  }
;  
; 
; /*****************字符连接函数********************/ 
; /*void strcatenate(char t[], char s[] ) 
; { 
; strcat(t,s); 
; } */
;  
; /****************电压i伏特转换为对应字符*************************/ 
; void change(uint i,uchar *p)		 //显示处理
; {  p[3]=i%10+48;//个
;    p[2]=i/10%10+48;//十
;    p[1]=i/100%10+48;//百
;    p[0]=i/1000%10+48;//千
; }
;  
;  #pragma interrupt_handler adc_end: 15
;  void adc_end(void)
;  {
;  adc_data=(float)(ADCH*4+ADCL/64);
	xjmp L3
L2:
	.dbline 44
; 
;   
;  if (adc_data>3*1024/5) //大于3V PB0亮
	.dbline 45
;    PORTB=~0B001;
	ldi R20,1
	ldi R21,0
	xjmp L8
L5:
	.dbline 46
L6:
	.dbline 45
	subi R20,255  ; offset = 1
	sbci R21,255
L8:
	.dbline 45
	cpi R20,141
	ldi R30,0
	cpc R21,R30
	brlo L5
	.dbline 47
L3:
	.dbline 43
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L2
	tst R3
	brne L2
X0:
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e LCD_WriteByte _LCD_WriteByte fV
;              i -> R20
;          Dbyte -> R16
	.even
_LCD_WriteByte::
	xcall push_gset1
	.dbline -1
	.dbline 52
;  else if (adc_data<0.5*1024/5)  //小于0.5V PB1亮
;    PORTB=~0B010;
;  else
;    PORTB=~0B100;  //0.5~3V PB2亮
;  ADCSRA |= 0X40;
; }
;  
	.dbline 54
; 
; 
	sbi 0x11,6
	.dbline 55
;  void main(void) 
	sbi 0x11,4
	.dbline 57
;  {
;  uchar i=0;
	clr R20
	xjmp L13
L10:
	.dbline 58
;  DDRA=0X00;
	.dbline 59
;  PORTA=0XFF;
	cbi 0x12,6
	.dbline 61
;  DDRB=0XFF;
;  PORTB=0XFF;
	lsl R16
	.dbline 62
;  DDRC=0X00;
	in R2,0x3f
	sbrs R2,0
	rjmp L14
	.dbline 63
;  PORTC=0X00;
	sbi 0x12,4
	xjmp L15
L14:
	.dbline 65
;  /**************配置LCD12864*********************/
;  DDRC |=BIT(6);  //设置输出
	cbi 0x12,4
L15:
	.dbline 67
	sbi 0x12,6
	.dbline 68
	nop
	.dbline 68
	nop
	.dbline 69
	cbi 0x12,6
	.dbline 70
L11:
	.dbline 57
	inc R20
L13:
	.dbline 57
	cpi R20,8
	brlo L10
	.dbline 71
;  PORTC &= ~BIT(6);  //L:serial mode 串行
;  DDRC &= ~BIT(7);  //设置输入
;  PORTC &= ~BIT(7); //LCD的NC脚悬空
;  DDRD &= ~BIT(7);  //设置输入
;  PORTD &= ~BIT(7);  //RST复位低电平有效
;  /*****************************************/ 
	.dbline -2
L9:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Dbyte 16 c
	.dbend
	.dbfunc e LCD_ReadByte _LCD_ReadByte fc
;          temp2 -> R16
;          temp1 -> R18
;              i -> R20
	.even
_LCD_ReadByte::
	xcall push_gset1
	.dbline -1
	.dbline 78
;  DDRD=0X00;
;  PORTD=0XFF;
;  LCD_Init();
;  ADMUX=0X61;  //PA1为AD电压采样通道
;  ADCSRA=0XCB;
;  SEI();
;  while(1)
	.dbline 80
;     {   
;         //strcatenate(str20,str2);	
	clr R16
	clr R18
	.dbline 81
; 		//sprintf(str2,"%f",vcc); // 转换float 到 char 
	sbi 0x11,6
	.dbline 82
; 		vcc=(uint)(adc_data*5000/1024);
	cbi 0x11,4
	.dbline 82
	sbi 0x12,4
	.dbline 84
; 		change( vcc ,str2)	;	 //显示处理
; 		delay_ms(20);
	clr R20
	xjmp L20
L17:
	.dbline 85
;       //  LCD_ClearTXT( );
	.dbline 86
; 		LCD_PutStr(0,0,str); 
	lsl R18
	.dbline 88
;         LCD_PutStr(0,3,str2);  
; 		delay_ms(2);
	cbi 0x12,6
	.dbline 89
; 				//  for(;;)
	nop
	.dbline 89
	nop
	.dbline 90
;                // {
	sbi 0x12,6
	.dbline 91
;                //  continue;
	nop
	.dbline 91
	nop
	.dbline 92
;               //  }   
	cbi 0x12,6
	.dbline 94
; 	}
;  }
	in R24,0x10
	andi R24,16
	swap R24
	andi R24,#0x0F
	breq L21
	.dbline 94
	inc R18
L21:
	.dbline 95
L18:
	.dbline 84
	inc R20
L20:
	.dbline 84
	cpi R20,8
	brlo L17
	.dbline 96
;  }
;  }
	clr R20
	xjmp L26
L23:
	.dbline 97
;  }
	.dbline 98
;  }
	lsl R16
	.dbline 100
;  }
;  }
	cbi 0x12,6
	.dbline 101
;  }
	nop
	.dbline 101
	nop
	.dbline 102
;  }
	sbi 0x12,6
	.dbline 103
;  }
	nop
	.dbline 103
	nop
	.dbline 104
;  }
	cbi 0x12,6
	.dbline 106
;  }
;  }
	in R24,0x10
	andi R24,16
	swap R24
	andi R24,#0x0F
	breq L27
	.dbline 106
	inc R16
L27:
	.dbline 107
L24:
	.dbline 96
	inc R20
L26:
	.dbline 96
	cpi R20,8
	brlo L23
	.dbline 108
;  }
;  }
	mov R24,R16
	andi R24,15
	mov R16,R18
	andi R16,240
	add R16,R24
	.dbline -2
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp2 16 c
	.dbsym r temp1 18 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e LCD_CheckBusy _LCD_CheckBusy fV
	.even
_LCD_CheckBusy::
	.dbline -1
	.dbline 112
;  }
;  }
;  }
;  }
	.dbline 113
;  }
	nop
	.dbline 113
	nop
	.dbline 114
;  }
	xjmp L29
L30:
	.dbline 116
;  }
;  }
	ldi R16,252
	xcall _LCD_WriteByte
L31:
	.dbline 117
;  }
	xcall _LCD_ReadByte
	sbrc R16,7
	rjmp L30
	.dbline -2
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_WriteCmd _LCD_WriteCmd fV
;          Cbyte -> R20
	.even
_LCD_WriteCmd::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 121
;  }
;  }
;  }
;  }
	.dbline 122
;  }
	sbi 0x11,3
	.dbline 122
	sbi 0x12,3
	.dbline 123
;  }
	xcall _LCD_CheckBusy
	.dbline 124
;  }
	ldi R16,248
	xcall _LCD_WriteByte
	.dbline 125
;  }
	mov R16,R20
	andi R16,240
	xcall _LCD_WriteByte
	.dbline 126
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 127
;  }
	mov R16,R20
	andi R16,#0x0F
	swap R16
	andi R16,240
	xcall _LCD_WriteByte
	.dbline 128
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 129
;  }
	sbi 0x11,3
	.dbline 129
	cbi 0x12,3
	.dbline -2
L33:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Cbyte 20 c
	.dbend
	.dbfunc e LCD_WriteData _LCD_WriteData fV
;          Dbyte -> R20
	.even
_LCD_WriteData::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 133
;  }
;  }
;  }
;  }
	.dbline 134
;  }
	sbi 0x11,3
	.dbline 134
	sbi 0x12,3
	.dbline 135
;  }
	xcall _LCD_CheckBusy
	.dbline 136
;  }
	ldi R16,250
	xcall _LCD_WriteByte
	.dbline 137
;  }
	mov R16,R20
	andi R16,240
	xcall _LCD_WriteByte
	.dbline 138
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 139
;  }
	mov R16,R20
	andi R16,#0x0F
	swap R16
	andi R16,240
	xcall _LCD_WriteByte
	.dbline 140
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 141
;  }
	sbi 0x11,3
	.dbline 141
	cbi 0x12,3
	.dbline -2
L34:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Dbyte 20 c
	.dbend
	.dbfunc e LCD_ReadData _LCD_ReadData fc
	.even
_LCD_ReadData::
	.dbline -1
	.dbline 145
;  }
;  }
;  }
;  }
	.dbline 146
;  }
	xcall _LCD_CheckBusy
	.dbline 147
;  }
	ldi R16,254
	xcall _LCD_WriteByte
	.dbline 148
;  }
	xcall _LCD_ReadByte
	.dbline -2
L35:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Init _LCD_Init fV
	.even
_LCD_Init::
	.dbline -1
	.dbline 152
;  }
;  }
;  }
;  }
	.dbline 153
;  }
	ldi R16,2
	ldi R17,0
	xcall _DelayKey
	.dbline 154
;  }
	ldi R16,48
	xcall _LCD_WriteCmd
	.dbline 155
;  }
	ldi R16,2
	ldi R17,0
	xcall _DelayKey
	.dbline 156
;  }
	ldi R16,48
	xcall _LCD_WriteCmd
	.dbline 157
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 158
;  }
	ldi R16,12
	xcall _LCD_WriteCmd
	.dbline 159
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 160
;  }
	ldi R16,1
	xcall _LCD_WriteCmd
	.dbline 161
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 162
;  }
	ldi R16,2
	xcall _LCD_WriteCmd
	.dbline 163
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 164
;  }
	ldi R16,6
	xcall _LCD_WriteCmd
	.dbline 165
;  }
	ldi R16,2
	ldi R17,0
	xcall _DelayKey
	.dbline -2
L36:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_ClearTXT _LCD_ClearTXT fV
;              i -> R20
	.even
_LCD_ClearTXT::
	xcall push_gset1
	.dbline -1
	.dbline 171
;  }
;  }
;  }
;  }
;  }
;  }
	.dbline 173
;  }
;  }
	ldi R16,48
	xcall _LCD_WriteCmd
	.dbline 174
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 175
;  }
	ldi R16,128
	xcall _LCD_WriteCmd
	.dbline 176
;  }
	ldi R16,5
	ldi R17,0
	xcall _DelayKey
	.dbline 177
;  }
	clr R20
	xjmp L41
L38:
	.dbline 178
	ldi R16,32
	xcall _LCD_WriteData
L39:
	.dbline 177
	inc R20
L41:
	.dbline 177
	cpi R20,64
	brlo L38
	.dbline -2
L37:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e LCD_ClearBMP _LCD_ClearBMP fV
;              i -> R20
;              j -> R22
	.even
_LCD_ClearBMP::
	xcall push_gset2
	.dbline -1
	.dbline 184
;  }
;  }
;  }
;  }
;  }
;  }
;  }
	.dbline 186
;  }
;  }
	ldi R16,52
	xcall _LCD_WriteCmd
	.dbline 187
;  }
	ldi R16,54
	xcall _LCD_WriteCmd
	.dbline 188
;  }
	clr R20
	xjmp L46
L43:
	.dbline 189
;  }
	.dbline 190
;  }
	mov R16,R20
	ori R16,128
	xcall _LCD_WriteCmd
	.dbline 191
;  }
	ldi R16,128
	xcall _LCD_WriteCmd
	.dbline 192
;  }
	clr R22
	xjmp L50
L47:
	.dbline 193
	clr R16
	xcall _LCD_WriteData
L48:
	.dbline 192
	inc R22
L50:
	.dbline 192
	cpi R22,32
	brlo L47
	.dbline 194
L44:
	.dbline 188
	inc R20
L46:
	.dbline 188
	cpi R20,32
	brlo L43
	.dbline -2
L42:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e LCD_PutStr _LCD_PutStr fV
;           puts -> R20,R21
;            col -> R22
;            row -> R10
	.even
_LCD_PutStr::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 198
;  }
;  }
;  }
;  }
;  }
;  }
	.dbline 199
;  }
	ldi R16,48
	xcall _LCD_WriteCmd
	.dbline 200
;  }
	ldi R24,8
	mul R24,R10
	movw R30,R0
	mov R2,R22
	clr R3
	add R30,R2
	adc R31,R3
	ldi R24,<_AC_TABLE
	ldi R25,>_AC_TABLE
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _LCD_WriteCmd
	xjmp L53
L52:
	.dbline 202
;  }
;  }
	.dbline 203
;  }
	cpi R22,8
	brne L55
	.dbline 204
;  }
	.dbline 205
;  }
	clr R22
	.dbline 206
;  }
	inc R10
	.dbline 207
;  }
L55:
	.dbline 208
;  }
	mov R24,R10
	cpi R24,4
	brne L57
	.dbline 208
	clr R10
L57:
	.dbline 209
;  }
	ldi R24,8
	mul R24,R10
	movw R30,R0
	mov R2,R22
	clr R3
	add R30,R2
	adc R31,R3
	ldi R24,<_AC_TABLE
	ldi R25,>_AC_TABLE
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _LCD_WriteCmd
	.dbline 210
;  }
	movw R30,R20
	ldd R16,z+0
	xcall _LCD_WriteData
	.dbline 211
;  }
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 212
;  }
	movw R30,R20
	ldd R2,z+0
	tst R2
	breq L54
	.dbline 213
;  }
	.dbline 214
;  }
	ldd R16,z+0
	xcall _LCD_WriteData
	.dbline 215
;  }
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 216
;  }
	.dbline 216
	.dbline 216
L60:
	.dbline 217
	inc R22
	.dbline 218
L53:
	.dbline 201
	movw R30,R20
	ldd R2,z+0
	tst R2
	breq X1
	xjmp L52
X1:
L54:
	.dbline -2
L51:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r puts 20 pc
	.dbsym r col 22 c
	.dbsym r row 10 c
	.dbend
	.dbfunc e LCD_PutBMP _LCD_PutBMP fV
;              i -> R20
;              x -> R22,R23
;              j -> R12
;           puts -> R10,R11
	.even
_LCD_PutBMP::
	xcall push_gset4
	movw R10,R16
	.dbline -1
	.dbline 222
;  }
;  }
;  }
;  }
;  }
;  }
	.dbline 223
;  }
	clr R22
	clr R23
	.dbline 225
;  }
;  }
	ldi R16,52
	xcall _LCD_WriteCmd
	.dbline 226
;  }
	ldi R16,54
	xcall _LCD_WriteCmd
	.dbline 227
;  }
	clr R20
	xjmp L65
L62:
	.dbline 228
;  }
	.dbline 229
;  }
	mov R16,R20
	ori R16,128
	xcall _LCD_WriteCmd
	.dbline 230
;  }
	ldi R16,128
	xcall _LCD_WriteCmd
	.dbline 231
;  }
	clr R12
	xjmp L69
L66:
	.dbline 232
	.dbline 233
	movw R30,R22
	add R30,R10
	adc R31,R11
	lpm R16,Z
	xcall _LCD_WriteData
	.dbline 234
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 235
L67:
	.dbline 231
	inc R12
L69:
	.dbline 231
	mov R24,R12
	cpi R24,32
	brlo L66
	.dbline 236
L63:
	.dbline 227
	inc R20
L65:
	.dbline 227
	cpi R20,32
	brlo L62
	.dbline -2
L61:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r x 22 i
	.dbsym r j 12 c
	.dbsym r puts 10 pkc
	.dbend
	.dbfunc e Disp_Img _Disp_Img fV
;              i -> R20
;              y -> R12
;              j -> R10,R11
;              x -> R14
;            img -> R22,R23
	.even
_Disp_Img::
	xcall push_gset5
	movw R22,R16
	.dbline -1
	.dbline 241
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
	.dbline 241
	clr R10
	clr R11
	.dbline 243
; 
; 
	clr R20
	xjmp L74
L71:
	.dbline 244
; 
	clr R12
	xjmp L78
L75:
	.dbline 245
; 
	clr R14
	xjmp L82
L79:
	.dbline 246
	.dbline 246
	ldi R16,54
	xcall _LCD_WriteCmd
	.dbline 247
	mov R16,R12
	subi R16,128    ; addi 128
	xcall _LCD_WriteCmd
	.dbline 248
	mov R16,R14
	subi R16,128    ; addi 128
	add R16,R20
	xcall _LCD_WriteCmd
	.dbline 249
	ldi R16,48
	xcall _LCD_WriteCmd
	.dbline 250
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	movw R30,R2
	add R30,R22
	adc R31,R23
	lpm R16,Z
	xcall _LCD_WriteData
	.dbline 251
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	movw R30,R2
	add R30,R22
	adc R31,R23
	lpm R16,Z
	xcall _LCD_WriteData
	.dbline 252
L80:
	.dbline 245
	inc R14
L82:
	.dbline 245
	mov R24,R14
	cpi R24,8
	brlo L79
L76:
	.dbline 244
	inc R12
L78:
	.dbline 244
	mov R24,R12
	cpi R24,32
	brsh X2
	xjmp L75
X2:
L72:

⌨️ 快捷键说明

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