📄 12864.lis
字号:
.module _12864.c
.area text(rom, con, rel)
0000 .dbfile E:\张秋伟\我的实验\数字频率计/LCD_PORT.h
0000 .dbfunc e Delayus _Delayus fV
0000 ; i -> R20,R21
0000 ; US -> R22,R23
.even
0000 _Delayus::
0000 0E940000 xcall push_gset2
0004 B801 movw R22,R16
0006 .dbline -1
0006 .dbline 15
0006 ; /*******************************************
0006 ; 文件:12864.C
0006 ; 环境:编译为ICC AVR6.31
0006 ; ********************************************
0006 ; 1 VSS -->接地
0006 ; 2 VDD -->电源VCC
0006 ; 3 V0 -->高电平
0006 ; 4 RS(CS) --> PB4
0006 ; 5 RW(STD)-->PB5
0006 ; 6 E --> PB6
0006 ; 7 ~~~14 -->PA0~~PA7 (输出数据总线)
0006 ; 15 PSB-->VCC
0006 ; 16 NC
0006 ; 17 RST-->VCC
0006 ; 18 NC
0006 .dbline 17
0006 ; 19 LEDA -->VCC
0006 ; 20 LEDB -->GND
0006 05E0 ldi R16,5
0008 10E0 ldi R17,0
000A 9B01 movw R18,R22
000C 0E940000 xcall empy16s
0010 B801 movw R22,R16
0012 7695 lsr R23
0014 6795 ror R22
0016 7695 lsr R23
0018 6795 ror R22
001A .dbline 18
001A 4427 clr R20
001C 5527 clr R21
001E 02C0 xjmp L5
0020 L2:
0020 .dbline 18
0020 L3:
0020 .dbline 18
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L5:
0024 .dbline 18
0024 ; /******************************************/
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D8F3 brlo L2
002A .dbline -2
002A L1:
002A 0E940000 xcall pop_gset2
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r i 20 i
0030 .dbsym r US 22 i
0030 .dbend
0030 .dbfunc e Delayms _Delayms fV
0030 ; i -> R20,R21
0030 ; j -> R22,R23
0030 ; MS -> R16,R17
.even
0030 _Delayms::
0030 0E940000 xcall push_gset2
0034 .dbline -1
0034 .dbline 27
0034 ; #include <iom16v.h> //包含型号头文件
0034 ; #include <macros.h> //包含"位"操作头文件
0034 ; #include "LCD_PORT.h" //包含自定义常量头文件
0034 ;
0034 ;
0034 ; /*******************************************
0034 ; 函数名称: LCD12864_portini
0034 ; 功 能: 初始化12864液晶用到的IO口
0034 ; 参 数: 无
0034 .dbline 29
0034 ; 返回值 : 无
0034 ; /********************************************/
0034 4427 clr R20
0036 5527 clr R21
0038 0BC0 xjmp L10
003A L7:
003A .dbline 30
003A 6627 clr R22
003C 7727 clr R23
003E 02C0 xjmp L14
0040 L11:
0040 .dbline 30
0040 L12:
0040 .dbline 30
0040 6F5F subi R22,255 ; offset = 1
0042 7F4F sbci R23,255
0044 L14:
0044 .dbline 30
0044 6537 cpi R22,117
0046 E4E0 ldi R30,4
0048 7E07 cpc R23,R30
004A D0F3 brlo L11
004C L8:
004C .dbline 29
004C 4F5F subi R20,255 ; offset = 1
004E 5F4F sbci R21,255
0050 L10:
0050 .dbline 29
0050 4017 cp R20,R16
0052 5107 cpc R21,R17
0054 90F3 brlo L7
0056 .dbline -2
0056 L6:
0056 0E940000 xcall pop_gset2
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r i 20 i
005C .dbsym r j 22 i
005C .dbsym r MS 16 i
005C .dbend
005C .dbfile E:\张秋伟\我的实验\数字频率计\12864.c
005C .dbfunc e LCD12864_portini _LCD12864_portini fV
.even
005C _LCD12864_portini::
005C .dbline -1
005C .dbline 31
005C ; void LCD12864_portini(void)
005C ; {
005C .dbline 32
005C ; LCDb_CTRL_DDR |= BIT(LCDb_RS)|BIT(LCDb_RW)|BIT(LCDb_E)|BIT(LCDb_RST);//配置控制管脚为输出
005C 87B3 in R24,0x17
005E 806F ori R24,240
0060 87BB out 0x17,R24
0062 .dbline 33
0062 ; LCDb_DATA_DDR |= 0xFF; //配置数据管脚为输出
0062 8AB3 in R24,0x1a
0064 8F6F ori R24,255
0066 8ABB out 0x1a,R24
0068 .dbline 34
0068 ; LCDb_SET_RST; //不使能复位端
0068 C79A sbi 0x18,7
006A .dbline -2
006A L15:
006A .dbline 0 ; func end
006A 0895 ret
006C .dbend
006C .dbfunc e LCD12864_readbyte _LCD12864_readbyte fc
006C ; dByte -> R20
006C ; DatCmd -> R20
.even
006C _LCD12864_readbyte::
006C 0E940000 xcall push_gset1
0070 402F mov R20,R16
0072 .dbline -1
0072 .dbline 43
0072 ; }
0072 ; /*******************************************
0072 ; 函数名称: LCD12864_readbyte
0072 ; 功 能: 从12864液晶读出一个字节数据或者指令
0072 ; 参 数: DatCmd--为iDat时是数据,为iCmd时是指令
0072 ; 返回值 : dByte--读回的数据或者指令
0072 ; /********************************************/
0072 ; uchar LCD12864_readbyte(uchar DatCmd)
0072 ; {
0072 .dbline 45
0072 ; uchar dByte;
0072 ; if (DatCmd == iCmd) //指令操作
0072 4423 tst R20
0074 11F4 brne L17
0076 .dbline 46
0076 ; LCDb_CLR_RS;
0076 C498 cbi 0x18,4
0078 01C0 xjmp L18
007A L17:
007A .dbline 48
007A ; else
007A ; LCDb_SET_RS;
007A C49A sbi 0x18,4
007C L18:
007C .dbline 50
007C ;
007C ; LCDb_SET_RW; //读操作
007C C59A sbi 0x18,5
007E .dbline 51
007E ; LCDb_SET_E;
007E C69A sbi 0x18,6
0080 .dbline 52
0080 ; LCDb_DATA_DDR=0x00; //数据总线定义为输入
0080 2224 clr R2
0082 2ABA out 0x1a,R2
0084 .dbline 53
0084 ; dByte=LCDb_DI; //读数据或者指令
0084 49B3 in R20,0x19
0086 .dbline 54
0086 ; Delayms(1); //时序调整
0086 01E0 ldi R16,1
0088 10E0 ldi R17,0
008A D2DF xcall _Delayms
008C .dbline 55
008C ; LCDb_CLR_E;
008C C698 cbi 0x18,6
008E .dbline 56
008E ; LCDb_DATA_DDR|=0xff; //数据总线还原为输出
008E 8AB3 in R24,0x1a
0090 8F6F ori R24,255
0092 8ABB out 0x1a,R24
0094 .dbline 57
0094 ; return dByte;
0094 042F mov R16,R20
0096 .dbline -2
0096 L16:
0096 0E940000 xcall pop_gset1
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r dByte 20 c
009C .dbsym r DatCmd 20 c
009C .dbend
009C .dbfunc e LCD12864_sendbyte _LCD12864_sendbyte fV
009C ; dByte -> R20
009C ; DatCmd -> R22
.even
009C _LCD12864_sendbyte::
009C 0E940000 xcall push_gset2
00A0 422F mov R20,R18
00A2 602F mov R22,R16
00A4 .dbline -1
00A4 .dbline 67
00A4 ; }
00A4 ; /*******************************************
00A4 ; 函数名称: LCD12864_sendbyte
00A4 ; 功 能: 向12864液晶写入一个字节数据或者指令
00A4 ; 参 数: DatCmd--为iDat时是数据,为iCmd时是指令
00A4 ; dByte--为写入12864的数据或者指令
00A4 ; 返回值 : 无
00A4 ; /********************************************/
00A4 ; void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
00A4 ; {
00A4 .dbline 68
00A4 ; if (DatCmd == iCmd) //指令操作
00A4 6623 tst R22
00A6 11F4 brne L20
00A8 .dbline 69
00A8 ; LCDb_CLR_RS;
00A8 C498 cbi 0x18,4
00AA 01C0 xjmp L21
00AC L20:
00AC .dbline 71
00AC ; else
00AC ; LCDb_SET_RS;
00AC C49A sbi 0x18,4
00AE L21:
00AE .dbline 73
00AE ;
00AE ; LCDb_CLR_RW; //写操作
00AE C598 cbi 0x18,5
00B0 .dbline 74
00B0 ; LCDb_SET_E;
00B0 C69A sbi 0x18,6
00B2 .dbline 75
00B2 ; LCDb_DO = dByte; //写入数据
00B2 4BBB out 0x1b,R20
00B4 .dbline 76
00B4 ; Delayus(100);
00B4 04E6 ldi R16,100
00B6 10E0 ldi R17,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -