📄 disp.lis
字号:
.module disp.c
.area data(ram, con, rel)
0000 _disp_table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A 777C .byte 'w,124
.area data(ram, con, rel)
000C .blkb 2
.area idata
000C 395E .byte 57,94
.area data(ram, con, rel)
000E .blkb 2
.area idata
000E 7971 .byte 'y,'q
.area data(ram, con, rel)
0010 .dbfile E:\avrc\disp.c
0010 .dbsym e disp_table _disp_table A[16:16]c
.area text(rom, con, rel)
0000 .dbfile E:\avrc\disp.c
0000 .dbfunc e main _main fV
0000 ; i -> <dead>
0000 ; j -> R20,R21
.even
0000 _main::
0000 .dbline -1
0000 .dbline 16
0000 ; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
0000 ; #include <macros.h>
0000 ; #include <stdio.h>
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; void send_byte(uchar x);
0000 ; void disp_led(uchar buffer,uchar control);
0000 ; void delay_1ms(void);
0000 ; void delay_nms(unsigned int n);
0000 ; uchar disp_table[16] = {
0000 ; 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0000 ; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
0000 ; uint count;
0000 ; uchar dp;
0000 ; void main(void)
0000 ; {
0000 .dbline 19
0000 ; uint i;
0000 ; int j;
0000 ; disp_led(0,0);//显示0
0000 2227 clr R18
0002 0027 clr R16
0004 57D0 rcall _disp_led
0006 .dbline 20
0006 ; OSCCAL=0X9d; //系统时钟校准,不同的芯片和不同的频率,
0006 8DE9 ldi R24,157
0008 81BF out 0x31,R24
000A .dbline 21
000A ; DDRB=0x03; //定义B口的PB0、PB1为输出口
000A 83E0 ldi R24,3
000C 87BB out 0x17,R24
000E .dbline 22
000E ; DDRC=0x30; //定义C口的PC4和PC5为输出口
000E 80E3 ldi R24,48
0010 84BB out 0x14,R24
0012 .dbline 23
0012 ; WDR(); //看门狗计数清零
0012 A895 wdr
0014 .dbline 24
0014 ; WDTCR=0x0F; //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S
0014 8FE0 ldi R24,15
0016 81BD out 0x21,R24
0018 .dbline 25
0018 ; ADCSRA=0X00;
0018 2224 clr R2
001A 26B8 out 0x6,R2
001C .dbline 26
001C ; ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0); //采用内部2.56参考电压,ADC3输入
001C 83EC ldi R24,195
001E 87B9 out 0x7,R24
0020 .dbline 27
0020 ; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//ADC转换 64分频
0020 8EEC ldi R24,206
0022 86B9 out 0x6,R24
0024 .dbline 28
0024 ; SEI(); //开放中断
0024 7894 sei
0026 .dbline 30
0026 ; //delay_nms(5000); //延时5秒
0026 ; PORTB=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮
0026 82E0 ldi R24,2
0028 88BB out 0x18,R24
002A .dbline 31
002A ; delay_nms(500); //延时1秒
002A 04EF ldi R16,500
002C 11E0 ldi R17,1
002E D0D0 rcall _delay_nms
0030 20C0 rjmp L3
0032 L2:
0032 .dbline 33
0032 ; while(1)
0032 ; {
0032 .dbline 34
0032 ; PORTB=0B00000010;
0032 82E0 ldi R24,2
0034 88BB out 0x18,R24
0036 .dbline 35
0036 ; delay_nms(100); //延时0.1左右
0036 04E6 ldi R16,100
0038 10E0 ldi R17,0
003A CAD0 rcall _delay_nms
003C .dbline 36
003C ; j=((25600/1023)*(ADCH*256+ADCL))/1000;//数据计算
003C 24B0 in R2,0x4
003E 35B0 in R3,0x5
0040 332D mov R19,R3
0042 222D mov R18,R2
0044 09E1 ldi R16,25
0046 10E0 ldi R17,0
0048 00D0 rcall mpy16s
004A 28EE ldi R18,1000
004C 33E0 ldi R19,3
004E 00D0 rcall div16s
0050 402F mov R20,R16
0052 512F mov R21,R17
0054 .dbline 37
0054 ; count=j;
0054 50930200 sts _count+1,R21
0058 40930100 sts _count,R20
005C .dbline 38
005C ; if(j>24)
005C 88E1 ldi R24,24
005E 90E0 ldi R25,0
0060 8017 cp R24,R16
0062 9107 cpc R25,R17
0064 14F4 brge L5
0066 .dbline 39
0066 ; PORTB=0B00000011; //翻转PB0和PB1口 过压或过流显示
0066 83E0 ldi R24,3
0068 88BB out 0x18,R24
006A L5:
006A .dbline 40
006A 21E0 ldi R18,1
006C 0027 clr R16
006E 22D0 rcall _disp_led
0070 .dbline 41
0070 A895 wdr
0072 .dbline 42
0072 L3:
0072 .dbline 32
0072 DFCF rjmp L2
0074 X0:
0074 .dbline -2
0074 .dbline 43
0074 ; disp_led(0,1); //显示数据
0074 ; WDR(); //清看门狗
0074 ; }
0074 ; }
0074 L1:
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbsym l i 1 i
0076 .dbsym r j 20 I
0076 .dbend
0076 .dbfunc e send_byte _send_byte fV
0076 ; i -> R20
0076 ; x -> R22
.even
0076 _send_byte::
0076 00D0 rcall push_gset2
0078 602F mov R22,R16
007A .dbline -1
007A .dbline 45
007A ; void send_byte(uchar x)
007A ; {
007A .dbline 47
007A ; uchar i;
007A ; for(i=0;i<8;i++)
007A 4427 clr R20
007C 17C0 rjmp L11
007E L8:
007E .dbline 48
007E ; {
007E .dbline 49
007E ; PORTC=0<<5; // PC5为底 为164提供时钟信号
007E 2224 clr R2
0080 25BA out 0x15,R2
0082 .dbline 50
0082 ; if((x&(1<<(7-i)))||((dp==1)&&(i==0))) //判断每位数据的电平,及小数点判断
0082 17E0 ldi R17,7
0084 141B sub R17,R20
0086 01E0 ldi R16,1
0088 00D0 rcall lsl8
008A 262E mov R2,R22
008C 2022 and R2,R16
008E 31F4 brne L14
0090 80910000 lds R24,_dp
0094 8130 cpi R24,1
0096 29F4 brne L12
0098 4423 tst R20
009A 19F4 brne L12
009C L14:
009C .dbline 51
009C ; PORTC=1<<4; //若为高着PC4输出高电平
009C 80E1 ldi R24,16
009E 85BB out 0x15,R24
00A0 02C0 rjmp L13
00A2 L12:
00A2 .dbline 53
00A2 ; else
00A2 ; PORTC=0<<4; //若为低着输出低电平
00A2 2224 clr R2
00A4 25BA out 0x15,R2
00A6 L13:
00A6 .dbline 54
00A6 80E2 ldi R24,32
00A8 85BB out 0x15,R24
00AA .dbline 55
00AA L9:
00AA .dbline 47
00AA 4395 inc R20
00AC L11:
00AC .dbline 47
00AC 4830 cpi R20,8
00AE 38F3 brlo L8
00B0 .dbline -2
00B0 .dbline 56
00B0 ; PORTC=1<<5; //PC5 提供始终信号
00B0 ; }
00B0 ; }
00B0 L7:
00B0 00D0 rcall pop_gset2
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym r i 20 c
00B4 .dbsym r x 22 c
00B4 .dbend
00B4 .dbfunc e disp_led _disp_led fV
00B4 ; temp -> y+0
00B4 ; tempcount -> R20,R21
00B4 ; i -> R22
00B4 ; control -> R20
00B4 ; buffer -> R10
.even
00B4 _disp_led::
00B4 00D0 rcall push_gset3
00B6 422F mov R20,R18
00B8 A02E mov R10,R16
00BA 2697 sbiw R28,6
00BC .dbline -1
00BC .dbline 59
00BC ; //显示程序 CONTROL为控制显示 BUFFER为显示数据
00BC ; void disp_led(uchar buffer,uchar control)
00BC ; {
00BC .dbline 62
00BC ; uchar i,temp[6];
00BC ; uint tempcount;
00BC ; dp=0;
00BC 2224 clr R2
00BE 20920000 sts _dp,R2
00C2 .dbline 63
00C2 ; switch(control)
00C2 5527 clr R21
00C4 4030 cpi R20,0
00C6 4507 cpc R20,R21
00C8 29F0 breq L19
00CA X1:
00CA 4130 cpi R20,1
00CC E0E0 ldi R30,0
00CE 5E07 cpc R21,R30
00D0 A1F0 breq L24
00D2 6EC0 rjmp L16
00D4 X2:
00D4 .dbline 64
00D4 ; {
00D4 L19:
00D4 .dbline 66
00D4 ; case 0: //CONTROL为零全部数码管显示buffer
00D4 ; {
00D4 .dbline 67
00D4 ; for(i=0;i<11;i++)
00D4 6627 clr R22
00D6 0EC0 rjmp L23
00D8 L20:
00D8 .dbline 68
00D8 2AE0 ldi R18,10
00DA 30E0 ldi R19,0
00DC 0A2D mov R16,R10
00DE 1127 clr R17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -