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

📄 +_-

📁 avr单片机icc写的密码锁
💻
📖 第 1 页 / 共 5 页
字号:
 00EC 89DF              xcall _delay
 00EE                   .dbline 100
 00EE           ;    sendbyte12864(com<<4); //接写低四位
 00EE 042F              mov R16,R20
 00F0 0F70              andi R16,#0x0F
 00F2 0295              swap R16
 00F4 CBDF              xcall _sendbyte12864
 00F6                   .dbline 101
 00F6           ;    delay(2);
 00F6 02E0              ldi R16,2
 00F8 10E0              ldi R17,0
 00FA 82DF              xcall _delay
 00FC                   .dbline -2
 00FC           L24:
 00FC                   .dbline 0 ; func end
 00FC 4991              ld R20,y+
 00FE 0895              ret
 0100                   .dbsym r com 20 c
 0100                   .dbend
 0100                   .dbfunc e write_dat12864 _write_dat12864 fV
 0100           ;            dat -> R20
                        .even
 0100           _write_dat12864::
 0100 4A93              st -y,R20
 0102 402F              mov R20,R16
 0104                   .dbline -1
 0104                   .dbline 109
 0104           ;    //CLR_CS;
 0104           ; }
 0104           ; /****************************************************************
 0104           ;                    写字数据指令                       
 0104           ; *****************************************************************/
 0104           ; 
 0104           ; void write_dat12864(uchar dat)
 0104           ; {  
 0104                   .dbline 111
 0104           ;    //SET_CS;
 0104           ;    sendbyte12864(0xfa);
 0104 0AEF              ldi R16,250
 0106 C2DF              xcall _sendbyte12864
 0108                   .dbline 112
 0108           ;    delay(2);
 0108 02E0              ldi R16,2
 010A 10E0              ldi R17,0
 010C 79DF              xcall _delay
 010E                   .dbline 113
 010E           ;    sendbyte12864(dat&0xf0);
 010E 042F              mov R16,R20
 0110 007F              andi R16,240
 0112 BCDF              xcall _sendbyte12864
 0114                   .dbline 114
 0114           ;    delay(2);
 0114 02E0              ldi R16,2
 0116 10E0              ldi R17,0
 0118 73DF              xcall _delay
 011A                   .dbline 115
 011A           ;    sendbyte12864(dat<<4);
 011A 042F              mov R16,R20
 011C 0F70              andi R16,#0x0F
 011E 0295              swap R16
 0120 B5DF              xcall _sendbyte12864
 0122                   .dbline 116
 0122           ;    delay(2);
 0122 02E0              ldi R16,2
 0124 10E0              ldi R17,0
 0126 6CDF              xcall _delay
 0128                   .dbline -2
 0128           L25:
 0128                   .dbline 0 ; func end
 0128 4991              ld R20,y+
 012A 0895              ret
 012C                   .dbsym r dat 20 c
 012C                   .dbend
 012C                   .dbfunc e lcd_pos12864 _lcd_pos12864 fV
 012C           ;              x -> R20
 012C           ;              y -> R10
                        .even
 012C           _lcd_pos12864::
 012C 0E940000          xcall push_xgsetF00C
 0130 422F              mov R20,R18
 0132 A02E              mov R10,R16
 0134                   .dbline -1
 0134                   .dbline 124
 0134           ;   //CLR_CS;
 0134           ; }
 0134           ; /****************************************************************
 0134           ;                     液晶定位函数                     
 0134           ; *****************************************************************/
 0134           ; 
 0134           ; void lcd_pos12864(uchar y,uchar x)
 0134           ; {
 0134                   .dbline 125
 0134           ;    switch(y)
 0134 6A2D              mov R22,R10
 0136 7727              clr R23
 0138 6030              cpi R22,0
 013A 6707              cpc R22,R23
 013C 69F0              breq L30
 013E           X5:
 013E 6130              cpi R22,1
 0140 E0E0              ldi R30,0
 0142 7E07              cpc R23,R30
 0144 69F0              breq L31
 0146           X6:
 0146 6230              cpi R22,2
 0148 E0E0              ldi R30,0
 014A 7E07              cpc R23,R30
 014C 69F0              breq L32
 014E           X7:
 014E 6330              cpi R22,3
 0150 E0E0              ldi R30,0
 0152 7E07              cpc R23,R30
 0154 69F0              breq L33
 0156           X8:
 0156 0FC0              xjmp L28
 0158           L30:
 0158                   .dbline 127
 0158           ;    {
 0158           ;       case 0: write_com12864(0x80+x);break;
 0158 042F              mov R16,R20
 015A 0058              subi R16,128    ; addi 128
 015C BBDF              xcall _write_com12864
 015E                   .dbline 127
 015E 0BC0              xjmp L28
 0160           L31:
 0160                   .dbline 128
 0160           ;       case 1: write_com12864(0x90+x);break;
 0160 042F              mov R16,R20
 0162 0057              subi R16,112    ; addi 144
 0164 B7DF              xcall _write_com12864
 0166                   .dbline 128
 0166 07C0              xjmp L28
 0168           L32:
 0168                   .dbline 129
 0168           ;       case 2: write_com12864(0x88+x);break;
 0168 042F              mov R16,R20
 016A 0857              subi R16,120    ; addi 136
 016C B3DF              xcall _write_com12864
 016E                   .dbline 129
 016E 03C0              xjmp L28
 0170           L33:
 0170                   .dbline 130
 0170           ;       case 3: write_com12864(0x98+x);break;
 0170 042F              mov R16,R20
 0172 0856              subi R16,104    ; addi 152
 0174 AFDF              xcall _write_com12864
 0176                   .dbline 130
 0176                   .dbline 131
 0176           ;       default:break;
 0176           L28:
 0176                   .dbline -2
 0176           L26:
 0176                   .dbline 0 ; func end
 0176 0C940000          xjmp pop_xgsetF00C
 017A                   .dbsym r x 20 c
 017A                   .dbsym r y 10 c
 017A                   .dbend
 017A                   .dbfunc e writeString12864 _writeString12864 fV
 017A           ;              i -> R20
 017A           ;            str -> R10,R11
                        .even
 017A           _writeString12864::
 017A 0E940000          xcall push_xgset300C
 017E 5801              movw R10,R16
 0180                   .dbline -1
 0180                   .dbline 139
 0180           ;    }
 0180           ; 
 0180           ; }
 0180           ; /****************************************************************
 0180           ;                 12864的写字符串函数                          
 0180           ; *****************************************************************/
 0180           ; void writeString12864(uchar * str)
 0180           ; {
 0180                   .dbline 140
 0180           ;    uchar i = 0;
 0180 4427              clr R20
 0182 09C0              xjmp L36
 0184           L35:
 0184                   .dbline 142
 0184           ;    while(str[i] != '\0')//判断是否是字符串结束符
 0184           ;    {
 0184                   .dbline 143
 0184           ;       write_dat12864(str[i++]);
 0184 242E              mov R2,R20
 0186 3324              clr R3
 0188 4F5F              subi R20,255    ; addi 1
 018A E22D              mov R30,R2
 018C FF27              clr R31
 018E EA0D              add R30,R10
 0190 FB1D              adc R31,R11
 0192 0081              ldd R16,z+0
 0194 B5DF              xcall _write_dat12864
 0196                   .dbline 144
 0196           ;    }
 0196           L36:
 0196                   .dbline 141
 0196 E42F              mov R30,R20
 0198 FF27              clr R31
 019A EA0D              add R30,R10
 019C FB1D              adc R31,R11
 019E 2080              ldd R2,z+0
 01A0 2220              tst R2
 01A2 81F7              brne L35
 01A4           X9:
 01A4                   .dbline -2
 01A4           L34:
 01A4                   .dbline 0 ; func end
 01A4 0C940000          xjmp pop_xgset300C
 01A8                   .dbsym r i 20 c
 01A8                   .dbsym r str 10 pc
 01A8                   .dbend
 01A8                   .dbfunc e drawpic12864 _drawpic12864 fV
 01A8           ;              k -> <dead>
 01A8           ;              i -> R20
 01A8           ;              j -> R22
 01A8           ;              p -> R10,R11
                        .even
 01A8           _drawpic12864::
 01A8 0E940000          xcall push_xgsetF00C
 01AC 5801              movw R10,R16
 01AE                   .dbline -1
 01AE                   .dbline 150
 01AE           ; }
 01AE           ; /****************************************************************
 01AE           ;                画图函数  逐行,顺向,8*16
 01AE           ; ****************************************************************/
 01AE           ; void drawpic12864(const uchar *p)
 01AE           ; {
 01AE                   .dbline 152
 01AE           ;    uchar i, j, k ;
 01AE           ;    write_com12864(0x36);          //扩充指令集动作
 01AE 06E3              ldi R16,54
 01B0 91DF              xcall _write_com12864
 01B2                   .dbline 153
 01B2           ;    delay(2);
 01B2 02E0              ldi R16,2
 01B4 10E0              ldi R17,0
 01B6 24DF              xcall _delay
 01B8                   .dbline 154
 01B8           ;    write_com12864(0x36);
 01B8 06E3              ldi R16,54
 01BA 8CDF              xcall _write_com12864
 01BC                   .dbline 155
 01BC           ;    delay(2);
 01BC 02E0              ldi R16,2
 01BE 10E0              ldi R17,0
 01C0 1FDF              xcall _delay
 01C2                   .dbline 156
 01C2           ;    write_com12864(0x3e);                       //找开绘图显示功能
 01C2 0EE3              ldi R16,62
 01C4 87DF              xcall _write_com12864
 01C6                   .dbline 157
 01C6           ;    delay(2);
 01C6 02E0              ldi R16,2
 01C8 10E0              ldi R17,0
 01CA 1ADF              xcall _delay
 01CC                   .dbline 158
 01CC           ;    write_com12864(0x01);                       //清屏
 01CC 01E0              ldi R16,1
 01CE 82DF              xcall _write_com12864
 01D0                   .dbline 159
 01D0           ;    for(i=0;i<32;i++)           //画上半屏  32行点阵
 01D0 4427              clr R20
 01D2 0FC0              xjmp L42
 01D4           L39:
 01D4                   .dbline 160
 01D4           ;    {
 01D4                   .dbline 161
 01D4           ;         write_com12864(0x80+i);        //设定 DDRAM 位址到位址计数器(AC) 写每行点阵都要先写这个指令
 01D4 042F              mov R16,R20
 01D6 0058              subi R16,128    ; addi 128
 01D8 7DDF              xcall _write_com12864
 01DA                   .dbline 162
 01DA           ;         write_com12864(0x80);
 01DA 00E8              ldi R16,128
 01DC 7BDF              xcall _write_com12864
 01DE                   .dbline 163
 01DE           ;         for(j=0;j<16;j++)      //每个字节8个点 16*8=128个点  所以上面画了128*32个点
 01DE 6627              clr R22
 01E0 05C0              xjmp L46
 01E2           L43:
 01E2                   .dbline 164
 01E2           ;         {
 01E2                   .dbline 165
 01E2           ;            write_dat12864(*p++);
 01E2 F501              movw R30,R10
 01E4 0191              ld R16,Z+
 01E6 5F01              movw R10,R30
 01E8 8BDF              xcall _write_dat12864
 01EA                   .dbline 166
 01EA           ;         }
 01EA           L44:
 01EA                   .dbline 163
 01EA 6395              inc R22
 01EC           L46:
 01EC                   .dbline 163
 01EC 6031              cpi R22,16
 01EE C8F3              brlo L43
 01F0           X10:
 01F0                   .dbline 167
 01F0           ;    }
 01F0           L40:
 01F0                   .dbline 159
 01F0 4395              inc R20
 01F2           L42:
 01F2                   .dbline 159
 01F2 4032              cpi R20,32
 01F4 78F3              brlo L39
 01F6           X11:
 01F6                   .dbline 168
 01F6           ;    for(i=0;i<32;i++)                   //画下半屏
 01F6 4427              clr R20
 01F8 0FC0              xjmp L50
 01FA           L47:
 01FA                   .dbline 169
 01FA           ;    {
 01FA                   .dbline 170
 01FA           ;         write_com12864(0x80+i);
 01FA 042F              mov R16,R20
 01FC 0058              subi R16,128    ; addi 128
 01FE 6ADF              xcall _write_com12864
 0200                   .dbline 171
 0200           ;         write_com12864(0x88);
 0200 08E8              ldi R16,136
 0202 68DF              xcall _write_com12864
 0204                   .dbline 172
 0204           ;         for(j=0;j<16;j++)
 0204 6627              clr R22
 0206 05C0              xjmp L54
 0208           L51:
 0208                   .dbline 173
 0208           ;         {
 0208                   .dbline 174
 0208           ;            write_dat12864(*p++);
 0208 F501              movw R30,R10
 020A 0191              ld R16,Z+
 020C 5F01              movw R10,R30
 020E 78DF              xcall _write_dat12864
 0210                   .dbline 175

⌨️ 快捷键说明

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