📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile F:\Relations\sf6_system\measure\LCDtest\lcd.c
0000 .dbfunc e Clear_Display _Clear_Display fV
0000 ; color -> R20
.even
0000 _Clear_Display::
0000 0E940000 xcall push_gset1
0004 402F mov R20,R16
0006 .dbline -1
0006 .dbline 6
0006 ; #include <iom128v.h>
0006 ; #include "lcd.h"
0006 ; #include <macros.h>
0006 ;
0006 ; void Clear_Display(unsigned char color)
0006 ; {
0006 .dbline 7
0006 ; CMD = LCD_MODE_2;
0006 84E0 ldi R24,4
0008 80930280 sts 32770,R24
000C .dbline 8
000C ; DAT = color;
000C 40930380 sts 32771,R20
0010 .dbline 9
0010 ; CMD = LCD_CLEAR_EN;
0010 88E0 ldi R24,8
0012 80930280 sts 32770,R24
0016 .dbline 10
0016 ; Delayx10ms(1);
0016 01E0 ldi R16,1
0018 10E0 ldi R17,0
001A 0E940000 xcall _Delayx10ms
001E .dbline 11
001E ; CMD = LCD_CLEAR_DIS;
001E 2224 clr R2
0020 20920280 sts 32770,R2
0024 .dbline -2
0024 L1:
0024 0E940000 xcall pop_gset1
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym r color 20 c
002A .dbend
002A .dbfunc e Dis_Rect _Dis_Rect fV
002A ; i -> R20
002A ; j -> R14,R15
002A ; color -> R22
002A ; width -> R10
002A ; lenth -> R12,R13
002A ; y -> R18
002A ; x -> R16,R17
.even
002A _Dis_Rect::
002A 0E940000 xcall push_gset5
002E CA84 ldd R12,y+10
0030 DB84 ldd R13,y+11
0032 AC84 ldd R10,y+12
0034 6E85 ldd R22,y+14
0036 .dbline -1
0036 .dbline 24
0036 ; }
0036 ;
0036 ;
0036 ; /* 编写:2005.11.29
0036 ; 编写者:赫树开
0036 ; 功能:画一个矩形
0036 ; 参数。 X为矩形左上角的X坐标,
0036 ; Y为左上角Y坐标值,
0036 ; lenth为矩形长度,
0036 ; width 为矩形宽度
0036 ; color为矩形的颜色,*/
0036 ; void Dis_Rect(unsigned int x,unsigned char y,unsigned int lenth,unsigned char width,unsigned char color)
0036 ; {
0036 .dbline 27
0036 ; unsigned char i;
0036 ; unsigned int j;
0036 ; CMD = LCD_MODE_0+LCD_DOT1;
0036 2224 clr R2
0038 20920280 sts 32770,R2
003C .dbline 28
003C ; for(i=y;i<y+width;i++)
003C 422F mov R20,R18
003E 15C0 xjmp L6
0040 L3:
0040 .dbline 29
0040 ; {
0040 .dbline 30
0040 ; X_ADDR = x;
0040 00930080 sts 32768,R16
0044 .dbline 31
0044 ; X_ADDR = x/256;
0044 1801 movw R2,R16
0046 232C mov R2,R3
0048 3324 clr R3
004A 20920080 sts 32768,R2
004E .dbline 32
004E ; Y_ADDR = i;
004E 40930180 sts 32769,R20
0052 .dbline 33
0052 ; for(j=0;j<lenth;j++)
0052 EE24 clr R14
0054 FF24 clr R15
0056 05C0 xjmp L10
0058 L7:
0058 .dbline 34
0058 .dbline 35
0058 60930380 sts 32771,R22
005C .dbline 36
005C L8:
005C .dbline 33
005C C701 movw R24,R14
005E 0196 adiw R24,1
0060 7C01 movw R14,R24
0062 L10:
0062 .dbline 33
0062 EC14 cp R14,R12
0064 FD04 cpc R15,R13
0066 C0F3 brlo L7
0068 .dbline 37
0068 L4:
0068 .dbline 28
0068 4395 inc R20
006A L6:
006A .dbline 28
006A 222E mov R2,R18
006C 2A0C add R2,R10
006E 4215 cp R20,R2
0070 38F3 brlo L3
0072 .dbline -2
0072 L2:
0072 0E940000 xcall pop_gset5
0076 .dbline 0 ; func end
0076 0895 ret
0078 .dbsym r i 20 c
0078 .dbsym r j 14 i
0078 .dbsym r color 22 c
0078 .dbsym r width 10 c
0078 .dbsym r lenth 12 i
0078 .dbsym r y 18 c
0078 .dbsym r x 16 i
0078 .dbend
0078 .dbfunc e bytekzh _bytekzh fV
0078 ; i -> R20
0078 ; j -> R22
0078 ; back -> R10
0078 ; front -> R18
0078 ; datain -> R16
.even
0078 _bytekzh::
0078 0E940000 xcall push_gset4
007C A884 ldd R10,y+8
007E .dbline -1
007E .dbline 41
007E ; {
007E ; DAT = color;
007E ; }
007E ; }
007E ; }
007E ; //单色字节扩展函数
007E ; void bytekzh( unsigned char datain,unsigned char front, unsigned char back )
007E ; {
007E .dbline 43
007E ; unsigned char i,j;
007E ; for( i=0,j=0x80; i<8; i++,j=(j>>1))
007E 4427 clr R20
0080 60E8 ldi R22,128
0082 0CC0 xjmp L15
0084 L12:
0084 .dbline 44
0084 ; {
0084 .dbline 45
0084 ; DAT=datain&j ? front: back;
0084 202E mov R2,R16
0086 2622 and R2,R22
0088 19F0 breq L16
008A C22E mov R12,R18
008C DD24 clr R13
008E 02C0 xjmp L17
0090 L16:
0090 CA2C mov R12,R10
0092 DD24 clr R13
0094 L17:
0094 C0920380 sts 32771,R12
0098 .dbline 46
0098 L13:
0098 .dbline 43
0098 4395 inc R20
009A 6695 lsr R22
009C L15:
009C .dbline 43
009C 4830 cpi R20,8
009E 90F3 brlo L12
00A0 .dbline -2
00A0 L11:
00A0 0E940000 xcall pop_gset4
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbsym r i 20 c
00A6 .dbsym r j 22 c
00A6 .dbsym r back 10 c
00A6 .dbsym r front 18 c
00A6 .dbsym r datain 16 c
00A6 .dbend
00A6 .dbfunc e Dis_Ascii _Dis_Ascii fV
00A6 ; k -> R20
00A6 ; j -> R22
00A6 ; back -> y+10
00A6 ; front -> y+8
00A6 ; dat -> R10
00A6 ; y -> R18
00A6 ; x -> R16,R17
.even
00A6 _Dis_Ascii::
00A6 0E940000 xcall push_gset3
00AA AE80 ldd R10,y+6
00AC .dbline -1
00AC .dbline 50
00AC ; }
00AC ; }
00AC ;
00AC ; void Dis_Ascii(unsigned int x,unsigned char y,unsigned char dat,unsigned char front,unsigned back)
00AC ; {
00AC .dbline 52
00AC ; unsigned char j,k;
00AC ; k = 0;
00AC 4427 clr R20
00AE .dbline 53
00AE ; dat -= 0x20;
00AE 8A2D mov R24,R10
00B0 8052 subi R24,32
00B2 A82E mov R10,R24
00B4 .dbline 54
00B4 ; CMD = LCD_MODE_1;
00B4 82E0 ldi R24,2
00B6 80930280 sts 32770,R24
00BA .dbline 55
00BA ; DAT = front;
00BA 0884 ldd R0,y+8
00BC 00920380 sts 32771,R0
00C0 .dbline 56
00C0 ; CMD = LCD_MODE_2;
00C0 84E0 ldi R24,4
00C2 80930280 sts 32770,R24
00C6 .dbline 57
00C6 ; DAT = back;
00C6 2A84 ldd R2,y+10
00C8 3B84 ldd R3,y+11
00CA 20920380 sts 32771,R2
00CE .dbline 58
00CE ; CMD = LCD_MODE_0+LCD_DOT8;
00CE 81E0 ldi R24,1
00D0 80930280 sts 32770,R24
00D4 .dbline 59
00D4 ; for(j=y;j<y+16;j++)
00D4 622F mov R22,R18
00D6 1BC0 xjmp L22
00D8 L19:
00D8 .dbline 60
00D8 .dbline 61
00D8 60930180 sts 32769,R22
00DC .dbline 62
00DC 00930080 sts 32768,R16
00E0 .dbline 63
00E0 1801 movw R2,R16
00E2 232C mov R2,R3
00E4 3324 clr R3
00E6 20920080 sts 32768,R2
00EA .dbline 64
00EA 242E mov R2,R20
00EC 3324 clr R3
00EE 4F5F subi R20,255 ; addi 1
00F0 80E1 ldi R24,16
00F2 8A9D mul R24,R10
00F4 2001 movw R4,R0
00F6 80E0 ldi R24,<_ASC_MSK
00F8 90E0 ldi R25,>_ASC_MSK
00FA 480E add R4,R24
00FC 591E adc R5,R25
00FE E22D mov R30,R2
0100 FF27 clr R31
0102 E40D add R30,R4
0104 F51D adc R31,R5
0106 E691 elpm R30,Z
0108 E0930380 sts 32771,R30
010C .dbline 65
010C L20:
010C .dbline 59
010C 6395 inc R22
010E L22:
010E .dbline 59
010E 822F mov R24,R18
0110 805F subi R24,240 ; addi 16
0112 6817 cp R22,R24
0114 08F3 brlo L19
0116 .dbline -2
0116 L18:
0116 0E940000 xcall pop_gset3
011A .dbline 0 ; func end
011A 0895 ret
011C .dbsym r k 20 c
011C .dbsym r j 22 c
011C .dbsym l back 10 i
011C .dbsym l front 8 c
011C .dbsym r dat 10 c
011C .dbsym r y 18 c
011C .dbsym r x 16 i
011C .dbend
011C .dbfunc e Dis_Ascii_Big _Dis_Ascii_Big fV
011C ; k -> R20
011C ; j -> R22
011C ; back -> y+10
011C ; front -> y+8
011C ; dat -> R10
011C ; y -> R18
011C ; x -> R16,R17
.even
011C _Dis_Ascii_Big::
011C 0E940000 xcall push_gset3
0120 AE80 ldd R10,y+6
0122 .dbline -1
0122 .dbline 71
0122 ; {
0122 ; Y_ADDR = j;
0122 ; X_ADDR = x;
0122 ; X_ADDR = x/256;
0122 ; DAT = ASC_MSK[dat][k++];
0122 ; }
0122 ; }
0122 ; /*
0122 ; 16*24 字符单个字符显示
0122 ; */
0122 ; void Dis_Ascii_Big(unsigned int x,unsigned char y,unsigned char dat,unsigned char front,unsigned back)
0122 ; {
0122 .dbline 73
0122 ; unsigned char j,k;
0122 ; k=0;
0122 4427 clr R20
0124 .dbline 74
0124 ; dat-=0x20;
0124 8A2D mov R24,R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -