📄 ac15-2.lis
字号:
.module ac15-2.c
.area lit(rom, con, rel)
0000 _str0::
0000 2D54696D652020203A20203A20202D2D .byte 45,'T,'i,'m,'e,32,32,32,58,32,32,58,32,32,45,45
0010 00 .byte 0
0011 .dbfile d:\MYDOCU~1\ac15-2\ac15-2.c
0011 .dbsym e str0 _str0 A[17:17]kc
0011 _str1::
0011 2D4154696D652020203A20203A202D2D .byte 45,'A,'T,'i,'m,'e,32,32,32,58,32,32,58,32,45,45
0021 00 .byte 0
0022 .dbsym e str1 _str1 A[17:17]kc
.area text(rom, con, rel)
0000 .dbfile d:\MYDOCU~1\ac15-2\ac15-2.c
0000 .dbfunc e ePutstr _ePutstr fV
0000 ; l -> R20
0000 ; i -> R22
0000 ; ptr -> R10,R11
0000 ; y -> R12
0000 ; x -> R14
.even
0000 _ePutstr::
0000 0E940000 xcall push_gset5
0004 C22E mov R12,R18
0006 E02E mov R14,R16
0008 2197 sbiw R28,1
000A AB84 ldd R10,y+11
000C BC84 ldd R11,y+12
000E .dbline -1
000E .dbline 43
000E ; #include <iom16v.h>
000E ; #include <macros.h>
000E ; //-----------------------------------------------
000E ; #define uchar unsigned char
000E ; #define uint unsigned int
000E ; //-------------------引脚电平的宏定义---------
000E ; #define LCM_RS_1 PORTB|=BIT(PB0)
000E ; #define LCM_RS_0 PORTB&=~BIT(PB0)
000E ; #define LCM_RW_1 PORTB|=BIT(PB1)
000E ; #define LCM_RW_0 PORTB&=~BIT(PB1)
000E ; #define LCM_EN_1 PORTB|=BIT(PB2)
000E ; #define LCM_EN_0 PORTB&=~BIT(PB2)
000E ; #define SCL_1 PORTC|=BIT(PC0)
000E ; #define SCL_0 PORTC&=~BIT(PC0)
000E ; #define SDA_1 PORTC|=BIT(PC1)
000E ; #define SDA_0 PORTC&=~BIT(PC1)
000E ; #define LED_1 PORTB|=BIT(PB7)
000E ; #define LED_0 PORTB&=~BIT(PB7)
000E ; //======================================
000E ; #define PIN_SDA (PINC&0x02)
000E ; #define DataPort PORTA
000E ; #define Busy 0x80
000E ; #define xtal 8
000E ; #define Some_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
000E ; //======================================
000E ; const uchar str0[]={"-Time : : --"};//待显字符串
000E ; const uchar str1[]={"-ATime : : --"};//待显字符串
000E ; //========函数声明=========
000E ; void Delay_1ms(void);
000E ; void Delay_nms(uint n);
000E ; void WaitForEnable(void);
000E ; void LcdWriteData(uchar W);
000E ; void LcdWriteCommand(uchar CMD,uchar Attribc);
000E ; void InitLcd(void);
000E ; void Display(uchar dd);
000E ; void DisplayOneChar(uchar x,uchar y,uchar Wdata);
000E ; void ePutstr(uchar x,uchar y,uchar const *ptr);
000E ; void port_init(void);
000E ; void init_devices(void);
000E ; void timer1_init(void);
000E ; //**********************显示指定座标的一串字符子函数**************
000E ; void ePutstr(uchar x,uchar y,uchar const *ptr)
000E ; {
000E .dbline 44
000E ; uchar i,l=0;
000E 4427 clr R20
0010 01C0 xjmp L3
0012 L2:
0012 .dbline 45
0012 .dbline 45
0012 4395 inc R20
0014 .dbline 45
0014 L3:
0014 .dbline 45
0014 ; while(ptr[l]>31){l++;}
0014 E42F mov R30,R20
0016 FF27 clr R31
0018 EA0D add R30,R10
001A FB1D adc R31,R11
001C E491 lpm R30,Z
001E 8FE1 ldi R24,31
0020 8E17 cp R24,R30
0022 B8F3 brlo L2
0024 .dbline 46
0024 6627 clr R22
0026 14C0 xjmp L8
0028 L5:
0028 .dbline 46
0028 ; for(i=0;i<l;i++){
0028 .dbline 47
0028 ; DisplayOneChar(x++,y,ptr[i]);
0028 E62F mov R30,R22
002A FF27 clr R31
002C EA0D add R30,R10
002E FB1D adc R31,R11
0030 E491 lpm R30,Z
0032 E883 std y+0,R30
0034 2C2D mov R18,R12
0036 2E2C mov R2,R14
0038 822D mov R24,R2
003A 8F5F subi R24,255 ; addi 1
003C E82E mov R14,R24
003E 022D mov R16,R2
0040 1ED0 xcall _DisplayOneChar
0042 .dbline 48
0042 ; if(x==16){
0042 8E2D mov R24,R14
0044 8031 cpi R24,16
0046 19F4 brne L9
0048 .dbline 48
0048 .dbline 49
0048 ; x=0;y^=1;
0048 EE24 clr R14
004A .dbline 49
004A 81E0 ldi R24,1
004C C826 eor R12,R24
004E .dbline 50
004E ; }
004E L9:
004E .dbline 51
004E L6:
004E .dbline 46
004E 6395 inc R22
0050 L8:
0050 .dbline 46
0050 6417 cp R22,R20
0052 50F3 brlo L5
0054 .dbline -2
0054 L1:
0054 2196 adiw R28,1
0056 0E940000 xcall pop_gset5
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r l 20 c
005C .dbsym r i 22 c
005C .dbsym r ptr 10 pkc
005C .dbsym r y 12 c
005C .dbsym r x 14 c
005C .dbend
005C .dbfunc e LocateXY _LocateXY fV
005C ; temp -> R20
005C ; posy -> R22
005C ; posx -> R10
.even
005C _LocateXY::
005C 0E940000 xcall push_gset3
0060 622F mov R22,R18
0062 A02E mov R10,R16
0064 .dbline -1
0064 .dbline 55
0064 ; }
0064 ; }
0064 ; //*******************显示光标定位子函数******************
0064 ; void LocateXY(char posx,char posy)
0064 ; {
0064 .dbline 57
0064 ; uchar temp;
0064 ; temp&=0x7f;
0064 4F77 andi R20,127
0066 .dbline 58
0066 ; temp=posx&0x0f;
0066 4A2D mov R20,R10
0068 4F70 andi R20,15
006A .dbline 59
006A ; posy&=0x01;
006A 6170 andi R22,1
006C .dbline 60
006C ; if(posy)temp|=0x40;
006C 09F0 breq L12
006E .dbline 60
006E 4064 ori R20,64
0070 L12:
0070 .dbline 61
0070 ; temp|=0x80;
0070 4068 ori R20,128
0072 .dbline 62
0072 ; LcdWriteCommand(temp,0);
0072 2227 clr R18
0074 042F mov R16,R20
0076 31D0 xcall _LcdWriteCommand
0078 .dbline -2
0078 L11:
0078 0E940000 xcall pop_gset3
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym r temp 20 c
007E .dbsym r posy 22 c
007E .dbsym r posx 10 c
007E .dbend
007E .dbfunc e DisplayOneChar _DisplayOneChar fV
007E ; Wdata -> y+4
007E ; y -> R22
007E ; x -> R20
.even
007E _DisplayOneChar::
007E 0E940000 xcall push_gset2
0082 622F mov R22,R18
0084 402F mov R20,R16
0086 .dbline -1
0086 .dbline 66
0086 ; }
0086 ; //*******************显示指定座标的一个字符子函数*******************
0086 ; void DisplayOneChar(uchar x,uchar y,uchar Wdata)
0086 ; {
0086 .dbline 67
0086 ; LocateXY(x,y);
0086 262F mov R18,R22
0088 042F mov R16,R20
008A E8DF xcall _LocateXY
008C .dbline 68
008C ; LcdWriteData(Wdata);
008C 0C81 ldd R16,y+4
008E 38D0 xcall _LcdWriteData
0090 .dbline -2
0090 L14:
0090 0E940000 xcall pop_gset2
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbsym l Wdata 4 c
0096 .dbsym r y 22 c
0096 .dbsym r x 20 c
0096 .dbend
0096 .dbfunc e InitLcd _InitLcd fV
.even
0096 _InitLcd::
0096 .dbline -1
0096 .dbline 72
0096 ; }
0096 ; //*******************LCD初始化子函数*********************
0096 ; void InitLcd(void)
0096 ; {
0096 .dbline 73
0096 ; LcdWriteCommand(0x38,0);
0096 2227 clr R18
0098 08E3 ldi R16,56
009A 1FD0 xcall _LcdWriteCommand
009C .dbline 74
009C ; Delay_nms(5);
009C 05E0 ldi R16,5
009E 10E0 ldi R17,0
00A0 5CD0 xcall _Delay_nms
00A2 .dbline 75
00A2 ; LcdWriteCommand(0x38,0);
00A2 2227 clr R18
00A4 08E3 ldi R16,56
00A6 19D0 xcall _LcdWriteCommand
00A8 .dbline 76
00A8 ; Delay_nms(5);
00A8 05E0 ldi R16,5
00AA 10E0 ldi R17,0
00AC 56D0 xcall _Delay_nms
00AE .dbline 77
00AE ; LcdWriteCommand(0x38,0);
00AE 2227 clr R18
00B0 08E3 ldi R16,56
00B2 13D0 xcall _LcdWriteCommand
00B4 .dbline 78
00B4 ; Delay_nms(5);
00B4 05E0 ldi R16,5
00B6 10E0 ldi R17,0
00B8 50D0 xcall _Delay_nms
00BA .dbline 79
00BA ; LcdWriteCommand(0x38,1);
00BA 21E0 ldi R18,1
00BC 08E3 ldi R16,56
00BE 0DD0 xcall _LcdWriteCommand
00C0 .dbline 80
00C0 ; LcdWriteCommand(0x08,1);
00C0 21E0 ldi R18,1
00C2 08E0 ldi R16,8
00C4 0AD0 xcall _LcdWriteCommand
00C6 .dbline 81
00C6 ; LcdWriteCommand(0x01,1);
00C6 21E0 ldi R18,1
00C8 01E0 ldi R16,1
00CA 07D0 xcall _LcdWriteCommand
00CC .dbline 82
00CC ; LcdWriteCommand(0x06,1);
00CC 21E0 ldi R18,1
00CE 06E0 ldi R16,6
00D0 04D0 xcall _LcdWriteCommand
00D2 .dbline 83
00D2 ; LcdWriteCommand(0x0c,1);
00D2 21E0 ldi R18,1
00D4 0CE0 ldi R16,12
00D6 01D0 xcall _LcdWriteCommand
00D8 .dbline -2
00D8 L15:
00D8 .dbline 0 ; func end
00D8 0895 ret
00DA .dbend
00DA .dbfunc e LcdWriteCommand _LcdWriteCommand fV
00DA ; Attribc -> R22
00DA ; CMD -> R20
.even
00DA _LcdWriteCommand::
00DA 0E940000 xcall push_gset2
00DE 622F mov R22,R18
00E0 402F mov R20,R16
00E2 .dbline -1
00E2 .dbline 87
00E2 ; }
00E2 ; //********************写命令到LCM子函数********************
00E2 ; void LcdWriteCommand(uchar CMD,uchar Attribc)
00E2 ; {
00E2 .dbline 88
00E2 ; if(Attribc)WaitForEnable();
00E2 6623 tst R22
00E4 09F0 breq L17
00E6 .dbline 88
00E6 1CD0 xcall _WaitForEnable
00E8 L17:
00E8 .dbline 89
00E8 ; LCM_RS_0;LCM_RW_0;_NOP();
00E8 C098 cbi 0x18,0
00EA .dbline 89
00EA C198 cbi 0x18,1
00EC .dbline 89
00EC 0000 nop
00EE .dbline 90
00EE ; DataPort=CMD;_NOP();
00EE 4BBB out 0x1b,R20
00F0 .dbline 90
00F0 0000 nop
00F2 .dbline 91
00F2 ; LCM_EN_1;_NOP();_NOP();LCM_EN_0;
00F2 C29A sbi 0x18,2
00F4 .dbline 91
00F4 0000 nop
00F6 .dbline 91
00F6 0000 nop
00F8 .dbline 91
00F8 C298 cbi 0x18,2
00FA .dbline -2
00FA L16:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -