📄 ad.s
字号:
.module ad.c
.area text(rom, con, rel)
.dbfile D:\垃圾站\00\adc\ad.c
.dbfile D:\垃圾站\00\adc\delay.h
.dbfunc e delay_nus _delay_nus fV
; time -> R16,R17
.even
_delay_nus::
.dbline -1
.dbline 33
; //#define F_CPU 12000000
; #define F_CPU 11059200
; //#define F_CPU 8000000
; //#define F_CPU 7372800
; //#define F_CPU 4000000
; /*************************************************************************
; 通用延时头文件:
; delay_nus(n)延时n微秒
; delay_nms(n)延时n毫秒
; *************************************************************************/
; #if F_CPU == 12000000
; void delay_nus(unsigned int time)
; {
; while (time!=0)
; {
; NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
; time--;
; }
; }
; void delay_nms(unsigned int time)
; {
; unsigned int i;
; while (time!=0)
; {
; for(i=0;i<1740;i++);
; time--;
; }
; }
; #endif
;
; #if F_CPU == 11059200
; void delay_nus(unsigned int time)
; {
xjmp L3
L2:
.dbline 35
; while (time!=0)
; {
.dbline 36
; NOP();NOP();NOP();NOP();NOP();NOP();NOP();
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 37
; time--;
subi R16,1
sbci R17,0
.dbline 38
; }
L3:
.dbline 34
cpi R16,0
cpc R16,R17
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; time -> R16,R17
.even
_delay_nms::
st -y,R20
st -y,R21
.dbline -1
.dbline 41
; }
; void delay_nms(unsigned int time)
; {
xjmp L7
L6:
.dbline 44
; unsigned int i;
; while (time!=0)
; {
.dbline 45
; for(i=0;i<1580;i++);
clr R20
clr R21
xjmp L12
L9:
.dbline 45
L10:
.dbline 45
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 45
cpi R20,44
ldi R30,6
cpc R21,R30
brlo L9
X1:
.dbline 46
; time--;
subi R16,1
sbci R17,0
.dbline 47
; }
L7:
.dbline 43
cpi R16,0
cpc R16,R17
brne L6
X2:
.dbline -2
L5:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.area data(ram, con, rel)
.dbfile D:\垃圾站\00\adc\delay.h
_a::
.blkb 2
.area idata
.byte 48,49
.area data(ram, con, rel)
.dbfile D:\垃圾站\00\adc\delay.h
.blkb 2
.area idata
.byte 50,51
.area data(ram, con, rel)
.dbfile D:\垃圾站\00\adc\delay.h
.blkb 2
.area idata
.byte 52,53
.area data(ram, con, rel)
.dbfile D:\垃圾站\00\adc\delay.h
.blkb 2
.area idata
.byte 54,55
.area data(ram, con, rel)
.dbfile D:\垃圾站\00\adc\delay.h
.blkb 2
.area idata
.byte 56,57
.area data(ram, con, rel)
.dbfile D:\垃圾站\00\adc\delay.h
.dbfile D:\垃圾站\00\adc\lcd.h
.dbsym e a _a A[10:10]c
_ADbz::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\垃圾站\00\adc\lcd.h
.dbsym e ADbz _ADbz c
.area text(rom, con, rel)
.dbfile D:\垃圾站\00\adc\lcd.h
.dbfunc e delay _delay fV
; i -> R10
; n -> R16
.even
_delay::
st -y,R10
st -y,R11
.dbline -1
.dbline 8
; unsigned char a[10]={'0','1','2','3','4','5','6','7','8','9'};
; unsigned char ADtmp,ADbz=0;
; #define LCD_DATAL PORTA&=~BIT(1)
; #define LCD_DATAH PORTA|=BIT(1)
; #define LCD_CLKL PORTA&=~BIT(3)
; #define LCD_CLKH PORTA|=BIT(3)
; void delay(unsigned char n)
; {
.dbline 10
; unsigned char i;
; for(i=0;i<n;i++) //延时
clr R10
xjmp L17
L14:
.dbline 11
; {asm("nop");}
.dbline 11
nop
.dbline 11
L15:
.dbline 10
inc R10
L17:
.dbline 10
cp R10,R16
brlo L14
X3:
.dbline -2
L13:
.dbline 0 ; func end
ld R11,y+
ld R10,y+
ret
.dbsym r i 10 c
.dbsym r n 16 c
.dbend
.dbfunc e lcd_out _lcd_out fV
; s -> <dead>
; i -> R20
; send_byte -> R10
.even
_lcd_out::
xcall push_xgset300C
mov R10,R16
.dbline -1
.dbline 17
; }
; //*************************************************************************
;
; //***************************************************************************
; void lcd_out(unsigned char send_byte)
; {
.dbline 19
; unsigned char i,s;
; for (i=0;i<8;i++)
clr R20
xjmp L22
L19:
.dbline 20
; {
.dbline 21
; if((send_byte&0x80)==0)
sbrc R10,7
rjmp L23
X4:
.dbline 22
; {
.dbline 23
; LCD_DATAL;
cbi 0x1b,1
.dbline 24
; }
xjmp L24
L23:
.dbline 26
; else
; {
.dbline 27
; LCD_DATAH;
sbi 0x1b,1
.dbline 28
; } //送数据
L24:
.dbline 29
; LCD_CLKL;
cbi 0x1b,3
.dbline 30
; LCD_CLKH;
sbi 0x1b,3
.dbline 31
; send_byte=send_byte<<1;
lsl R10
.dbline 32
; }
L20:
.dbline 19
inc R20
L22:
.dbline 19
cpi R20,8
brlo L19
X5:
.dbline 33
; delay(256);
ldi R16,0
xcall _delay
.dbline -2
L18:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym l s 1 c
.dbsym r i 20 c
.dbsym r send_byte 10 c
.dbend
.dbfunc e WR_dat _WR_dat fV
; s -> R20
; dat -> R22
.even
_WR_dat::
xcall push_xgsetF000
mov R22,R16
.dbline -1
.dbline 38
; }
; //***************************************************************************
;
; void WR_dat(unsigned char dat)
; {
.dbline 40
; unsigned char s;
; s=dat&0xf0;
mov R20,R22
andi R20,240
.dbline 41
; lcd_out(0xfa);
ldi R16,250
xcall _lcd_out
.dbline 42
; lcd_out(s);
mov R16,R20
xcall _lcd_out
.dbline 43
; s=dat&0x0f;
mov R20,R22
andi R20,15
.dbline 44
; s<<=4;
mov R24,R20
andi R24,#0x0F
swap R24
mov R20,R24
.dbline 45
; lcd_out(s);
mov R16,R24
xcall _lcd_out
.dbline -2
L25:
.dbline 0 ; func end
xjmp pop_xgsetF000
.dbsym r s 20 c
.dbsym r dat 22 c
.dbend
.dbfunc e WR_control _WR_control fV
; s -> R20
; dat -> R22
.even
_WR_control::
xcall push_xgsetF000
mov R22,R16
.dbline -1
.dbline 49
; }
; //**************************************************************************
; void WR_control(unsigned char dat)
; {
.dbline 51
; unsigned char s;
; s=dat&0xf0;
mov R20,R22
andi R20,240
.dbline 52
; lcd_out(0xf8);
ldi R16,248
xcall _lcd_out
.dbline 53
; lcd_out(s);
mov R16,R20
xcall _lcd_out
.dbline 54
; s=dat&0x0f;
mov R20,R22
andi R20,15
.dbline 55
; s<<=4;
mov R24,R20
andi R24,#0x0F
swap R24
mov R20,R24
.dbline 56
; lcd_out(s);
mov R16,R24
xcall _lcd_out
.dbline -2
L26:
.dbline 0 ; func end
xjmp pop_xgsetF000
.dbsym r s 20 c
.dbsym r dat 22 c
.dbend
.dbfunc e lcd_control _lcd_control fV
.even
_lcd_control::
.dbline -1
.dbline 60
; }
; //**************************************************************************
; void lcd_control()
; {
.dbline 61
; WR_control(0x30);
ldi R16,48
xcall _WR_control
.dbline 62
; WR_control(0x0c);
ldi R16,12
xcall _WR_control
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_clear _lcd_clear fV
; i -> R20,R21
.even
_lcd_clear::
st -y,R20
st -y,R21
.dbline -1
.dbline 66
; }
; //**************************************************************************
; void lcd_clear()
; {
.dbline 68
; int i;
; WR_control(0x01);
ldi R16,1
xcall _WR_control
.dbline 69
; for(i=0;i<5000;i++) // 延时5ms
clr R20
clr R21
L29:
.dbline 70
; {
.dbline 71
; asm("nop");
nop
.dbline 72
; asm("nop");
nop
.dbline 74
;
; }
L30:
.dbline 69
subi R20,255 ; offset = 1
sbci R21,255
.dbline 69
cpi R20,136
ldi R30,19
cpc R21,R30
brlt L29
X6:
.dbline -2
L28:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 I
.dbend
.dbfunc e LCD_address _LCD_address fV
; address -> R20
; y -> R22
; x -> R10
.even
_LCD_address::
xcall push_xgsetF00C
mov R22,R18
mov R10,R16
.dbline -1
.dbline 83
; }
; /*******************************************************/
; /****** 函数名称: LCD_set_xy() ******/
; /****** 功 能: 设置LCD显示坐标 ******/
; /****** 参 数: 显示字符串的位置,X:0-15,Y:0-1*****/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void LCD_address( unsigned char x, unsigned char y )
; {
.dbline 85
; unsigned char address;
; switch(x)
mov R20,R10
clr R21
cpi R20,0
cpc R20,R21
breq L37
X7:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L38
X8:
cpi R20,2
ldi R30,0
cpc R21,R30
breq L39
X9:
cpi R20,3
ldi R30,0
cpc R21,R30
breq L40
X10:
xjmp L34
L37:
.dbline 88
; {
; case 0:
; address = 0x80 + y+1; //计算显示地址
mov R20,R22
subi R20,127 ; addi 129
.dbline 89
; break;
xjmp L35
L38:
.dbline 91
; case 1:
; address = 0x90 + y+1; //计算显示地址
mov R20,R22
subi R20,111 ; addi 145
.dbline 92
; break;
xjmp L35
L39:
.dbline 94
; case 2:
; address = 0x88 + y+1; //计算显示地址
mov R20,R22
subi R20,119 ; addi 137
.dbline 95
; break;
xjmp L35
L40:
.dbline 97
; case 3:
; address = 0x98 + y+1; //计算显示地址
mov R20,R22
subi R20,103 ; addi 153
.dbline 98
; break;
xjmp L35
L34:
.dbline 99
; default:address = 0x80 + y;
mov R20,R22
subi R20,128 ; addi 128
.dbline 100
; }
L35:
.dbline 101
; WR_control( address); //写地址命令
mov R16,R20
xcall _WR_control
.dbline -2
L33:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r address 20 c
.dbsym r y 22 c
.dbsym r x 10 c
.dbend
.dbfunc e LCD_Write_string _LCD_Write_string fV
; s -> R20,R21
; Y -> R12
; X -> R10
.even
_LCD_Write_string::
xcall push_xgset303C
mov R12,R18
mov R10,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 112
; }
; //**************************************************************************
; /*******************************************************/
; /****** 函数名称: LCD_write_string() ******/
; /****** 功 能: 中英文字符串显示函数 ******/
; /****** 参 数: *s--英文字符串指针 ******/
; /****** X、Y--显示字符串的位置 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
; {
.dbline 114
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -