📄 avr320240.s
字号:
.module avr320240.c
.area text(rom, con, rel)
.dbfile D:\iccv7avr\AVR_C320240\avr320240.c
.area lit(rom, con, rel)
_ParaSysTable8::
.byte 48,135
.byte 7,39
.byte 'B,240
.byte 40,0
.dbsym e ParaSysTable8 _ParaSysTable8 A[8:8]kc
_ParaScrTableA::
.byte 0,0
.byte 240,0
.byte 64,240
.byte 0,128
.byte 0,0
.dbsym e ParaScrTableA _ParaScrTableA A[10:10]kc
.area text(rom, con, rel)
.dbfile D:\iccv7avr\AVR_C320240\avr320240.c
.dbfunc e userinit _userinit fV
.even
_userinit::
.dbline -1
.dbline 83
; /******************************************************************************
; **
; ** 西安博控电子科技有限公司.
; **
; ** 文件名: C320240.C
; **
; ** 用途: C320240 LCM 底层驱动函数库
; **
; ** 编译环境:ICCAVR 7.0
; ** 修改时间: $ 2007 年 10月 11日 shw$
; ******************************************************************************/
;
; #include "avr320240.h"
; //#include "ascii.h"
; //#include "HZK.h"
; unsigned char const hzdot[];
; unsigned char const ASC_MSK[];
; unsigned int const hzIndex[];
; //--------------------------------------------------------------------------
; //控制器SED1335 相关命令和参数定义
; #define SystemSet 0x40
; Uchar const ParaSysTable8[]= {
; 0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00 // P1-P8参数
; };
; #define Scroll 0x44
; #define BasePart1 0x00
; #define BasePart2 0x40
; #define BasePart3 0x80
; #define BasePart4 0x00
; Uchar const ParaScrTableA[]= {
; 0x00,BasePart1,0xF0,0x00,BasePart2,0xF0,0x00,BasePart3,0x00,BasePart4
; };
; #define SleepIn 0x53
; #define DispOn 0x59
; #define DispOff 0x58
; #define Ovlay 0x5b
; #define HdotScr 0x5a
; #define CsrForm 0x5d
; #define CgramAdr 0x5c
; #define CsrDirR 0x4c
; #define CsrDirL 0x4d
; #define CsrDirU 0x4e
; #define CsrDirD 0x4f
; #define CsrW 0x46
; #define CsrR 0x47
; #define mWrite 0x42
; #define mRead 0x43
; //bit wAttrib;
; #define Busy 0x40
; #define paraP9 0x28
; //--------------------------------------------------------------------------
;
;
; //extern const Uchar code ASC_MSK[];
;
;
; //信号引脚连接定义
; //--------------------------------------------------------------------------
;
; #define databus PORTA
; /*
; sbit a0=P1^3;
; sbit read=P1^1;
; sbit write=P1^0;
;
; sbit cs=P1^2;
; sbit rst=P1^4;
; */
;
; //---------------------------------------------------------------------------
; /******************************************************************************
; ** 函数名: void userinit(void)
;
; ** 描述: 用户初始化
;
; ** 修改的全局变量:
;
; ** 输入参数:
;
; ** 返回值:
; *******************************************************************************/
; void userinit(void)
; {
.dbline 84
; Delay(30);
ldi R16,30
ldi R17,0
xcall _Delay
.dbline 85
; LcmInition();
xcall _LcmInition
.dbline 86
; WriteCommand(DispOff);
ldi R16,88
xcall _WriteCommand
.dbline 87
; LcmClear();
xcall _LcmClear
.dbline 88
; WriteCommand(DispOn);
ldi R16,89
xcall _WriteCommand
.dbline 89
; WriteCommand( Ovlay );
ldi R16,91
xcall _WriteCommand
.dbline 90
; WriteData( 0x0C );
ldi R16,12
xcall _WriteData
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Displayonebmp _Displayonebmp fV
; i -> R22
; X -> R20,R21
; j -> R12
; puts -> R10,R11
.even
_Displayonebmp::
xcall push_xgsetF03C
movw R10,R16
.dbline -1
.dbline 105
; }
;
; /******************************************************************************
; ** 函数名: void Displayonebmp (Uchar *puts)
;
; ** 描述: 显示一幅320*240点阵图片
;
; ** 修改的全局变量:
;
; ** 输入参数: Uchar *puts :图片所在地址
;
; ** 返回值:
; *******************************************************************************/
; void Displayonebmp (Uchar *puts) //显示320*240图片
; {
.dbline 108
; Uint X;
; Uchar i,j;
; X=0;
clr R20
clr R21
.dbline 109
; WriteCommand( CsrDirR );
ldi R16,76
xcall _WriteCommand
.dbline 110
; WriteCommand( CsrW );
ldi R16,70
xcall _WriteCommand
.dbline 111
; WriteData(0);
clr R16
xcall _WriteData
.dbline 112
; WriteData(0);
clr R16
xcall _WriteData
.dbline 113
; WriteCommand( mWrite );
ldi R16,66
xcall _WriteCommand
.dbline 114
; for(i=0;i<240;i++)
clr R22
xjmp L6
L3:
.dbline 115
; {
.dbline 116
; for(j=0;j<40;j++)
clr R12
xjmp L10
L7:
.dbline 117
; {
.dbline 118
; WriteData(puts[X]);
movw R30,R20
add R30,R10
adc R31,R11
ldd R16,z+0
xcall _WriteData
.dbline 119
; X++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 120
; }
L8:
.dbline 116
inc R12
L10:
.dbline 116
mov R24,R12
cpi R24,40
brlo L7
X0:
.dbline 121
; }
L4:
.dbline 114
inc R22
L6:
.dbline 114
cpi R22,240
brlo L3
X1:
.dbline -2
L2:
.dbline 0 ; func end
xjmp pop_xgsetF03C
.dbsym r i 22 c
.dbsym r X 20 i
.dbsym r j 12 c
.dbsym r puts 10 pc
.dbend
.dbfunc e LCD_putpixel _LCD_putpixel fV
; C_H -> R10
; C_L -> R12
; dot_sum -> y+0
; shift -> R20
; Ry -> R10,R11
; Rx -> R20,R21
.even
_LCD_putpixel::
xcall push_xgset303C
movw R10,R18
movw R20,R16
sbiw R28,4
.dbline -1
.dbline 137
;
; }
;
; /******************************************************************************
; ** 函数名: void LCD_putpixel(Uint Rx,Uint Ry)
;
; ** 描述: 在指定位置显示一个点
;
; ** 修改的全局变量:
;
; ** 输入参数: Rx:0-319;Ry:0-239
;
; ** 返回值:
; *******************************************************************************/
; void LCD_putpixel(Uint Rx,Uint Ry) //
; {
.dbline 141
; Uchar shift;
; unsigned long dot_sum;
; Uchar C_L,C_H;
; dot_sum=Ry*40+(Rx/8);
ldi R16,40
ldi R17,0
movw R18,R10
xcall empy16s
movw R2,R16
movw R4,R20
lsr R5
ror R4
lsr R5
ror R4
lsr R5
ror R4
add R2,R4
adc R3,R5
clr R4
clr R5
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 142
; C_L=(Uchar)dot_sum;
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
mov R12,R2
.dbline 143
; C_H=(Uchar)(dot_sum>>8);
ldi R24,8
ldi R25,0
movw R16,R2
movw R18,R4
st -y,R24
xcall lsr32
mov R10,R16
.dbline 144
; shift=Rx%8;
andi R20,7
andi R21,0
.dbline 145
; shift=8-shift-1;
ldi R24,8
sub R24,R20
mov R20,R24
subi R20,1
.dbline 146
; WriteCommand( CsrDirR );
ldi R16,76
xcall _WriteCommand
.dbline 147
; WriteCommand( CsrW );
ldi R16,70
xcall _WriteCommand
.dbline 148
; WriteData(C_L); //CSRL
mov R16,R12
xcall _WriteData
.dbline 149
; WriteData(C_H); //CSRH
mov R16,R10
xcall _WriteData
.dbline 150
; WriteCommand( mWrite );
ldi R16,66
xcall _WriteCommand
.dbline 151
; WriteData( (1<<shift) );
ldi R16,1
mov R17,R20
xcall lsl8
xcall _WriteData
.dbline -2
L11:
.dbline 0 ; func end
adiw R28,4
xjmp pop_xgset303C
.dbsym r C_H 10 c
.dbsym r C_L 12 c
.dbsym l dot_sum 0 l
.dbsym r shift 20 c
.dbsym r Ry 10 i
.dbsym r Rx 20 i
.dbend
.dbfunc e LCD_put8pixel _LCD_put8pixel fV
; C_H -> R10
; C_L -> R12
; dot_sum -> y+0
; dat -> y+8
; Ry -> R12,R13
; Rx -> R10,R11
.even
_LCD_put8pixel::
xcall push_xgset003C
movw R12,R18
movw R10,R16
sbiw R28,4
.dbline -1
.dbline 156
; }
;
;
; void LCD_put8pixel(Uint Rx,Uint Ry,Uchar dat) //水平8点 x:0-312;y:0-239
; {
.dbline 159
; unsigned long dot_sum;
; Uchar C_L,C_H;
; dot_sum=Ry*40+(Rx/8);
ldi R16,40
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
movw R4,R10
lsr R5
ror R4
lsr R5
ror R4
lsr R5
ror R4
add R2,R4
adc R3,R5
clr R4
clr R5
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 160
; C_L=(Uchar)dot_sum;
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
mov R12,R2
.dbline 161
; C_H=(Uchar)(dot_sum>>8);
ldi R24,8
ldi R25,0
movw R16,R2
movw R18,R4
st -y,R24
xcall lsr32
mov R10,R16
.dbline 162
; WriteCommand( CsrDirR );
ldi R16,76
xcall _WriteCommand
.dbline 163
; WriteCommand( CsrW );
ldi R16,70
xcall _WriteCommand
.dbline 164
; WriteData(C_L); //CSRL
mov R16,R12
xcall _WriteData
.dbline 165
; WriteData(C_H); //CSRH
mov R16,R10
xcall _WriteData
.dbline 166
; WriteCommand( mWrite );
ldi R16,66
xcall _WriteCommand
.dbline 167
; WriteData(dat);
ldd R16,y+8
xcall _WriteData
.dbline -2
L12:
.dbline 0 ; func end
adiw R28,4
xjmp pop_xgset003C
.dbsym r C_H 10 c
.dbsym r C_L 12 c
.dbsym l dot_sum 0 l
.dbsym l dat 8 c
.dbsym r Ry 12 i
.dbsym r Rx 10 i
.dbend
.dbfunc e line _line fV
; E_Y -> R3,R4
; E_X -> R2,R3
; S_Y -> R1,R2
; S_X -> R0,R1
.even
_line::
.dbline -1
.dbline 184
; }
;
; /******************************************************************************
; ** 函数名: void line(Uint S_X,Uint S_Y,Uint E_X,Uint E_Y)
;
; ** 描述: 指定起点和终点画一条直线,
;
; ** 修改的全局变量:
;
; ** 输入参数: Uint S_X,Uint S_Y :起点坐标
;
; ** Uint E_X,Uint E_Y :终点坐标
;
; ** 返回值:
; *******************************************************************************/
; void line(int S_X,int S_Y,int E_X,int E_Y)
; {
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbsym l E_Y 6 I
.dbsym l E_X 4 I
.dbsym l S_Y 2 I
.dbsym l S_X 0 I
.dbend
.dbfunc e Delay _Delay fV
; usn -> R20
; us -> R22
; MS -> R16,R17
.even
_Delay::
st -y,R20
st -y,R22
.dbline -1
.dbline 250
; /*
; float K;
; Uint i,LEN;
; int B;
; Uchar dat;
; long X,Y;
; //--------------------------------------------------------------
; //斜率无穷大
; if(E_X==S_X)
; {
; if(S_Y<E_Y)LEN=E_Y-S_Y;
; else LEN=S_Y-E_Y;
; X=S_X;
; for(i=0;i<LEN;i++)
; {
; if(S_Y<E_Y)
; Y=S_Y+i;
; else Y=E_Y+i;
; LCD_putpixel(X,Y);
; }
; return ;
; }
; //----------------------------------------------------------------
; //斜率为0
; if(S_Y==E_Y)
; {
; if(S_X<E_X)LEN=E_X-S_X;
; else LEN=S_X-E_X;
; Y=S_Y;
; LEN=LEN-( (LEN+1)%8);
; for(i=0;i<LEN;i=i+8)
; {
; if(S_X<S_Y)
; X=S_X+i;
; else X=E_X+i;
; LCD_put8pixel(X,Y,0xff);
; }
; if( (LEN+1)%8 )
; {
; dat=0xff;
; for(i=0;i<(8-LEN%8);i++)
; {
; dat=dat-i*2;
; LCD_put8pixel(X+8,Y,dat);
; }
; }
; return;
; }
; //----------------------------------------------------------------
; K=(float)(E_Y-S_Y);
; K=K/(float)(E_X-S_X);
; B=S_Y-S_X*K;
; if(S_X<E_X)LEN=E_X-S_X;
; else LEN=S_X-E_X;
; for(i=0;i<LEN;i++)
; {
; X=(S_X)+i;
; Y=(K*((S_X)+i)+B);
; LCD_putpixel(X,Y);
; }
; */
; }
;
;
; void Delay(Uint MS)
; {
xjmp L16
L15:
.dbline 253
; Uchar us,usn;
; while(MS!=0)
; { usn = 4;
.dbline 253
ldi R20,4
xjmp L19
L18:
.dbline 255
; while(usn!=0)
; {
.dbline 256
; us=0xf0;
ldi R22,240
xjmp L22
L21:
.dbline 257
; while (us!=0){us--;};
.dbline 257
dec R22
.dbline 257
L22:
.dbline 257
tst R22
brne L21
X2:
.dbline 257
.dbline 258
; usn--;
dec R20
.dbline 259
; }
L19:
.dbline 254
tst R20
brne L18
X3:
.dbline 260
; MS--;
subi R16,1
sbci R17,0
.dbline 261
; }
L16:
.dbline 252
cpi R16,0
cpc R16,R17
brne L15
X4:
.dbline -2
L14:
.dbline 0 ; func end
ld R22,y+
ld R20,y+
ret
.dbsym r usn 20 c
.dbsym r us 22 c
.dbsym r MS 16 i
.dbend
.dbfunc e WriteCommand _WriteCommand fV
; CommandByte -> R16
.even
_WriteCommand::
.dbline -1
.dbline 276
; }
;
; /******************************************************************************
; ** 函数名: void WriteCommand( Uchar CommandByte )
;
; ** 描述: 向控制器写命令
;
; ** 修改的全局变量:
;
; ** 输入参数:
;
; ** 返回值:
; *******************************************************************************/
; void WriteCommand( Uchar CommandByte )
; {
.dbline 277
; PORTB|=(1<<3); //rs = 1
sbi 0x18,3
.dbline 278
; PORTB|=(1<<1); //read = 1
sbi 0x18,1
.dbline 279
; PORTB|=(1<<0); //write = 1
sbi 0x18,0
.dbline 280
; PORTA=0xff;
ldi R24,255
out 0x1b,R24
.dbline 281
; PORTA=CommandByte;
out 0x1b,R16
.dbline 283
; // Delay(10);
; PORTB &= ~(1<<2); //cs = 0
cbi 0x18,2
.dbline 285
; // Delay(10);
; PORTB &= ~(1<<0); //write = 0
cbi 0x18,0
.dbline 287
; // Delay(20);
; PORTB |= (1<<0); //write = 1
sbi 0x18,0
.dbline 289
; // Delay(10);
; PORTB |= (1<<2); //cs = 1
sbi 0x18,2
.dbline -2
L24:
.dbline 0 ; func end
ret
.dbsym r CommandByte 16 c
.dbend
.dbfunc e WriteData _WriteData fV
; dataW -> R16
.even
_WriteData::
.dbline -1
.dbline 304
; }
;
; /******************************************************************************
; ** 函数名: void WriteData( Uchar dataW )
;
; ** 描述: 向控制器写数据
;
; ** 修改的全局变量:
;
; ** 输入参数:
;
; ** 返回值:
; *******************************************************************************/
; void WriteData( Uchar dataW )
; {
.dbline 305
; PORTB &=~(1<<3); //rs = 0
cbi 0x18,3
.dbline 306
; PORTB|=(1<<1); //read = 1
sbi 0x18,1
.dbline 307
; PORTB|=(1<<0); //write = 1
sbi 0x18,0
.dbline 308
; PORTA=0xff;
ldi R24,255
out 0x1b,R24
.dbline 309
; PORTA=dataW;
out 0x1b,R16
.dbline 311
; // Delay(10);
; PORTB &= ~(1<<2); //cs = 0
cbi 0x18,2
.dbline 313
; // Delay(10);
; PORTB &= ~(1<<0); //write = 0
cbi 0x18,0
.dbline 315
; // Delay(20);
; PORTB |= (1<<0); //write = 1
sbi 0x18,0
.dbline 317
; // Delay(10);
; PORTB |= (1<<2); //cs = 1
sbi 0x18,2
.dbline -2
L25:
.dbline 0 ; func end
ret
.dbsym r dataW 16 c
.dbend
.dbfunc e LcmInition _LcmInition fV
; i -> R20
.even
_LcmInition::
st -y,R20
.dbline -1
.dbline 332
; }
;
; /******************************************************************************
; ** 函数名: void LcmInition( void )
;
; ** 描述: LCM 控制器初始化
;
; ** 修改的全局变量:
;
; ** 输入参数:
;
; ** 返回值:
; *******************************************************************************/
; void LcmInition( void )
; {
.dbline 336
;
; Uchar i;
;
; WriteCommand( SystemSet );
ldi R16,64
xcall _WriteCommand
.dbline 337
; for (i=0;i<8;i++) {
clr R20
xjmp L30
L27:
.dbline 337
.dbline 338
; WriteData( ParaSysTable8[i] );
ldi R24,<_ParaSysTable8
ldi R25,>_ParaSysTable8
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R16,Z
xcall _WriteData
.dbline 339
; }
L28:
.dbline 337
inc R20
L30:
.dbline 337
cpi R20,8
brlo L27
X5:
.dbline 341
;
; WriteCommand( Scroll );
ldi R16,68
xcall _WriteCommand
.dbline 342
; for (i=0;i<10;i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -