📄 no2.s
字号:
; #define RIGHT 1
; #define CMD 0
; #define DATA 1
; #define LCD_STATUS_BUSY 0x80
; #define START_LINE0 0xc0
; #define DISPLAY_ON 0x3f
; #define DISPLAY_OFF 0x3e
; #define PARA1 0x40
; /*-----------------------------------------------------------------------
; 延时函数
; 系统时钟:8M
; -----------------------------------------------------------------------*/
;
; uchar time_logo[5][32] = {
; /*-- 文字: 时 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
; 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
;
; /*-- 文字: 爱 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x40,0xB0,0x92,0x96,0x9A,0x92,0xF2,0x9E,0x92,0x91,0x99,0x95,0x91,0x50,0x30,0x00,
; 0x00,0x00,0x40,0x30,0x8C,0x83,0x46,0x2A,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,0x00,
;
; /*-- 文字: 你 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
; 0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00,
; /*-- 文字: 我 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x20,0x24,0x24,0x24,0xfe,0x23,0x22,0x20,0xFF,0x20,0x22,0xac,0x20,0x30,0x20,0x00,
; 0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,
;
; };
;
; uchar menu[5][32] = {
; /*-- 文字: 一 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0x00,
; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; /*-- 文字: 二 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x008,0x0c,0x08,0x00,0x00,0x00,
; 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
; /*-- 文字: 三 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x084,0xc4,0x86,0x04,0x00,0x00,
; 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
; /*-- 文字: 四 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x00,0xfc,0x04,0x04,0x04,0xfc,0x04,0x04,0x04,0xfc,0x004,0x04,0x04,0xfe,0x04,0x00,
; 0x00,0x7f,0x20,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x20,0x22,0x22,0x7f,0x00,0x00,
;
; };
;
;
; void delay_1us(void); //1us延时函数
; void delay_nus(unsigned int n); //N us延时函数
; void delay_1ms(void) ; //1ms延时函数
; void delay_nms(unsigned int n) ; //N ms延时函数
;
; /***********************************************************************/
; /**********************************************************************/
; void delay_1us(void) //1us延时函数
; {
.dbline 72
; asm("nop");
nop
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R10,R11
; n -> R12,R13
.even
_delay_nus::
xcall push_xgset003C
movw R12,R16
.dbline -1
.dbline 76
; }
;
; void delay_nus(unsigned int n) //N us延时函数
; {
.dbline 77
; unsigned int i=0;
clr R10
clr R11
.dbline 78
; for (i=0;i<n;i++)
xjmp L6
L3:
.dbline 79
; delay_1us();
xcall _delay_1us
L4:
.dbline 78
movw R24,R10
adiw R24,1
movw R10,R24
L6:
.dbline 78
cp R10,R12
cpc R11,R13
brlo L3
X0:
.dbline -2
L2:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r i 10 i
.dbsym r n 12 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 83
; }
;
; void delay_1ms(void) //1ms延时函数
; {
.dbline 85
; unsigned int i;
; for (i=0;i<1140;i++);
clr R16
clr R17
xjmp L11
L8:
.dbline 85
L9:
.dbline 85
subi R16,255 ; offset = 1
sbci R17,255
L11:
.dbline 85
cpi R16,116
ldi R30,4
cpc R17,R30
brlo L8
X1:
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R10,R11
; n -> R12,R13
.even
_delay_nms::
xcall push_xgset003C
movw R12,R16
.dbline -1
.dbline 89
; }
;
; void delay_nms(unsigned int n) //N ms延时函数
; {
.dbline 90
; unsigned int i=0;
clr R10
clr R11
.dbline 91
; for (i=0;i<n;i++)
xjmp L16
L13:
.dbline 92
; {
.dbline 93
; delay_1ms();
xcall _delay_1ms
.dbline 94
; }
L14:
.dbline 91
movw R24,R10
adiw R24,1
movw R10,R24
L16:
.dbline 91
cp R10,R12
cpc R11,R13
brlo L13
X2:
.dbline -2
L12:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r i 10 i
.dbsym r n 12 i
.dbend
.dbfunc e delay _delay fV
; i -> R10,R11
; j -> R12,R13
; ms -> R16,R17
.even
_delay::
xcall push_xgset003C
.dbline -1
.dbline 98
; }
;
; void delay(uint ms)
; {
.dbline 100
; uint i,j;
; for(i=0;i<ms;i++)
clr R10
clr R11
xjmp L21
L18:
.dbline 101
; {
.dbline 102
; for(j=0;j<1141;j++);
clr R12
clr R13
xjmp L25
L22:
.dbline 102
L23:
.dbline 102
movw R24,R12
adiw R24,1
movw R12,R24
L25:
.dbline 102
movw R24,R12
cpi R24,117
ldi R30,4
cpc R25,R30
brlo L22
X3:
.dbline 103
; }
L19:
.dbline 100
movw R24,R10
adiw R24,1
movw R10,R24
L21:
.dbline 100
cp R10,R16
cpc R11,R17
brlo L18
X4:
.dbline -2
L17:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r i 10 i
.dbsym r j 12 i
.dbsym r ms 16 i
.dbend
.dbfunc e Lcd_Write_Byte _Lcd_Write_Byte fV
; temp -> R16
.even
_Lcd_Write_Byte::
.dbline -1
.dbline 106
; }
; void Lcd_Write_Byte(uchar temp)
; {
.dbline 107
; PORTB|=BIT(0);
sbi 0x18,0
.dbline 108
; PORTB&=~BIT(1); //W
cbi 0x18,1
.dbline 109
; PORTB|=BIT(4); //E使能
sbi 0x18,4
.dbline 110
; DDRA=0xff; //a输出
ldi R24,255
out 0x1a,R24
.dbline 111
; PORTA=temp;
out 0x1b,R16
.dbline 112
; asm("nop");
nop
.dbline 113
; asm("nop");
nop
.dbline 114
; asm("nop");
nop
.dbline 115
; asm("nop");
nop
.dbline 116
; PORTB&=~BIT(4);
cbi 0x18,4
.dbline 117
; PORTA=0xff;
out 0x1b,R24
.dbline -2
L26:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbend
.dbfunc e Lcd_Write_COM _Lcd_Write_COM fV
; COL -> R16
.even
_Lcd_Write_COM::
.dbline -1
.dbline 120
; }
; void Lcd_Write_COM(uchar COL)
; {
.dbline 121
; PORTB&=~BIT(0);
cbi 0x18,0
.dbline 122
; PORTB&=~BIT(1); //W
cbi 0x18,1
.dbline 123
; PORTB|=BIT(4); //E使能
sbi 0x18,4
.dbline 124
; DDRA=0xff; //a输出
ldi R24,255
out 0x1a,R24
.dbline 125
; PORTA=COL;
out 0x1b,R16
.dbline 126
; asm("nop");
nop
.dbline 127
; asm("nop");
nop
.dbline 128
; asm("nop");
nop
.dbline 129
; asm("nop");
nop
.dbline 130
; PORTB&=~BIT(4);
cbi 0x18,4
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbsym r COL 16 c
.dbend
.dbfunc e set_page_L _set_page_L fV
; page -> R10
.even
_set_page_L::
st -y,R10
mov R10,R16
.dbline -1
.dbline 136
;
; }
;
;
; void set_page_L(unsigned char page) /*设置X地址 设置页*/ //0-7
; {
.dbline 137
; Lcd_Write_COM(0xb8|page);
mov R16,R10
ori R16,184
xcall _Lcd_Write_COM
.dbline -2
L28:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r page 10 c
.dbend
.dbfunc e set_page_R _set_page_R fV
; page -> R10
.even
_set_page_R::
st -y,R10
mov R10,R16
.dbline -1
.dbline 140
; }
; void set_page_R(unsigned char page) /*设置X地址 设置页*/ //0-7
; {
.dbline 141
; Lcd_Write_COM(0xb8|page);
mov R16,R10
ori R16,184
xcall _Lcd_Write_COM
.dbline -2
L29:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r page 10 c
.dbend
.dbfunc e set_col_addr_L _set_col_addr_L fV
; col -> R10
.even
_set_col_addr_L::
st -y,R10
mov R10,R16
.dbline -1
.dbline 145
; }
;
; void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
; {
.dbline 147
;
; Lcd_Write_COM(0x40|col);
mov R16,R10
ori R16,64
xcall _Lcd_Write_COM
.dbline -2
L30:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r col 10 c
.dbend
.dbfunc e set_col_addr_R _set_col_addr_R fV
; col -> R10
.even
_set_col_addr_R::
st -y,R10
mov R10,R16
.dbline -1
.dbline 151
; }
;
; void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
; {
.dbline 152
; Lcd_Write_COM(0x40|col);
mov R16,R10
ori R16,64
xcall _Lcd_Write_COM
.dbline -2
L31:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r col 10 c
.dbend
.dbfunc e Lcd_Set_X_Y _Lcd_Set_X_Y fV
; y -> R12
; x -> R10
.even
_Lcd_Set_X_Y::
st -y,R10
st -y,R12
mov R12,R18
mov R10,R16
.dbline -1
.dbline 163
; }
;
;
; /********************************************************************************************
; * 函数名称:Lcd_Set_X_Y(uchar x, uchar y )
; * 功 能:LCD设置x y坐标
; * 入口参数:x y
; * 出口参数:无
; *********************************************************************************************/
; void Lcd_Set_X_Y(uchar x, uchar y)
; {
.dbline 164
; if(y<64)
mov R24,R12
cpi R24,64
brsh L33
X5:
.dbline 165
; { PORTB&=~BIT(3);
.dbline 165
cbi 0x18,3
.dbline 166
; PORTB|=BIT(2);
sbi 0x18,2
.dbline 168
;
; set_col_addr_L(y);
mov R16,R24
xcall _set_col_addr_L
.dbline 169
; }
xjmp L34
L33:
.dbline 171
; else
; {
.dbline 172
; PORTB|=BIT(3);
sbi 0x18,3
.dbline 173
; PORTB&=~BIT(2);
cbi 0x18,2
.dbline 174
; set_col_addr_R(y);
mov R16,R12
xcall _set_col_addr_R
.dbline 175
; }
L34:
.dbline 176
; set_page_L( x);
mov R16,R10
xcall _set_page_L
.dbline 177
; set_page_R( x);
mov R16,R10
xcall _set_page_R
.dbline -2
L32:
.dbline 0 ; func end
ld R12,y+
ld R10,y+
ret
.dbsym r y 12 c
.dbsym r x 10 c
.dbend
.dbfunc e Lcd_Character_16X16 _Lcd_Character_16X16 fV
; temp -> y+0
; i -> R10
; j -> R12
; point -> y+11
; y -> R14
; x -> y+7
; bit_flag -> R10
.even
_Lcd_Character_16X16::
st -y,r19
st -y,r18
xcall push_xgset00FC
mov R10,R16
sbiw R28,1
ldd R14,y+9
.dbline -1
.dbline 188
; }
;
; /****************************************************************************
; * 名称:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
; * 功能:显示16*16字符(汉字)
; * 入口参数:x y data
; * 出口参数:无
; *说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
; ****************************************************************************/
; void Lcd_Character_16X16( uchar bit_flag, uchar x, uchar y, uchar *point )
; {
.dbline 190
; uchar i,j,temp ;
; temp=y;
std y+0,R14
.dbline 191
; if( bit_flag )
tst R10
breq L36
X6:
.dbline 192
; {
.dbline 193
; for( i=0; i<2; i++ )
clr R10
xjmp L41
L38:
.dbline 194
; {
.dbline 195
; x+=i;
ldd R0,y+7
add R0,R10
std y+7,R0
.dbline 196
; y=temp;
ldd R14,y+0
.dbline 197
; for( j=0;j<16;j++ )
clr R12
xjmp L45
L42:
.dbline 198
; {
.dbline 199
; Lcd_Set_X_Y( x, y ); y++;
mov R18,R14
ldd R16,y+7
xcall _Lcd_Set_X_Y
.dbline 199
inc R14
.dbline 200
; Lcd_Write_Byte( point[ i*16 + j] );
ldi R24,16
mul R24,R10
movw R30,R0
mov R2,R12
clr R3
add R30,R2
adc R31,R3
ldd R0,y+11
ldd R1,y+12
add R30,R0
adc R31,R1
ldd R16,z+0
xcall _Lcd_Write_Byte
.dbline 201
; }
L43:
.dbline 197
inc R12
L45:
.dbline 197
mov R24,R12
cpi R24,16
brlo L42
X7:
.dbline 202
; }
L39:
.dbline 193
inc R10
L41:
.dbline 193
mov R24,R10
cpi R24,2
brlo L38
X8:
.dbline 203
; }
xjmp L37
L36:
.dbline 205
; else
; {
.dbline 206
; for( i =0; i<2; i++ )
clr R10
xjmp L49
L46:
.dbline 207
; {
.dbline 208
; x+=i;
ldd R0,y+7
add R0,R10
std y+7,R0
.dbline 209
; y=temp;
ldd R14,y+0
.dbline 210
; for( j = 0; j < 16; j++ )
clr R12
xjmp L53
L50:
.dbline 211
; {
.dbline 212
; Lcd_Set_X_Y( x, y );
mov R18,R14
ldd R16,y+7
xcall _Lcd_Set_X_Y
.dbline 213
; y++;
inc R14
.dbline 214
; Lcd_Write_Byte( ~ point[ i * 16 + j ] );
ldi R24,16
mul R24,R10
movw R30,R0
mov R2,R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -