📄 main.s
字号:
.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 + -