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

📄 led.lis

📁 AVR开发板实验源代码LED流水灯实验源代码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module LED.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:/icc/include/delay.h
 0000                   .dbfunc e delay_nus _delay_nus fV
 0000           ;           time -> R16,R17
                        .even
 0000           _delay_nus::
 0000                   .dbline -1
 0000                   .dbline 33
 0000           ; 
 0000           ; #include <iom16v.h>                           //包含单片机型号头文件
 0000           ; #include <macros.h>                           //包含"位"操作头文件
 0000           ; #include <delay.h>                            //包含延时头文件
 0000           ; #include <AVR_XQV12.h>                        //包含通用函数及宏定义头文件
 0000           ; /*******************************************************/
 0000           ; /******   函数名称: Scan_Int_Key()                ******/
 0000           ; /******   功    能: 扫描INT0、INT1按键,使键值改变******/
 0000           ; /******   参    数: 无                            ******/
 0000           ; /******   返回值  : 无                            ******/
 0000           ; /*******************************************************/
 0000           ; void Scan_Int_Key(void)
 0000           ; {
 0000           ;       if(KEY0==0)                                                             //判断是否有键按下
 0000           ;       {                                                                               
 0000           ;               delay_nms(10);                                          //延时去抖
 0000           ;               if(KEY0==0)                                                     //再次判断是否有键按下
 0000           ;               {                                                                       
 0000           ;                       while(KEY0==0);                                 //等待按键释放
 0000           ;                       Key_Number++;                                   //键值加1
 0000           ;                       if(Key_Number>2)                                
 0000           ;                       Key_Number=2;                                   
 0000           ;               }                                                                       
 0000           ;       }                                                                               
 0000           ;       if(KEY1==0)                                                             //判断是否有键按下
 0000           ;       {                                                                               
 0000           ;               delay_nms(10);                                          //延时去抖
 0000           ;               if(KEY1==0)                                                     //再次判断是否有键按下
 0000           ;               {                                                                       
 0000           ;                       while(KEY1==0);                                 //等待按键释放
 0000           ;                       Key_Number--;                                   //键值减1
 0000           ;                       if(Key_Number>2)                                
 0000           ;                       Key_Number=0;                                   
 0000 09C0              xjmp L3
 0002           L2:
 0002                   .dbline 35
 0002                   .dbline 36
 0002 0000              nop
 0004                   .dbline 36
 0004 0000              nop
 0006                   .dbline 36
 0006 0000              nop
 0008                   .dbline 36
 0008 0000              nop
 000A                   .dbline 36
 000A 0000              nop
 000C                   .dbline 36
 000C 0000              nop
 000E                   .dbline 36
 000E 0000              nop
 0010                   .dbline 37
 0010 0150              subi R16,1
 0012 1040              sbci R17,0
 0014                   .dbline 38
 0014           L3:
 0014                   .dbline 34
 0014           ;               }                                                                       
 0014 0030              cpi R16,0
 0016 0107              cpc R16,R17
 0018 A1F7              brne L2
 001A           X0:
 001A                   .dbline -2
 001A           L1:
 001A                   .dbline 0 ; func end
 001A 0895              ret
 001C                   .dbsym r time 16 i
 001C                   .dbend
 001C                   .dbfunc e delay_nms _delay_nms fV
 001C           ;              i -> R20,R21
 001C           ;           time -> R16,R17
                        .even
 001C           _delay_nms::
 001C 0E940000          xcall push_gset1
 0020                   .dbline -1
 0020                   .dbline 41
 0020           ;       }                                                                               
 0020           ; }
 0020           ; 
 0020           ; /*******************************************************/
 0020           ; /******   函数名称: main()                        ******/
 0020           ; /******   功    能: 流水灯、按键INT0、INT1改变显示方式**/
 0020           ; /******   参    数: 无                            ******/
 0020 0BC0              xjmp L7
 0022           L6:
 0022                   .dbline 44
 0022           ; /******   返回值  : 无                            ******/
 0022           ; /*******************************************************/
 0022           ; void main(void)
 0022                   .dbline 45
 0022 4427              clr R20
 0024 5527              clr R21
 0026 02C0              xjmp L12
 0028           L9:
 0028                   .dbline 45
 0028           L10:
 0028                   .dbline 45
 0028 4F5F              subi R20,255  ; offset = 1
 002A 5F4F              sbci R21,255
 002C           L12:
 002C                   .dbline 45
 002C 4C32              cpi R20,44
 002E E6E0              ldi R30,6
 0030 5E07              cpc R21,R30
 0032 D0F3              brlo L9
 0034                   .dbline 46
 0034 0150              subi R16,1
 0036 1040              sbci R17,0
 0038                   .dbline 47
 0038           L7:
 0038                   .dbline 43
 0038 0030              cpi R16,0
 003A 0107              cpc R16,R17
 003C 91F7              brne L6
 003E           X1:
 003E                   .dbline -2
 003E           L5:
 003E 0E940000          xcall pop_gset1
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym r i 20 i
 0044                   .dbsym r time 16 i
 0044                   .dbend
                        .area code(ram, con, rel)
 0000                   .dbfile D:/icc/include/delay.h
                        .area lit(rom, con, rel)
 0000           _SMG_Conver::
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
 000A 777C              .byte 'w,124
 000C 395E              .byte 57,94
 000E 7971              .byte 'y,'q
 0010 0040              .byte 0,64
 0012                   .dbfile D:/icc/include/AVR_XQV12.h
 0012                   .dbsym e SMG_Conver _SMG_Conver A[18:18]kc
                        .area data(ram, con, rel)
 0000                   .dbfile D:/icc/include/AVR_XQV12.h
                        .area text(rom, con, rel)
 0044                   .dbfile D:/icc/include/AVR_XQV12.h
 0044                   .dbfunc e Scan_Key _Scan_Key fc
 0044           ;              i -> R20
                        .even
 0044           _Scan_Key::
 0044 0E940000          xcall push_gset1
 0048                   .dbline -1
 0048                   .dbline 126
 0048           ; {
 0048           ;       unsigned char i;
 0048           ;       CPU_Init();                                     //初始化CPU
 0048           ;       En_Led();                                       //使能LED
 0048           ;       while(1)
 0048           ;       {
 0048           ;               switch(Key_Number)                      //选择LED扫描方式
 0048           ;               {
 0048           ;                       case 0:
 0048           ;                                  while(1)
 0048           ;                                  {
 0048           ;                                               for(i=0;i<8;i++)
 0048           ;                                               {
 0048           ;                                                       LED=0xff;                        //LED全部熄灭
 0048           ;                                                       LED&=~BIT(i);            //点亮相应位LED
 0048           ;                                                       delay_nms(100);          //延时大约100毫秒
 0048           ;                                                       Scan_Int_Key();                  //查询是否有按键按下
 0048           ;                                                       if(Key_Number!=0)                        
 0048           ;                                                       break;                           //如果键值改变退出
 0048           ;                                               }
 0048           ;                                               if(Key_Number!=0)
 0048           ;                                               break;
 0048           ;                                               for(i=9;i>1;i--)
 0048           ;                                               {
 0048           ;                                                       LED=0xff;                        //LED全部熄灭
 0048           ;                                                       LED&=~BIT(i-2);          //点亮相应位LED
 0048           ;                                                       delay_nms(100);          //延时大约100毫秒
 0048           ;                                                       Scan_Int_Key();                  //查询是否有按键按下
 0048           ;                                                       if(Key_Number!=0)                        
 0048           ;                                                       break;                           //如果键值改变退出
 0048           ;                                               }
 0048           ;                                               if(Key_Number!=0)
 0048           ;                                               break;
 0048           ;                                       }
 0048           ;                                       break;
 0048           ;                       case 1:
 0048           ;                                  while(1)
 0048           ;                                  {
 0048           ;                                               for(i=0;i<8;i++)
 0048           ;                                               {
 0048           ;                                                       LED=0xff;                        //LED全部熄灭
 0048           ;                                                       LED&=~BIT(i);            //点亮相应位LED
 0048           ;                                                       delay_nms(50);           //延时大约50毫秒
 0048           ;                                                       Scan_Int_Key();                  //查询是否有按键按下
 0048           ;                                                       if(Key_Number!=1)                        
 0048           ;                                                       break;                           //如果键值改变退出
 0048           ;                                               }
 0048           ;                                               if(Key_Number!=1)
 0048           ;                                               break;
 0048           ;                                       }
 0048           ;                                       break;
 0048           ;                       case 2:
 0048           ;                                  while(1)
 0048           ;                                  {
 0048           ;                                               for(i=9;i>1;i--)
 0048           ;                                               {
 0048           ;                                                       LED=0xff;                        //LED全部熄灭
 0048           ;                                                       LED&=~BIT(i-2);          //点亮相应位LED
 0048           ;                                                       delay_nms(50);           //延时大约50毫秒
 0048           ;                                                       Scan_Int_Key();                  //查询是否有按键按下
 0048           ;                                                       if(Key_Number!=2)                        
 0048           ;                                                       break;                           //如果键值改变退出
 0048           ;                                               }
 0048           ;                                               if(Key_Number!=2)
 0048           ;                                               break;
 0048           ;                                       }
 0048           ;                                       break;
 0048           ;               }
 0048           ;               
 0048           ;       }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048           ; }
 0048                   .dbline 128
 0048           ; }
 0048           ; }
 0048 2224              clr R2
 004A 25BA              out 0x15,R2
 004C                   .dbline 129
 004C           ; }
 004C 80EF              ldi R24,240
 004E 84BB              out 0x14,R24
 0050                   .dbline 130
 0050           ; }
 0050 8FE0              ldi R24,15
 0052 85BB              out 0x15,R24
 0054                   .dbline 131
 0054           ; }
 0054 01E0              ldi R16,1
 0056 10E0              ldi R17,0
 0058 D3DF              xcall _delay_nus
 005A                   .dbline 132
 005A           ; }
 005A 43B3              in R20,0x13
 005C 4F70              andi R20,15
 005E                   .dbline 133
 005E           ; }
 005E 4F30              cpi R20,15
 0060 B1F0              breq L14
 0062                   .dbline 134
 0062           ; }
 0062                   .dbline 135
 0062           ; }
 0062 2224              clr R2
 0064 25BA              out 0x15,R2
 0066                   .dbline 136
 0066           ; }
 0066 8FE0              ldi R24,15
 0068 84BB              out 0x14,R24
 006A                   .dbline 137
 006A           ; }
 006A 80EF              ldi R24,240
 006C 85BB              out 0x15,R24
 006E                   .dbline 138
 006E           ; }
 006E 0AE0              ldi R16,10
 0070 10E0              ldi R17,0
 0072 C6DF              xcall _delay_nus
 0074                   .dbline 139
 0074           ; }
 0074 83B3              in R24,0x13
 0076 807F              andi R24,240
 0078 803F              cpi R24,240
 007A 49F0              breq L16
 007C                   .dbline 140
 007C           ; }
 007C                   .dbline 141
 007C           ; }
 007C 83B3              in R24,0x13
 007E 807F              andi R24,240
 0080 480F              add R20,R24
 0082           L18:
 0082                   .dbline 142
 0082           L19:
 0082                   .dbline 142
 0082           ; }
 0082 83B3              in R24,0x13
 0084 807F              andi R24,240
 0086 803F              cpi R24,240
 0088 E1F7              brne L18
 008A                   .dbline 143
 008A           ; }
 008A 042F              mov R16,R20
 008C 01C0              xjmp L13
 008E           L16:
 008E                   .dbline 145
 008E           ; }
 008E           ; }
 008E           L14:
 008E                   .dbline 146
 008E           ; }
 008E 0027              clr R16

⌨️ 快捷键说明

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