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

📄 1602lcd.lis

📁 AVR之ATMega16
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -