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

📄 +_-

📁 avr单片机icc写的密码锁
💻
📖 第 1 页 / 共 5 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile main.c
                        .area vector(rom, abs)
                        .org 4
 0004 0C947001          jmp _miao2
                        .area text(rom, con, rel)
 0000                   .dbfile main.c
 0000                   .dbfile C:\Users\Think\Desktop\新建文件夹\密码输入2\yejing.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              i -> R20,R21
 0000           ;             US -> R10,R11
                        .even
 0000           _delay::
 0000 0E940000          xcall push_xgset300C
 0004 5801              movw R10,R16
 0006                   .dbline -1
 0006                   .dbline 25
 0006           ; //#include <iom16v.h> 
 0006           ; //#include <macros.h>
 0006           ; //#pragma  interrupt_handler  miao9:9
 0006           ; //#pragma  interrupt_handler  miao2:2
 0006           ; //液晶命名
 0006           ; //#define  uchar unsigned char
 0006           ; //#define  uint  unsigned int
 0006           ; 
 0006           ; //#define SET_PSB PORTA|=BIT(3)
 0006           ; //#define CLR_PSB PORTA&=~BIT(3)
 0006           ; 
 0006           ; #define SET_CS PORTA|=BIT(4)
 0006           ; #define CLR_CS PORTA&=~BIT(4)
 0006           ; 
 0006           ; #define SET_SID PORTA|=BIT(5)
 0006           ; #define CLR_SID PORTA&=~BIT(5)
 0006           ; 
 0006           ; #define SET_SCLK PORTA|=BIT(6)
 0006           ; #define CLR_SCLK PORTA&=~BIT(6)
 0006           ; /****************************************************************
 0006           ;                微秒延时                          
 0006           ; *****************************************************************/
 0006           ; 
 0006           ; void delay(uint US)             
 0006           ; {
 0006                   .dbline 27
 0006           ;  uint i;
 0006           ;  US=US*5/4;                    //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
 0006 05E0              ldi R16,5
 0008 10E0              ldi R17,0
 000A 9501              movw R18,R10
 000C 0E940000          xcall empy16s
 0010 5801              movw R10,R16
 0012 B694              lsr R11
 0014 A794              ror R10
 0016 B694              lsr R11
 0018 A794              ror R10
 001A                   .dbline 28
 001A           ;  for( i=0;i<US;i++); 
 001A 4427              clr R20
 001C 5527              clr R21
 001E 02C0              xjmp L5
 0020           L2:
 0020                   .dbline 28
 0020           L3:
 0020                   .dbline 28
 0020 4F5F              subi R20,255  ; offset = 1
 0022 5F4F              sbci R21,255
 0024           L5:
 0024                   .dbline 28
 0024 4A15              cp R20,R10
 0026 5B05              cpc R21,R11
 0028 D8F3              brlo L2
 002A           X0:
 002A                   .dbline -2
 002A           L1:
 002A                   .dbline 0 ; func end
 002A 0C940000          xjmp pop_xgset300C
 002E                   .dbsym r i 20 i
 002E                   .dbsym r US 10 i
 002E                   .dbend
 002E                   .dbfunc e delay_ms _delay_ms fV
 002E           ;              i -> R20,R21
 002E           ;              j -> R22,R23
 002E           ;             ms -> R16,R17
                        .even
 002E           _delay_ms::
 002E 0E940000          xcall push_xgsetF000
 0032                   .dbline -1
 0032                   .dbline 35
 0032           ; }
 0032           ; /****************************************************************
 0032           ;                毫秒延时                          
 0032           ; *****************************************************************/
 0032           ; 
 0032           ; void delay_ms(uint ms)
 0032           ; {
 0032                   .dbline 37
 0032           ;    uint i,j;
 0032           ;    for(i=0;i<ms;i++)
 0032 4427              clr R20
 0034 5527              clr R21
 0036 0BC0              xjmp L10
 0038           L7:
 0038                   .dbline 38
 0038           ;      {
 0038                   .dbline 39
 0038           ;          for(j=0;j<1141;j++);
 0038 6627              clr R22
 003A 7727              clr R23
 003C 02C0              xjmp L14
 003E           L11:
 003E                   .dbline 39
 003E           L12:
 003E                   .dbline 39
 003E 6F5F              subi R22,255  ; offset = 1
 0040 7F4F              sbci R23,255
 0042           L14:
 0042                   .dbline 39
 0042 6537              cpi R22,117
 0044 E4E0              ldi R30,4
 0046 7E07              cpc R23,R30
 0048 D0F3              brlo L11
 004A           X1:
 004A                   .dbline 40
 004A           ;        }
 004A           L8:
 004A                   .dbline 37
 004A 4F5F              subi R20,255  ; offset = 1
 004C 5F4F              sbci R21,255
 004E           L10:
 004E                   .dbline 37
 004E 4017              cp R20,R16
 0050 5107              cpc R21,R17
 0052 90F3              brlo L7
 0054           X2:
 0054                   .dbline -2
 0054           L6:
 0054                   .dbline 0 ; func end
 0054 0C940000          xjmp pop_xgsetF000
 0058                   .dbsym r i 20 i
 0058                   .dbsym r j 22 i
 0058                   .dbsym r ms 16 i
 0058                   .dbend
 0058                   .dbfunc e port_init12864 _port_init12864 fV
                        .even
 0058           _port_init12864::
 0058                   .dbline -1
 0058                   .dbline 47
 0058           ; }
 0058           ; /****************************************************************
 0058           ;                 端口初始化                        
 0058           ; *****************************************************************/
 0058           ; 
 0058           ; void port_init12864()
 0058           ; {
 0058                   .dbline 48
 0058           ;    DDRA|=BIT(4)|BIT(5)|BIT(6);     //设定a口输出
 0058 8AB3              in R24,0x1a
 005A 8067              ori R24,112
 005C 8ABB              out 0x1a,R24
 005E                   .dbline 49
 005E           ;    PORTA&=0X8F;    //a口输出低
 005E 8BB3              in R24,0x1b
 0060 8F78              andi R24,143
 0062 8BBB              out 0x1b,R24
 0064                   .dbline 54
 0064           ;                   
 0064           ;    //DDRB=0XFF;     //设定b口输出
 0064           ;    //PORTB=0X00;    //输出低
 0064           ;    
 0064           ;    SET_CS;        //片选
 0064 DC9A              sbi 0x1b,4
 0066                   .dbline -2
 0066           L15:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbend
 0068                   .dbfunc e lcd_init12864 _lcd_init12864 fV
                        .even
 0068           _lcd_init12864::
 0068                   .dbline -1
 0068                   .dbline 63
 0068           ;    //SET_SCLK;
 0068           ; 
 0068           ; }
 0068           ; /****************************************************************
 0068           ;                 液晶屏初始化                         
 0068           ; *****************************************************************/
 0068           ; 
 0068           ; void lcd_init12864()
 0068           ; {
 0068                   .dbline 65
 0068           ;    //CLR_PSB;          //当PSB为低时 液晶处于串行数据模式
 0068           ;    write_com12864(0x30);  //功能设定:8位接口控制位,基本指令集
 0068 00E3              ldi R16,48
 006A 10E0              ldi R17,0
 006C 33D0              xcall _write_com12864
 006E                   .dbline 66
 006E           ;    delay(5);
 006E 05E0              ldi R16,5
 0070 10E0              ldi R17,0
 0072 C6DF              xcall _delay
 0074                   .dbline 67
 0074           ;    write_com12864(0x0C);  //显示开关设置:整体显示开,游标显示关,正常显示
 0074 0CE0              ldi R16,12
 0076 10E0              ldi R17,0
 0078 2DD0              xcall _write_com12864
 007A                   .dbline 68
 007A           ;    delay(5);
 007A 05E0              ldi R16,5
 007C 10E0              ldi R17,0
 007E C0DF              xcall _delay
 0080                   .dbline 69
 0080           ;    write_com12864(0x01);  //清除显示 
 0080 01E0              ldi R16,1
 0082 10E0              ldi R17,0
 0084 27D0              xcall _write_com12864
 0086                   .dbline 70
 0086           ;    delay(5);
 0086 05E0              ldi R16,5
 0088 10E0              ldi R17,0
 008A                   .dbline -2
 008A           L16:
 008A                   .dbline 0 ; func end
 008A BACF              xjmp _delay
 008C                   .dbend
 008C                   .dbfunc e sendbyte12864 _sendbyte12864 fV
 008C           ;              t -> R20,R21
 008C           ;           byte -> R10
                        .even
 008C           _sendbyte12864::
 008C 0E940000          xcall push_xgset300C
 0090 A02E              mov R10,R16
 0092                   .dbline -1
 0092                   .dbline 77
 0092           ; }
 0092           ; 
 0092           ; /*****************************************************************
 0092           ;                字节传送,一个字节一个传
 0092           ; ******************************************************************/
 0092           ; void sendbyte12864(uchar byte)
 0092           ; {
 0092                   .dbline 79
 0092           ; uint  t;
 0092           ;   for(t=8;t>0;t--)
 0092 48E0              ldi R20,8
 0094 50E0              ldi R21,0
 0096 19C0              xjmp L21
 0098           L18:
 0098                   .dbline 80
 0098           ;    {
 0098                   .dbline 81
 0098           ;       CLR_SCLK;
 0098 DE98              cbi 0x1b,6
 009A                   .dbline 82
 009A           ;         if(byte & BIT(t-1)) SET_SID;
 009A 9A01              movw R18,R20
 009C 2150              subi R18,1
 009E 3040              sbci R19,0
 00A0 01E0              ldi R16,1
 00A2 10E0              ldi R17,0
 00A4 0E940000          xcall lsl16
 00A8 2A2C              mov R2,R10
 00AA 3324              clr R3
 00AC 2022              and R2,R16
 00AE 3122              and R3,R17
 00B0 2220              tst R2
 00B2 11F4              brne X3
 00B4 3320              tst R3
 00B6 11F0              breq L22
 00B8           X3:
 00B8                   .dbline 82
 00B8 DD9A              sbi 0x1b,5
 00BA 01C0              xjmp L23
 00BC           L22:
 00BC                   .dbline 83
 00BC           ;         else  CLR_SID;
 00BC DD98              cbi 0x1b,5
 00BE           L23:
 00BE                   .dbline 84
 00BE           ;       delay(2);
 00BE 02E0              ldi R16,2
 00C0 10E0              ldi R17,0
 00C2 9EDF              xcall _delay
 00C4                   .dbline 85
 00C4           ;       SET_SCLK;
 00C4 DE9A              sbi 0x1b,6
 00C6                   .dbline 86
 00C6           ;    }
 00C6           L19:
 00C6                   .dbline 79
 00C6 4150              subi R20,1
 00C8 5040              sbci R21,0
 00CA           L21:
 00CA                   .dbline 79
 00CA 4030              cpi R20,0
 00CC 4507              cpc R20,R21
 00CE 21F7              brne L18
 00D0           X4:
 00D0                   .dbline -2
 00D0           L17:
 00D0                   .dbline 0 ; func end
 00D0 0C940000          xjmp pop_xgset300C
 00D4                   .dbsym r t 20 i
 00D4                   .dbsym r byte 10 c
 00D4                   .dbend
 00D4                   .dbfunc e write_com12864 _write_com12864 fV
 00D4           ;            com -> R20
                        .even
 00D4           _write_com12864::
 00D4 4A93              st -y,R20
 00D6 402F              mov R20,R16
 00D8                   .dbline -1
 00D8                   .dbline 94
 00D8           ; 
 00D8           ; }
 00D8           ; /****************************************************************
 00D8           ;                   写指令函数                   
 00D8           ; *****************************************************************/    
 00D8           ; 
 00D8           ; void write_com12864(uchar com)
 00D8           ; {  
 00D8                   .dbline 96
 00D8           ;    //SET_CS;
 00D8           ;    sendbyte12864(0xf8);  //定义写指令写命令
 00D8 08EF              ldi R16,248
 00DA D8DF              xcall _sendbyte12864
 00DC                   .dbline 97
 00DC           ;    delay(2);
 00DC 02E0              ldi R16,2
 00DE 10E0              ldi R17,0
 00E0 8FDF              xcall _delay
 00E2                   .dbline 98
 00E2           ;    sendbyte12864(com&0xf0);//先写高四位
 00E2 042F              mov R16,R20
 00E4 007F              andi R16,240
 00E6 D2DF              xcall _sendbyte12864
 00E8                   .dbline 99
 00E8           ;    delay(2);
 00E8 02E0              ldi R16,2
 00EA 10E0              ldi R17,0

⌨️ 快捷键说明

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