📄 12864.lis
字号:
.module _12864.c
.area text(rom, con, rel)
0000 .dbfile 12864.c
0000 .dbfile E:\课件\128最小系统板\AVR程序\lcd12864\12864.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; j -> R20,R21
0000 ; i -> R22,R23
0000 ; x -> R16,R17
.even
0000 _delay_ms::
0000 0E940000 xcall push_xgsetF000
0004 .dbline -1
0004 .dbline 16
0004 ; /*****************************************
0004 ; *文件名:lcd12864.c
0004 ; *功能:LCD12864串行方式AVR驱动程序
0004 ; *日期:2010年7月10日
0004 ; ****************************************/
0004 ; #include "12864.h" //包含头文件
0004 ;
0004 ; /*****************************************
0004 ; *函数名:delay_12864
0004 ; *功能:利用寄存器操作实现延时效果
0004 ; *参数:延时变量x
0004 ; *返回值:无
0004 ; ****************************************/
0004 ;
0004 ; void delay_ms(uint x)
0004 ; {
0004 .dbline 18
0004 ; uint i,j;
0004 ; for(j=0;j<x;j++)
0004 4427 clr R20
0006 5527 clr R21
0008 0BC0 xjmp L5
000A L2:
000A .dbline 19
000A ; for(i=0;i<1141;i++);
000A 6627 clr R22
000C 7727 clr R23
000E 02C0 xjmp L9
0010 L6:
0010 .dbline 19
0010 L7:
0010 .dbline 19
0010 6F5F subi R22,255 ; offset = 1
0012 7F4F sbci R23,255
0014 L9:
0014 .dbline 19
0014 6537 cpi R22,117
0016 E4E0 ldi R30,4
0018 7E07 cpc R23,R30
001A D0F3 brlo L6
001C X0:
001C L3:
001C .dbline 18
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 18
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 90F3 brlo L2
0026 X1:
0026 .dbline -2
0026 L1:
0026 .dbline 0 ; func end
0026 0C940000 xjmp pop_xgsetF000
002A .dbsym r j 20 i
002A .dbsym r i 22 i
002A .dbsym r x 16 i
002A .dbend
002A .dbfunc e delay_us _delay_us fV
002A ; j -> R20,R21
002A ; i -> R22,R23
002A ; x -> R16,R17
.even
002A _delay_us::
002A 0E940000 xcall push_xgsetF000
002E .dbline -1
002E .dbline 23
002E ; }
002E ;
002E ; void delay_us(uint x)
002E ; {
002E .dbline 25
002E ; uint i,j;
002E ; for(j=0;j<x;j++)
002E 4427 clr R20
0030 5527 clr R21
0032 0BC0 xjmp L14
0034 L11:
0034 .dbline 26
0034 ; for(i=0;i<40;i++);
0034 6627 clr R22
0036 7727 clr R23
0038 02C0 xjmp L18
003A L15:
003A .dbline 26
003A L16:
003A .dbline 26
003A 6F5F subi R22,255 ; offset = 1
003C 7F4F sbci R23,255
003E L18:
003E .dbline 26
003E 6832 cpi R22,40
0040 E0E0 ldi R30,0
0042 7E07 cpc R23,R30
0044 D0F3 brlo L15
0046 X2:
0046 L12:
0046 .dbline 25
0046 4F5F subi R20,255 ; offset = 1
0048 5F4F sbci R21,255
004A L14:
004A .dbline 25
004A 4017 cp R20,R16
004C 5107 cpc R21,R17
004E 90F3 brlo L11
0050 X3:
0050 .dbline -2
0050 L10:
0050 .dbline 0 ; func end
0050 0C940000 xjmp pop_xgsetF000
0054 .dbsym r j 20 i
0054 .dbsym r i 22 i
0054 .dbsym r x 16 i
0054 .dbend
0054 .dbfunc e LCD_init _LCD_init fV
.even
0054 _LCD_init::
0054 .dbline -1
0054 .dbline 38
0054 ; }
0054 ;
0054 ;
0054 ;
0054 ; /*****************************************
0054 ; *函数名:send_command
0054 ; *功能:向LCD控制器的寄存器写指令
0054 ; *参数:指令command_data
0054 ; *返回值:无
0054 ; ****************************************/
0054 ; void LCD_init(void)
0054 ; {
0054 .dbline 39
0054 ; delay_ms(20);
0054 04E1 ldi R16,20
0056 10E0 ldi R17,0
0058 D3DF xcall _delay_ms
005A .dbline 40
005A ; Write_Command(0x30);//显示地址归位0x02
005A 00E3 ldi R16,48
005C 0ED0 xcall _Write_Command
005E .dbline 41
005E ; Write_Command(0x02);//选择基本指令集0x30
005E 02E0 ldi R16,2
0060 0CD0 xcall _Write_Command
0062 .dbline 42
0062 ; Write_Command(0x01);//光标关
0062 01E0 ldi R16,1
0064 0AD0 xcall _Write_Command
0066 .dbline 43
0066 ; Write_Command(0x08);
0066 08E0 ldi R16,8
0068 08D0 xcall _Write_Command
006A .dbline 44
006A ; Write_Command(0x10);
006A 00E1 ldi R16,16
006C 06D0 xcall _Write_Command
006E .dbline 45
006E ; Write_Command(0x38);
006E 08E3 ldi R16,56
0070 04D0 xcall _Write_Command
0072 .dbline 46
0072 ; Write_Command(0x80);
0072 00E8 ldi R16,128
0074 02D0 xcall _Write_Command
0076 .dbline 47
0076 ; Write_Command(0x0c);//开显示0x0c
0076 0CE0 ldi R16,12
0078 .dbline -2
0078 L19:
0078 .dbline 0 ; func end
0078 00C0 xjmp _Write_Command
007A .dbend
007A .dbfunc e Write_Command _Write_Command fV
007A ; i -> R22
007A ; command -> R20
007A ; CMD -> R10
.even
007A _Write_Command::
007A 0E940000 xcall push_xgsetF00C
007E A02E mov R10,R16
0080 .dbline -1
0080 .dbline 52
0080 ; }
0080 ;
0080 ; //发送命令
0080 ; void Write_Command(unsigned char CMD)
0080 ; {
0080 .dbline 54
0080 ; uchar command,i;
0080 ; CS_SET;
0080 139A sbi 0x2,3
0082 .dbline 54
0082 1B9A sbi 0x3,3
0084 .dbline 55
0084 ; command=0xf8;
0084 48EF ldi R20,248
0086 .dbline 56
0086 ; for(i=0;i<8;i++)//把数据送到线上去
0086 6627 clr R22
0088 18C0 xjmp L24
008A L21:
008A .dbline 57
008A ; { SCLK_CLE;
008A .dbline 57
008A 159A sbi 0x2,5
008C .dbline 57
008C 1D98 cbi 0x3,5
008E .dbline 58
008E ; if(command&0x80)
008E 47FF sbrs R20,7
0090 03C0 rjmp L25
0092 X4:
0092 .dbline 59
0092 ; {SID_SET;}
0092 .dbline 59
0092 149A sbi 0x2,4
0094 .dbline 59
0094 1C9A sbi 0x3,4
0096 .dbline 59
0096 02C0 xjmp L26
0098 L25:
0098 .dbline 61
0098 ; else
0098 ; {SID_CLE;}
0098 .dbline 61
0098 149A sbi 0x2,4
009A .dbline 61
009A 1C98 cbi 0x3,4
009C .dbline 61
009C L26:
009C .dbline 62
009C ; delay_us(1);
009C 01E0 ldi R16,1
009E 10E0 ldi R17,0
00A0 C4DF xcall _delay_us
00A2 .dbline 63
00A2 ; SCLK_SET;//时钟总线拉高,数据传送给显示屏
00A2 159A sbi 0x2,5
00A4 .dbline 63
00A4 1D9A sbi 0x3,5
00A6 .dbline 64
00A6 ; delay_us(10);
00A6 0AE0 ldi R16,10
00A8 10E0 ldi R17,0
00AA BFDF xcall _delay_us
00AC .dbline 65
00AC ; SCLK_CLE;
00AC 159A sbi 0x2,5
00AE .dbline 65
00AE 1D98 cbi 0x3,5
00B0 .dbline 66
00B0 ; delay_us(3);
00B0 03E0 ldi R16,3
00B2 10E0 ldi R17,0
00B4 BADF xcall _delay_us
00B6 .dbline 67
00B6 ; command=command<<1;//高位先发
00B6 440F lsl R20
00B8 .dbline 68
00B8 ; }
00B8 L22:
00B8 .dbline 56
00B8 6395 inc R22
00BA L24:
00BA .dbline 56
00BA 6830 cpi R22,8
00BC 30F3 brlo L21
00BE X5:
00BE .dbline 69
00BE ; command=CMD&0xf0;
00BE 4A2D mov R20,R10
00C0 407F andi R20,240
00C2 .dbline 70
00C2 ; for(i=0;i<8;i++)//把数据送到线上去
00C2 6627 clr R22
00C4 18C0 xjmp L30
00C6 L27:
00C6 .dbline 71
00C6 ; { SCLK_CLE;
00C6 .dbline 71
00C6 159A sbi 0x2,5
00C8 .dbline 71
00C8 1D98 cbi 0x3,5
00CA .dbline 72
00CA ; if(command&0x80)
00CA 47FF sbrs R20,7
00CC 03C0 rjmp L31
00CE X6:
00CE .dbline 73
00CE ; {SID_SET;}
00CE .dbline 73
00CE 149A sbi 0x2,4
00D0 .dbline 73
00D0 1C9A sbi 0x3,4
00D2 .dbline 73
00D2 02C0 xjmp L32
00D4 L31:
00D4 .dbline 75
00D4 ; else
00D4 ; {SID_CLE;}
00D4 .dbline 75
00D4 149A sbi 0x2,4
00D6 .dbline 75
00D6 1C98 cbi 0x3,4
00D8 .dbline 75
00D8 L32:
00D8 .dbline 76
00D8 ; delay_us(1);
00D8 01E0 ldi R16,1
00DA 10E0 ldi R17,0
00DC A6DF xcall _delay_us
00DE .dbline 77
00DE ; SCLK_SET;//时钟总线拉高,数据传送给显示屏
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -