📄 六位数码管显示.lis
字号:
.module _六位数码管显示.c
.area text(rom, con, rel)
0000 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_六位数码管显示\六位数码管显示.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 9
0000 ; //ICC-AVR application builder : 2009-3-11 12:19:32
0000 ; // Target : M8
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 10
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 11
0004 ; DDRB = 0x00;
0004 27BA out 0x17,R2
0006 .dbline 12
0006 ; PORTC = 0x00; //m103 output only
0006 25BA out 0x15,R2
0008 .dbline 13
0008 ; DDRC = 0x00;
0008 24BA out 0x14,R2
000A .dbline 14
000A ; PORTD = 0x00;
000A 22BA out 0x12,R2
000C .dbline 15
000C ; DDRD = 0x00;
000C 21BA out 0x11,R2
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e init_devices _init_devices fV
.even
0010 _init_devices::
0010 .dbline -1
0010 .dbline 20
0010 ; }
0010 ;
0010 ; //call this routine to initialize all peripherals
0010 ; void init_devices(void)
0010 ; {
0010 .dbline 22
0010 ; //stop errant interrupts until set up
0010 ; CLI(); //disable all interrupts
0010 F894 cli
0012 .dbline 23
0012 ; port_init();
0012 F6DF rcall _port_init
0014 .dbline 25
0014 ;
0014 ; MCUCR = 0x00;
0014 2224 clr R2
0016 25BE out 0x35,R2
0018 .dbline 26
0018 ; GICR = 0x00;
0018 2BBE out 0x3b,R2
001A .dbline 27
001A ; TIMSK = 0x00; //timer interrupt sources
001A 29BE out 0x39,R2
001C .dbline 28
001C ; SEI(); //re-enable interrupts
001C 7894 sei
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e delay_us _delay_us fV
0020 ; time -> R16,R17
.even
0020 _delay_us::
0020 .dbline -1
0020 .dbline 40
0020 ; //all peripherals are now initialized
0020 ; }
0020 ;
0020 ; /************************************
0020 ; 用 途:微秒级延时程序
0020 ; Taget :mega8
0020 ; crystal :8M
0020 ; 介 绍:在8M的晶振上进行us级的延时
0020 ; 入口参数:
0020 ; *************************************/
0020 ; void delay_us(int time)
0020 ; {
0020 L4:
0020 .dbline 42
0020 ; do
0020 ; {
0020 .dbline 43
0020 ; time--;
0020 0150 subi R16,1
0022 1040 sbci R17,0
0024 .dbline 44
0024 ; }
0024 L5:
0024 .dbline 45
0024 ; while (time > 1);
0024 81E0 ldi R24,1
0026 90E0 ldi R25,0
0028 8017 cp R24,R16
002A 9107 cpc R25,R17
002C CCF3 brlt L4
002E X0:
002E .dbline -2
002E L3:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r time 16 I
0030 .dbend
.area lit(rom, con, rel)
0000 _num::
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 .dbsym e num _num A[16:16]kc
.area text(rom, con, rel)
0030 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_六位数码管显示\六位数码管显示.c
0030 .dbfunc e show_6_digit _show_6_digit fV
0030 ; j -> R20
0030 ; i -> R10
0030 ; p -> R22,R23
.even
0030 _show_6_digit::
0030 00D0 rcall push_xgsetF00C
0032 B801 movw R22,R16
0034 .dbline -1
0034 .dbline 74
0034 ; }
0034 ;
0034 ; /************************************
0034 ; 用 途:六位数码管的显示程序
0034 ; Taget :mega8
0034 ; crystal :8M
0034 ; 介 绍:数码管共阳
0034 ; a-PB0
0034 ; b-PB1
0034 ; ...
0034 ; h-PB6
0034 ; DP-PB7
0034 ; -------
0034 ; 1-PC5
0034 ; 2-PC4
0034 ; 3-PC3
0034 ; 4-PC2
0034 ; 5-PC1
0034 ; 6-PC0
0034 ; 使用show_6_digit(p)
0034 ; unsigned char数组
0034 ; B用作数据口
0034 ; C用作片选
0034 ; 入口参数:显示数组
0034 ; *************************************/
0034 ; const unsigned char num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0034 ; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
0034 ; void show_6_digit(unsigned char *p)
0034 ; {
0034 .dbline 76
0034 ; unsigned char i,j;
0034 ; DDRB=0xff;
0034 8FEF ldi R24,255
0036 87BB out 0x17,R24
0038 .dbline 77
0038 ; DDRC=0xff;
0038 84BB out 0x14,R24
003A .dbline 78
003A ; for (j=0;j<200;j++)
003A 4427 clr R20
003C 1FC0 rjmp L11
003E L8:
003E .dbline 79
003E ; {
003E .dbline 80
003E ; for (i=0;i<6;i++)
003E AA24 clr R10
0040 19C0 rjmp L15
0042 L12:
0042 .dbline 81
0042 ; {
0042 .dbline 82
0042 ; PORTC=0;//先关显示
0042 2224 clr R2
0044 25BA out 0x15,R2
0046 .dbline 83
0046 ; PORTB=~num[*(p+5-i)];//送数据
0046 2A2C mov R2,R10
0048 3324 clr R3
004A FB01 movw R30,R22
004C 3596 adiw R30,5
004E E219 sub R30,R2
0050 F309 sbc R31,R3
0052 E081 ldd R30,z+0
0054 FF27 clr R31
0056 80E0 ldi R24,<_num
0058 90E0 ldi R25,>_num
005A E80F add R30,R24
005C F91F adc R31,R25
005E 2490 lpm R2,Z
0060 2094 com R2
0062 28BA out 0x18,R2
0064 .dbline 84
0064 ; PORTC=(0x1<<i);//开显示
0064 01E0 ldi R16,1
0066 1A2D mov R17,R10
0068 00D0 rcall lsl8
006A 05BB out 0x15,R16
006C .dbline 85
006C ; delay_us(200);//小延时
006C 08EC ldi R16,200
006E 10E0 ldi R17,0
0070 D7DF rcall _delay_us
0072 .dbline 86
0072 ; }
0072 L13:
0072 .dbline 80
0072 A394 inc R10
0074 L15:
0074 .dbline 80
0074 8A2D mov R24,R10
0076 8630 cpi R24,6
0078 20F3 brlo L12
007A X1:
007A .dbline 87
007A ; }
007A L9:
007A .dbline 78
007A 4395 inc R20
007C L11:
007C .dbline 78
007C 483C cpi R20,200
007E F8F2 brlo L8
0080 X2:
0080 .dbline -2
0080 L7:
0080 .dbline 0 ; func end
0080 00C0 rjmp pop_xgsetF00C
0082 .dbsym r j 20 c
0082 .dbsym r i 10 c
0082 .dbsym r p 22 pc
0082 .dbend
.area lit(rom, con, rel)
0010 L17:
0010 0102 .byte 1,2
0012 0304 .byte 3,4
0014 0506 .byte 5,6
.area text(rom, con, rel)
0082 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_六位数码管显示\六位数码管显示.c
0082 .dbfunc e main _main fV
0082 ; p -> y+0
.even
0082 _main::
0082 2697 sbiw R28,6
0084 .dbline -1
0084 .dbline 91
0084 ; }
0084 ;
0084 ; void main()
0084 ; {
0084 .dbline 92
0084 ; unsigned char p[6]={1,2,3,4,5,6};
0084 80E0 ldi R24,<L17
0086 90E0 ldi R25,>L17
0088 FE01 movw R30,R28
008A 06E0 ldi R16,6
008C 10E0 ldi R17,0
008E FA93 st -y,R31
0090 EA93 st -y,R30
0092 9A93 st -y,R25
0094 8A93 st -y,R24
0096 00D0 rcall asgncblk
0098 .dbline 93
0098 ; port_init();
0098 B3DF rcall _port_init
009A .dbline 94
009A ; init_devices();
009A BADF rcall _init_devices
009C 02C0 rjmp L19
009E L18:
009E .dbline 97
009E ;
009E ; while(1)
009E ; {
009E .dbline 98
009E ; show_6_digit(p);
009E 8E01 movw R16,R28
00A0 C7DF rcall _show_6_digit
00A2 .dbline 99
00A2 ; }
00A2 L19:
00A2 .dbline 96
00A2 FDCF rjmp L18
00A4 X3:
00A4 .dbline -2
00A4 L16:
00A4 .dbline 0 ; func end
00A4 2696 adiw R28,6
00A6 0895 ret
00A8 .dbsym l p 0 A[6:6]c
00A8 .dbend
00A8 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -