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

📄 lcd1602.lis

📁 用AVR及1602LCD在PROTEUS环境下仿真
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module lcd1602.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\练习\LCD显示1602/lcd1602.h
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 29
 0000           ; //ICC-AVR application builder : 2007-4-21 20:12:02
 0000           ; // Target : M16
 0000           ; // Crystal: 8.0000Mhz
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "lcd1602.h"
 0000           ; 
 0000           ; /*unsigned char TempBuffer[10];
 0000           ; void IntToStr(unsigned int t, unsigned char *str, unsigned char n) 
 0000           ; {
 0000           ;       unsigned char a[5]; 
 0000           ;       char i, j;                                      
 0000           ;       a[0]=(t/10000)%10;         //取得整数值到数组           
 0000           ;       a[1]=(t/1000)%10;                                       
 0000           ;       a[2]=(t/100)%10;                                        
 0000           ;       a[3]=(t/10)%10;                                         
 0000           ;       a[4]=(t/1)%10;                                          
 0000           ;                                                       
 0000           ;       for(i=0; i<5; i++)         //转成ASCII码                
 0000           ;               a[i]=a[i]+'0';                                          
 0000           ;       for(i=0; a[i]=='0' && i<=3; i++);                       
 0000           ;       for(j=5-n; j<i; j++)       //填充空格                   
 0000           ;               { *str='a';  str++; }                                   
 0000           ;       for(; i<5; i++)                                         
 0000           ;               { *str=a[i]; str++; }  //加入有效的数字                 
 0000           ;       *str='\0'; 
 0000           ; } */
 0000           ; 
 0000                   .dbline 30
 0000           ; unsigned char second[2],minute[2],hour[2];
 0000 2224              clr R2
 0002 2BBA              out 0x1b,R2
 0004                   .dbline 31
 0004           ; unsigned char Year[4],Month[2],Day[2];
 0004 2ABA              out 0x1a,R2
 0006                   .dbline 32
 0006           ; unsigned char sec=0,min=5,hou=18;
 0006 28BA              out 0x18,R2
 0008                   .dbline 33
 0008           ; unsigned int year=2007;
 0008 27BA              out 0x17,R2
 000A                   .dbline 34
 000A           ; unsigned char month=4,day=23;
 000A 80E1              ldi R24,16
 000C 85BB              out 0x15,R24
 000E                   .dbline 35
 000E           ; unsigned char flash_flag=0,time_set=0;
 000E 8CE1              ldi R24,28
 0010 84BB              out 0x14,R24
 0012                   .dbline 36
 0012           ; 
 0012 22BA              out 0x12,R2
 0014                   .dbline 37
 0014           ;  
 0014 21BA              out 0x11,R2
 0016                   .dbline -2
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbend
 0018                   .dbfunc e watchdog_init _watchdog_init fV
                        .even
 0018           _watchdog_init::
 0018                   .dbline -1
 0018                   .dbline 44
 0018           ; void IntToStr(unsigned char t, unsigned char *str) 
 0018           ; {
 0018           ;       unsigned char a[2]; 
 0018           ;       char i;                                         
 0018           ;                                               
 0018           ;       a[0]=(t/10)%10;   //取得整数值到数组                                            
 0018           ;       a[1]=(t/1)%10;                                          
 0018                   .dbline 45
 0018           ;       for(i=0; i<2; i++)         //转成ASCII码                
 0018 A895              wdr
 001A                   .dbline 46
 001A           ;               a[i]=a[i]+'0'; 
 001A 8FE0              ldi R24,15
 001C 81BD              out 0x21,R24
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0020           _timer1_init::
 0020                   .dbline -1
 0020                   .dbline 54
 0020           ;     for(i=0;i<2;i++)
 0020           ;       {
 0020           ;        *str=a[i];
 0020           ;        str++;
 0020           ;       } 
 0020           ;       *str='\0';
 0020           ; }
 0020           ; //**************************************************************
 0020                   .dbline 55
 0020           ; void IntToStr1(unsigned int t, unsigned char *str) 
 0020 2224              clr R2
 0022 2EBC              out 0x2e,R2
 0024                   .dbline 56
 0024           ; {
 0024 82EC              ldi R24,194
 0026 8DBD              out 0x2d,R24
 0028                   .dbline 57
 0028           ;       unsigned char a[4]; 
 0028 87EF              ldi R24,247
 002A 8CBD              out 0x2c,R24
 002C                   .dbline 66
 002C           ;       char i, j;                                      
 002C           ;       a[0]=(t/1000)%10;         //取得整数值到数组            
 002C           ;       a[1]=(t/100)%10;                                        
 002C           ;       a[2]=(t/10)%10;                                         
 002C           ;       a[3]=(t/1)%10;                                                                          
 002C           ;       for(i=0; i<4; i++)         //转成ASCII码                
 002C           ;               a[i]=a[i]+'0';
 002C           ;       for(i=0;i<4;i++)
 002C           ;       {
 002C 2FBC              out 0x2f,R2
 002E                   .dbline 67
 002E           ;        *str=a[i];
 002E 84E0              ldi R24,4
 0030 8EBD              out 0x2e,R24
 0032                   .dbline -2
 0032           L3:
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbend
 0034                   .dbfunc e init_devices _init_devices fV
                        .even
 0034           _init_devices::
 0034                   .dbline -1
 0034                   .dbline 72
 0034           ;        str++;
 0034           ;       } 
 0034           ;       *str='\0';
 0034           ; }
 0034           ;                 
 0034                   .dbline 74
 0034           ; //主函数
 0034           ; void main(void)
 0034 F894              cli
 0036                   .dbline 75
 0036           ; {
 0036 E4DF              xcall _port_init
 0038                   .dbline 76
 0038           ;  /*unsigned char sec=0,min=5,hou=18;
 0038 EFDF              xcall _watchdog_init
 003A                   .dbline 77
 003A           ;  unsigned int year=2007;
 003A F2DF              xcall _timer1_init
 003C                   .dbline 79
 003C           ;  unsigned char month=4,day=23;*/
 003C           ;  
 003C 2224              clr R2
 003E 25BE              out 0x35,R2
 0040                   .dbline 80
 0040           ;  init_devices();
 0040 80EC              ldi R24,192
 0042 8BBF              out 0x3b,R24
 0044                   .dbline 81
 0044           ;  lcd_init();
 0044 84E0              ldi R24,4
 0046 89BF              out 0x39,R24
 0048                   .dbline 82
 0048           ;  GotoXY(0,0);
 0048 7894              sei
 004A                   .dbline -2
 004A           L4:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbend
 004C                   .dbfunc e delay_us _delay_us fV
 004C           ;           time -> R16,R17
                        .even
 004C           _delay_us::
 004C                   .dbline -1
 004C                   .dbline 88
 004C           ;  Print("Date:");
 004C           ;  GotoXY(0,1);
 004C           ;  asm("nop");
 004C           ;  Print("Time:           ");
 004C           ;  //********************************************************
 004C           ;   GotoXY(13,0);//显示':'
 004C                   .dbline 89
 004C           ;   Print(":");
 004C A895              wdr
 004E 08C0              xjmp L7
 0050           L6:
 0050                   .dbline 91
 0050                   .dbline 92
 0050 0000              nop
 0052                   .dbline 92
 0052 0000              nop
 0054                   .dbline 92
 0054 0000              nop
 0056                   .dbline 92
 0056 0000              nop
 0058                   .dbline 92
 0058 0000              nop
 005A                   .dbline 92
 005A 0000              nop
 005C                   .dbline 92
 005C 0000              nop
 005E                   .dbline 92
 005E 0000              nop
 0060                   .dbline 93
 0060           L7:
 0060                   .dbline 90
 0060           ;   GotoXY(10,0);
 0060 1801              movw R2,R16
 0062 0150              subi R16,1
 0064 1040              sbci R17,0
 0066 2220              tst R2
 0068 99F7              brne L6
 006A 3320              tst R3
 006C 89F7              brne L6
 006E           X0:
 006E                   .dbline -2
 006E           L5:
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbsym r time 16 I
 0070                   .dbend
 0070                   .dbfunc e delay_ms _delay_ms fV
 0070           ;           time -> R20,R21
                        .even
 0070           _delay_ms::
 0070 0E940000          xcall push_gset1
 0074 A801              movw R20,R16
 0076                   .dbline -1
 0076                   .dbline 96
 0076           ;   Print(":");
 0076           ;  //循环函数********************************************************
 0076           ;  while(1)
 0076           ;  {
 0076           ;  //********************************************************
 0076           ;   WDR();  
 0076 03C0              xjmp L11
 0078           L10:
 0078                   .dbline 98
 0078                   .dbline 99
 0078 08EE              ldi R16,1000
 007A 13E0              ldi R17,3
 007C E7DF              xcall _delay_us
 007E                   .dbline 100
 007E           L11:
 007E                   .dbline 97
 007E           ;   IntToStr(sec,&second[0]);//把两位的秒位转换成两个一位的数字才能显示;
 007E 1A01              movw R2,R20
 0080 4150              subi R20,1
 0082 5040              sbci R21,0
 0084 2220              tst R2
 0086 C1F7              brne L10
 0088 3320              tst R3
 008A B1F7              brne L10
 008C           X1:
 008C                   .dbline -2
 008C           L9:
 008C 0E940000          xcall pop_gset1
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym r time 20 I
 0092                   .dbend
 0092                   .dbfunc e lcd_read_code _lcd_read_code fc
 0092           ;           code -> R20
                        .even
 0092           _lcd_read_code::
 0092 0E940000          xcall push_gset1
 0096                   .dbline -1
 0096                   .dbline 106
 0096           ;   GotoXY(12,1);
 0096           ;   if(time_set!=1)
 0096           ;   {   
 0096           ;    Print(&second[0]);
 0096           ;   }
 0096           ;   else if(time_set==1)//当时间设定选定秒位时,秒位开始闪烁;
 0096           ;   {
 0096           ;    if((flash_flag)%2==0)
 0096           ;    {
 0096                   .dbline 108
 0096           ;     Print(&second[0]);
 0096           ;    }
 0096 2224              clr R2
 0098 2ABA              out 0x1a,R2
 009A                   .dbline 109
 009A           ;    else
 009A AA98              cbi 0x15,2
 009C                   .dbline 110
 009C           ;    {
 009C AB9A              sbi 0x15,3
 009E                   .dbline 111
 009E           ;     Print("  ");
 009E AC9A              sbi 0x15,4
 00A0                   .dbline 112
 00A0           ;    }
 00A0 01E0              ldi R16,1
 00A2 10E0              ldi R17,0
 00A4 E5DF              xcall _delay_ms
 00A6                   .dbline 113
 00A6           ;   } 
 00A6 49B3              in R20,0x19
 00A8                   .dbline 114
 00A8           ;   //********************************************************  
 00A8 AC98              cbi 0x15,4
 00AA                   .dbline 115
 00AA           ;   if((flash_flag%2)==0)
 00AA AB98              cbi 0x15,3
 00AC                   .dbline 116
 00AC           ;   {
 00AC 8FEF              ldi R24,255
 00AE 8ABB              out 0x1a,R24
 00B0                   .dbline 117
 00B0           ;    GotoXY(11,1);//显示':'
 00B0 042F              mov R16,R20
 00B2                   .dbline -2
 00B2           L13:
 00B2 0E940000          xcall pop_gset1
 00B6                   .dbline 0 ; func end
 00B6 0895              ret
 00B8                   .dbsym r code 20 c
 00B8                   .dbend
 00B8                   .dbfunc e judgebusy _judgebusy fV
                        .even
 00B8           _judgebusy::
 00B8                   .dbline -1
 00B8                   .dbline 123
 00B8           ;    Print(":");
 00B8           ;    GotoXY(8,1);
 00B8           ;    Print(":");
 00B8           ;   }
 00B8           ;   else
 00B8           ;   {
 00B8           L15:
 00B8                   .dbline 127
 00B8                   .dbline 131
 00B8           L16:
 00B8                   .dbline 126

⌨️ 快捷键说明

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