📄 lcd1602.lis
字号:
.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 + -