📄 ¿-
字号:
.module _12864.c
.area text(rom, con, rel)
0000 .dbfile 12864.c
0000 .dbfile E:\课件\128最小系统板\AVR程序\定时器\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 43
005A ; //DDRE|=(1<<5);
005A ; //DDRE|=(1<<3);
005A ; //DDRE|=(1<<1);
005A ; delay_ms(1);
005A 01E0 ldi R16,1
005C 10E0 ldi R17,0
005E D0DF xcall _delay_ms
0060 .dbline 44
0060 ; Write_Command(0x30);//显示地址归位0x02
0060 00E3 ldi R16,48
0062 0ED0 xcall _Write_Command
0064 .dbline 45
0064 ; Write_Command(0x02);//选择基本指令集0x30
0064 02E0 ldi R16,2
0066 0CD0 xcall _Write_Command
0068 .dbline 46
0068 ; Write_Command(0x01);//光标关
0068 01E0 ldi R16,1
006A 0AD0 xcall _Write_Command
006C .dbline 47
006C ; Write_Command(0x08);
006C 08E0 ldi R16,8
006E 08D0 xcall _Write_Command
0070 .dbline 48
0070 ; Write_Command(0x10);
0070 00E1 ldi R16,16
0072 06D0 xcall _Write_Command
0074 .dbline 49
0074 ; Write_Command(0x38);
0074 08E3 ldi R16,56
0076 04D0 xcall _Write_Command
0078 .dbline 50
0078 ; Write_Command(0x80);
0078 00E8 ldi R16,128
007A 02D0 xcall _Write_Command
007C .dbline 51
007C ; Write_Command(0x0c);//开显示0x0c
007C 0CE0 ldi R16,12
007E .dbline -2
007E L19:
007E .dbline 0 ; func end
007E 00C0 xjmp _Write_Command
0080 .dbend
0080 .dbfunc e Write_Command _Write_Command fV
0080 ; i -> R22
0080 ; command -> R20
0080 ; CMD -> R10
.even
0080 _Write_Command::
0080 0E940000 xcall push_xgsetF00C
0084 A02E mov R10,R16
0086 .dbline -1
0086 .dbline 56
0086 ; }
0086 ;
0086 ; //发送命令
0086 ; void Write_Command(unsigned char CMD)
0086 ; {
0086 .dbline 58
0086 ; uchar command,i;
0086 ; command=0xf8;
0086 48EF ldi R20,248
0088 .dbline 59
0088 ; for(i=0;i<8;i++)//把数据送到线上去
0088 6627 clr R22
008A 18C0 xjmp L24
008C L21:
008C .dbline 60
008C ; { SCLK_CLE;
008C .dbline 60
008C 159A sbi 0x2,5
008E .dbline 60
008E 1D98 cbi 0x3,5
0090 .dbline 61
0090 ; if(command&0x80)
0090 47FF sbrs R20,7
0092 03C0 rjmp L25
0094 X4:
0094 .dbline 62
0094 ; {SID_SET;}
0094 .dbline 62
0094 119A sbi 0x2,1
0096 .dbline 62
0096 199A sbi 0x3,1
0098 .dbline 62
0098 02C0 xjmp L26
009A L25:
009A .dbline 64
009A ; else
009A ; {SID_CLE;}
009A .dbline 64
009A 119A sbi 0x2,1
009C .dbline 64
009C 1998 cbi 0x3,1
009E .dbline 64
009E L26:
009E .dbline 65
009E ; delay_us(1);
009E 01E0 ldi R16,1
00A0 10E0 ldi R17,0
00A2 C3DF xcall _delay_us
00A4 .dbline 66
00A4 ; SCLK_SET;//时钟总线拉高,数据传送给显示屏
00A4 159A sbi 0x2,5
00A6 .dbline 66
00A6 1D9A sbi 0x3,5
00A8 .dbline 67
00A8 ; delay_us(3);
00A8 03E0 ldi R16,3
00AA 10E0 ldi R17,0
00AC BEDF xcall _delay_us
00AE .dbline 68
00AE ; SCLK_CLE;
00AE 159A sbi 0x2,5
00B0 .dbline 68
00B0 1D98 cbi 0x3,5
00B2 .dbline 69
00B2 ; delay_us(3);
00B2 03E0 ldi R16,3
00B4 10E0 ldi R17,0
00B6 B9DF xcall _delay_us
00B8 .dbline 70
00B8 ; command=command<<1;//高位先发
00B8 440F lsl R20
00BA .dbline 71
00BA ; }
00BA L22:
00BA .dbline 59
00BA 6395 inc R22
00BC L24:
00BC .dbline 59
00BC 6830 cpi R22,8
00BE 30F3 brlo L21
00C0 X5:
00C0 .dbline 72
00C0 ; command=CMD&0xf0;
00C0 4A2D mov R20,R10
00C2 407F andi R20,240
00C4 .dbline 73
00C4 ; for(i=0;i<8;i++)//把数据送到线上去
00C4 6627 clr R22
00C6 18C0 xjmp L30
00C8 L27:
00C8 .dbline 74
00C8 ; { SCLK_CLE;
00C8 .dbline 74
00C8 159A sbi 0x2,5
00CA .dbline 74
00CA 1D98 cbi 0x3,5
00CC .dbline 75
00CC ; if(command&0x80)
00CC 47FF sbrs R20,7
00CE 03C0 rjmp L31
00D0 X6:
00D0 .dbline 76
00D0 ; {SID_SET;}
00D0 .dbline 76
00D0 119A sbi 0x2,1
00D2 .dbline 76
00D2 199A sbi 0x3,1
00D4 .dbline 76
00D4 02C0 xjmp L32
00D6 L31:
00D6 .dbline 78
00D6 ; else
00D6 ; {SID_CLE;}
00D6 .dbline 78
00D6 119A sbi 0x2,1
00D8 .dbline 78
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -