📄 1602lcd.lis
字号:
0088 ; MCUCSR = 0x80;//禁止JTAG
0088 80E8 ldi R24,128
008A 84BF out 0x34,R24
008C .dbline 86
008C ; GICR = 0x00;//外部中断使能
008C 2BBE out 0x3b,R2
008E .dbline 87
008E ; port_init();
008E D7DF xcall _port_init
0090 .dbline 88
0090 ; n1602_init();
0090 E1DF xcall _n1602_init
0092 .dbline 89
0092 ; SEI();//开全局中断
0092 7894 sei
0094 .dbline -2
0094 L15:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
0096 .dbfunc e write_com _write_com fV
0096 ; com -> R20
.even
0096 _write_com::
0096 0E940000 xcall push_gset1
009A 402F mov R20,R16
009C .dbline -1
009C .dbline 93
009C ; }
009C ; /******************写指令********************/
009C ; void write_com(uchar com)
009C ; {
009C .dbline 94
009C ; RS_L; //选择命令
009C DA98 cbi 0x1b,2
009E .dbline 95
009E ; RW_L; //写
009E D998 cbi 0x1b,1
00A0 .dbline 96
00A0 ; PORTD=com; //送命令
00A0 42BB out 0x12,R20
00A2 .dbline 97
00A2 ; EN_H;
00A2 D89A sbi 0x1b,0
00A4 .dbline 98
00A4 ; DelayMS(1); //延时不可少,否则数据丢失
00A4 01E0 ldi R16,1
00A6 10E0 ldi R17,0
00A8 B4DF xcall _DelayMS
00AA .dbline 99
00AA ; EN_L; //下降沿写入
00AA 8EEF ldi R24,254
00AC 8BBB out 0x1b,R24
00AE .dbline -2
00AE L16:
00AE 0E940000 xcall pop_gset1
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym r com 20 c
00B4 .dbend
00B4 .dbfunc e write_dat _write_dat fV
00B4 ; dat -> R20
.even
00B4 _write_dat::
00B4 0E940000 xcall push_gset1
00B8 402F mov R20,R16
00BA .dbline -1
00BA .dbline 103
00BA ; }
00BA ; /******************写数据********************/
00BA ; void write_dat(uchar dat)
00BA ; {
00BA .dbline 104
00BA ; RS_H; //选择数据
00BA DA9A sbi 0x1b,2
00BC .dbline 105
00BC ; RW_L; //写
00BC D998 cbi 0x1b,1
00BE .dbline 106
00BE ; PORTD=dat; //送数据
00BE 42BB out 0x12,R20
00C0 .dbline 107
00C0 ; EN_H;
00C0 D89A sbi 0x1b,0
00C2 .dbline 108
00C2 ; DelayMS(1); //延时不可少,否则数据丢失
00C2 01E0 ldi R16,1
00C4 10E0 ldi R17,0
00C6 A5DF xcall _DelayMS
00C8 .dbline 109
00C8 ; EN_L; //下降沿写入
00C8 8EEF ldi R24,254
00CA 8BBB out 0x1b,R24
00CC .dbline -2
00CC L17:
00CC 0E940000 xcall pop_gset1
00D0 .dbline 0 ; func end
00D0 0895 ret
00D2 .dbsym r dat 20 c
00D2 .dbend
00D2 .dbfunc e set_xy _set_xy fV
00D2 ; y -> R20
00D2 ; x -> R22
.even
00D2 _set_xy::
00D2 0E940000 xcall push_gset2
00D6 422F mov R20,R18
00D8 602F mov R22,R16
00DA .dbline -1
00DA .dbline 113
00DA ; }
00DA ; /******************设置行列******************/
00DA ; void set_xy(uchar x,uchar y) //x从1-2,y从1-40
00DA ; {
00DA .dbline 114
00DA ; if(x==1)
00DA 6130 cpi R22,1
00DC 29F4 brne L19
00DE .dbline 115
00DE ; {write_com(0x80+y-1);} //对y调整为寄存器地址
00DE .dbline 115
00DE 042F mov R16,R20
00E0 0058 subi R16,128 ; addi 128
00E2 0150 subi R16,1
00E4 D8DF xcall _write_com
00E6 .dbline 115
00E6 04C0 xjmp L20
00E8 L19:
00E8 .dbline 117
00E8 .dbline 117
00E8 042F mov R16,R20
00EA 0054 subi R16,64 ; addi 192
00EC 0150 subi R16,1
00EE D3DF xcall _write_com
00F0 .dbline 117
00F0 L20:
00F0 .dbline -2
00F0 L18:
00F0 0E940000 xcall pop_gset2
00F4 .dbline 0 ; func end
00F4 0895 ret
00F6 .dbsym r y 20 c
00F6 .dbsym r x 22 c
00F6 .dbend
00F6 .dbfunc e main _main fV
00F6 ; i -> R20
.even
00F6 _main::
00F6 .dbline -1
00F6 .dbline 121
00F6 ; else
00F6 ; {write_com(0x80+0x40+y-1);}
00F6 ; }
00F6 ; /*******************主函数********************/
00F6 ; void main()
00F6 ; {
00F6 .dbline 123
00F6 ; uchar i;
00F6 ; init_devices(); //单片机、1602初始化
00F6 C5DF xcall _init_devices
00F8 .dbline 126
00F8 ;
00F8 ; ///***********************************第一种方法**************************************
00F8 ; set_xy(1,1); //数据放入第1行第18列以后的寄存器
00F8 21E0 ldi R18,1
00FA 01E0 ldi R16,1
00FC EADF xcall _set_xy
00FE .dbline 127
00FE ; DelayMS(1); //若出现乱码,可加适当延时
00FE 01E0 ldi R16,1
0100 10E0 ldi R17,0
0102 87DF xcall _DelayMS
0104 .dbline 128
0104 ; for(i=0;i<15;i++) //循环table1的字符数
0104 4427 clr R20
0106 0CC0 xjmp L25
0108 L22:
0108 .dbline 129
0108 .dbline 130
0108 80E0 ldi R24,<_table1
010A 90E0 ldi R25,>_table1
010C E42F mov R30,R20
010E FF27 clr R31
0110 E80F add R30,R24
0112 F91F adc R31,R25
0114 0491 lpm R16,Z
0116 CEDF xcall _write_dat
0118 .dbline 131
0118 01E0 ldi R16,1
011A 10E0 ldi R17,0
011C 7ADF xcall _DelayMS
011E .dbline 132
011E L23:
011E .dbline 128
011E 4395 inc R20
0120 L25:
0120 .dbline 128
0120 4F30 cpi R20,15
0122 90F3 brlo L22
0124 .dbline 133
0124 ; {
0124 ; write_dat(table1[i]); //写入第i个字符
0124 ; DelayMS(1); //若出现乱码,可加适当延时
0124 ; }
0124 ; set_xy(2,1); //数据放入第2行第20列以后的寄存器
0124 21E0 ldi R18,1
0126 02E0 ldi R16,2
0128 D4DF xcall _set_xy
012A .dbline 134
012A ; DelayMS(1); //若出现乱码,可加适当延时
012A 01E0 ldi R16,1
012C 10E0 ldi R17,0
012E 71DF xcall _DelayMS
0130 .dbline 135
0130 ; for(i=0;i<15;i++) //循环table2的字符数
0130 4427 clr R20
0132 0CC0 xjmp L29
0134 L26:
0134 .dbline 136
0134 .dbline 137
0134 80E0 ldi R24,<_table2
0136 90E0 ldi R25,>_table2
0138 E42F mov R30,R20
013A FF27 clr R31
013C E80F add R30,R24
013E F91F adc R31,R25
0140 0491 lpm R16,Z
0142 B8DF xcall _write_dat
0144 .dbline 138
0144 01E0 ldi R16,1
0146 10E0 ldi R17,0
0148 64DF xcall _DelayMS
014A .dbline 139
014A L27:
014A .dbline 135
014A 4395 inc R20
014C L29:
014C .dbline 135
014C 4F30 cpi R20,15
014E 90F3 brlo L26
0150 .dbline -2
0150 L21:
0150 .dbline 0 ; func end
0150 0895 ret
0152 .dbsym r i 20 c
0152 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -