⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac15-4.lis

📁 AVR学习资料
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module ac15-4.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-4\ac15-4.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-4\ac15-4.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 66
 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 LED_1 PORTB|=BIT(PB7)
 000E           ; #define LED_0 PORTB&=~BIT(PB7)
 000E           ; 
 000E           ; #define rd_device_add 0xa1
 000E           ; #define wr_device_add 0xa0
 000E           ; 
 000E           ; //======================================
 000E           ; //TWI状态定义
 000E           ; //MT 主方式传输  MR 主方式接收
 000E           ; #define START 0x08 
 000E           ; #define RE_START 0x10
 000E           ; #define MT_SLA_ACK 0x18
 000E           ; #define MT_SLA_NOACK 0x20
 000E           ; #define MT_DATA_ACK  0x28
 000E           ; #define MT_DATA_NOACK 0x30
 000E           ; #define MR_SLA_ACK  0x40
 000E           ; #define MR_SLA_NOACK 0x48
 000E           ; #define MR_DATA_ACK 0x50
 000E           ; #define MR_DATA_NOACK 0x58
 000E           ; 
 000E           ; //常用TWI操作(主模式写和主模式读)
 000E           ; #define Start()         (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
 000E           ; #define Stop()          (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
 000E           ; #define Wait()                  {while(!(TWCR&(1<<TWINT)));}
 000E           ; #define TestAck()       (TWSR&0xf8)
 000E           ; #define SetAck()        (TWCR|=(1<<TWEA))
 000E           ; #define SetNoAck()    (TWCR&=~(1<<TWEA))
 000E           ; #define Twi()           (TWCR=(1<<TWINT)|(1<<TWEN))
 000E           ; #define Write8Bit(x)  {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 
 000E           ; 
 000E           ; #define DataPort PORTA                
 000E           ; #define Busy 0x80                     
 000E           ; #define xtal 8                
 000E           ; 
 000E           ; //======================================
 000E           ; const uchar str0[]={"-Time   :  :  --"};//待显字符串
 000E           ; const uchar str1[]={"-ATime   :  : --"};//待显字符串
 000E           ; 
 000E           ; //========函数声明=========
 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 delay_ms(unsigned int time);
 000E           ; void delay_us(int time);
 000E           ; void init_devices(void);
 000E           ; 
 000E           ; //**********************显示指定座标的一串字符子函数**************
 000E           ; void ePutstr(uchar x,uchar y,uchar const *ptr)
 000E           ; {
 000E                   .dbline 67
 000E           ; uchar i,l=0;
 000E 4427              clr R20
 0010 01C0              xjmp L3
 0012           L2:
 0012                   .dbline 68
 0012                   .dbline 68
 0012 4395              inc R20
 0014                   .dbline 68
 0014           L3:
 0014                   .dbline 68
 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 69
 0024 6627              clr R22
 0026 14C0              xjmp L8
 0028           L5:
 0028                   .dbline 69
 0028           ;       for(i=0;i<l;i++){
 0028                   .dbline 70
 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 71
 0042           ;       if(x==16){
 0042 8E2D              mov R24,R14
 0044 8031              cpi R24,16
 0046 19F4              brne L9
 0048                   .dbline 71
 0048                   .dbline 72
 0048           ;               x=0;y^=1;
 0048 EE24              clr R14
 004A                   .dbline 72
 004A 81E0              ldi R24,1
 004C C826              eor R12,R24
 004E                   .dbline 73
 004E           ;       }
 004E           L9:
 004E                   .dbline 74
 004E           L6:
 004E                   .dbline 69
 004E 6395              inc R22
 0050           L8:
 0050                   .dbline 69
 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 79
 0064           ;   }
 0064           ; }
 0064           ; 
 0064           ; //*******************显示光标定位子函数******************
 0064           ; void LocateXY(char posx,char posy)
 0064           ; {
 0064                   .dbline 81
 0064           ; uchar temp;
 0064           ;       temp&=0x7f;
 0064 4F77              andi R20,127
 0066                   .dbline 82
 0066           ;       temp=posx&0x0f;
 0066 4A2D              mov R20,R10
 0068 4F70              andi R20,15
 006A                   .dbline 83
 006A           ;       posy&=0x01;
 006A 6170              andi R22,1
 006C                   .dbline 84
 006C           ;       if(posy)temp|=0x40;
 006C 09F0              breq L12
 006E                   .dbline 84
 006E 4064              ori R20,64
 0070           L12:
 0070                   .dbline 85
 0070           ;       temp|=0x80;
 0070 4068              ori R20,128
 0072                   .dbline 86
 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 91
 0086           ; }
 0086           ; 
 0086           ; //*******************显示指定座标的一个字符子函数*******************
 0086           ; void DisplayOneChar(uchar x,uchar y,uchar Wdata)
 0086           ; {
 0086                   .dbline 92
 0086           ; LocateXY(x,y);
 0086 262F              mov R18,R22
 0088 042F              mov R16,R20
 008A E8DF              xcall _LocateXY
 008C                   .dbline 93
 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 98
 0096           ; }
 0096           ; 
 0096           ; //*******************LCD初始化子函数*********************
 0096           ; void InitLcd(void) 
 0096           ; {
 0096                   .dbline 99
 0096           ; LcdWriteCommand(0x38,0); 
 0096 2227              clr R18
 0098 08E3              ldi R16,56
 009A 1FD0              xcall _LcdWriteCommand
 009C                   .dbline 100
 009C           ; delay_ms(5);
 009C 05E0              ldi R16,5
 009E 10E0              ldi R17,0
 00A0 B4D2              xcall _delay_ms
 00A2                   .dbline 101
 00A2           ; LcdWriteCommand(0x38,0); 
 00A2 2227              clr R18
 00A4 08E3              ldi R16,56
 00A6 19D0              xcall _LcdWriteCommand
 00A8                   .dbline 102
 00A8           ; delay_ms(5);
 00A8 05E0              ldi R16,5
 00AA 10E0              ldi R17,0
 00AC AED2              xcall _delay_ms
 00AE                   .dbline 103
 00AE           ; LcdWriteCommand(0x38,0);
 00AE 2227              clr R18
 00B0 08E3              ldi R16,56
 00B2 13D0              xcall _LcdWriteCommand
 00B4                   .dbline 104
 00B4           ; delay_ms(5);
 00B4 05E0              ldi R16,5
 00B6 10E0              ldi R17,0
 00B8 A8D2              xcall _delay_ms
 00BA                   .dbline 105
 00BA           ; LcdWriteCommand(0x38,1); 
 00BA 21E0              ldi R18,1
 00BC 08E3              ldi R16,56
 00BE 0DD0              xcall _LcdWriteCommand
 00C0                   .dbline 106
 00C0           ; LcdWriteCommand(0x08,1); 
 00C0 21E0              ldi R18,1
 00C2 08E0              ldi R16,8
 00C4 0AD0              xcall _LcdWriteCommand
 00C6                   .dbline 107
 00C6           ; LcdWriteCommand(0x01,1); 
 00C6 21E0              ldi R18,1
 00C8 01E0              ldi R16,1
 00CA 07D0              xcall _LcdWriteCommand
 00CC                   .dbline 108
 00CC           ; LcdWriteCommand(0x06,1); 
 00CC 21E0              ldi R18,1
 00CE 06E0              ldi R16,6
 00D0 04D0              xcall _LcdWriteCommand
 00D2                   .dbline 109
 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -