?? display.s
字號:
.module display.c
.area text(rom, con, rel)
.dbfile D:\報警系統設計資料\報警系統軟件\測量模塊基于CAN的系統網程序\CAN網可配置型報警燈板程序\display.c
.area data(ram, con, rel)
.dbfile D:\報警系統設計資料\報警系統軟件\測量模塊基于CAN的系統網程序\CAN網可配置型報警燈板程序\display.c
_key::
.blkb 2
.area idata
.byte 165,165
.area data(ram, con, rel)
.dbfile D:\報警系統設計資料\報警系統軟件\測量模塊基于CAN的系統網程序\CAN網可配置型報警燈板程序\display.c
.blkb 2
.area idata
.byte 165,165
.area data(ram, con, rel)
.dbfile D:\報警系統設計資料\報警系統軟件\測量模塊基于CAN的系統網程序\CAN網可配置型報警燈板程序\display.c
.blkb 2
.area idata
.byte 165,165
.area data(ram, con, rel)
.dbfile D:\報警系統設計資料\報警系統軟件\測量模塊基于CAN的系統網程序\CAN網可配置型報警燈板程序\display.c
.blkb 2
.area idata
.byte 165,165
.area data(ram, con, rel)
.dbfile D:\報警系統設計資料\報警系統軟件\測量模塊基于CAN的系統網程序\CAN網可配置型報警燈板程序\display.c
.dbsym e key _key A[8:8]c
.area text(rom, con, rel)
.dbfile D:\報警系統設計資料\報警系統軟件\測量模塊基于CAN的系統網程序\CAN網可配置型報警燈板程序\display.c
.dbfunc e key_process _key_process fV
; i -> R20
.even
_key_process::
xcall push_gset1
sbiw R28,12
.dbline -1
.dbline 13
; #include "main.h"
;
; extern long id4;
; extern unsigned int addr_led7[6];
; extern unsigned char led7_data[18];
; unsigned char key[8]={off,off,off,off,off,off,off,off};
; extern unsigned mode_flag;
; VCI_CAN_OBJ sendmsg;
; extern SHD_LED pannel_led[48];
; extern unsigned char channel,T1;
;
; void key_process(void) //鍵處理函數
; {
.dbline 15
; unsigned char i;
; WDR();
wdr
.dbline 16
; if(key[0]==on) //模式設置處理
lds R24,_key
cpi R24,90
brne L3
.dbline 17
; {
.dbline 18
; key[0]=off;
ldi R24,165
sts _key,R24
.dbline 19
; if(mode_flag==on)
lds R24,_mode_flag
lds R25,_mode_flag+1
cpi R24,90
ldi R30,0
cpc R25,R30
brne L5
.dbline 20
; {
.dbline 21
; mode_flag=off;
ldi R24,165
ldi R25,0
sts _mode_flag+1,R25
sts _mode_flag,R24
.dbline 22
; PORTF&=0xf7;
in R24,0x11
andi R24,247
out 0x11,R24
.dbline 23
; }
xjmp L6
L5:
.dbline 25
; else
; {
.dbline 26
; mode_flag = on;
ldi R24,90
ldi R25,0
sts _mode_flag+1,R25
sts _mode_flag,R24
.dbline 27
; PORTF|=0x08;
sbi 0x11,3
.dbline 28
; }
L6:
.dbline 29
; }
L3:
.dbline 31
;
; WDR();
wdr
.dbline 32
; if(key[1]==on) //消聲處理
lds R24,_key+1
cpi R24,90
breq X0
xjmp L7
X0:
.dbline 33
; {
.dbline 34
; key[1]=off;
ldi R24,165
sts _key+1,R24
.dbline 35
; buzzer_off();
xcall _buzzer_off
.dbline 36
; relay1_off();
xcall _relay1_off
.dbline 37
; sendmsg.ID=id4;
lds R4,_id4+2
lds R5,_id4+2+1
lds R2,_id4
lds R3,_id4+1
sts _sendmsg+1,R3
sts _sendmsg,R2
sts _sendmsg+2+1,R5
sts _sendmsg+2,R4
.dbline 38
; for(i=0;i<8;i++)
clr R20
xjmp L14
L11:
.dbline 39
ldi R24,<_sendmsg+4
ldi R25,>_sendmsg+4
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldi R24,90
std z+0,R24
L12:
.dbline 38
inc R20
L14:
.dbline 38
cpi R20,8
brlo L11
.dbline 40
; sendmsg.Data[i]=0x5a;
; can_tx (sendmsg);
ldi R24,<_sendmsg
ldi R25,>_sendmsg
movw R30,R28
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgnblk
movw R16,R28
xcall _can_tx
.dbline 42
;
; for(i=0;i<48;i++)
clr R20
xjmp L19
L16:
.dbline 43
; {
.dbline 44
; if(pannel_led[i].soundoff==noack)
ldi R24,20
mul R24,R20
movw R30,R0
ldi R24,<_pannel_led+17
ldi R25,>_pannel_led+17
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L20
.dbline 45
; pannel_led[i].soundoff=acked; //清除聲音標志
ldi R24,20
mul R24,R20
movw R30,R0
ldi R24,<_pannel_led+17
ldi R25,>_pannel_led+17
add R30,R24
adc R31,R25
ldi R24,2
std z+0,R24
L20:
.dbline 46
L17:
.dbline 42
inc R20
L19:
.dbline 42
cpi R20,48
brlo L16
.dbline 47
; }
; }
L7:
.dbline 49
;
; WDR();
wdr
.dbline 50
; if(key[2]==on) //消閃處理
lds R24,_key+2
cpi R24,90
breq X1
xjmp L24
X1:
.dbline 51
; {
.dbline 52
; key[2]=off;
ldi R24,165
sts _key+2,R24
.dbline 53
; sendmsg.ID=id4;
lds R4,_id4+2
lds R5,_id4+2+1
lds R2,_id4
lds R3,_id4+1
sts _sendmsg+1,R3
sts _sendmsg,R2
sts _sendmsg+2+1,R5
sts _sendmsg+2,R4
.dbline 54
; for(i=0;i<8;i++)
clr R20
xjmp L31
L28:
.dbline 55
ldi R24,<_sendmsg+4
ldi R25,>_sendmsg+4
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldi R24,165
std z+0,R24
L29:
.dbline 54
inc R20
L31:
.dbline 54
cpi R20,8
brlo L28
.dbline 56
; sendmsg.Data[i]=0xa5;
; can_tx (sendmsg);
ldi R24,<_sendmsg
ldi R25,>_sendmsg
movw R30,R28
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgnblk
movw R16,R28
xcall _can_tx
.dbline 57
; for(i=0;i<48;i++)
clr R20
xjmp L36
L33:
.dbline 58
; {
.dbline 59
; if(pannel_led[i].state==noack)
ldi R24,20
mul R24,R20
movw R30,R0
ldi R24,<_pannel_led+13
ldi R25,>_pannel_led+13
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L37
.dbline 60
; pannel_led[i].state=acked;
ldi R24,20
mul R24,R20
movw R30,R0
ldi R24,<_pannel_led+13
ldi R25,>_pannel_led+13
add R30,R24
adc R31,R25
ldi R24,2
std z+0,R24
L37:
.dbline 61
L34:
.dbline 57
inc R20
L36:
.dbline 57
cpi R20,48
brlo L33
.dbline 62
; }
; }
L24:
.dbline 64
;
; if(key[4]==on) //通道號加一
lds R24,_key+4
cpi R24,90
brne L41
.dbline 65
; {
.dbline 66
; key[4]=off;
ldi R24,165
sts _key+4,R24
.dbline 67
; if(mode_flag==on)
lds R24,_mode_flag
lds R25,_mode_flag+1
cpi R24,90
ldi R30,0
cpc R25,R30
brne L45
.dbline 68
; {
.dbline 69
; if(channel<47)
lds R24,_channel
cpi R24,47
brsh L47
.dbline 70
; channel++;
subi R24,255 ; addi 1
sts _channel,R24
xjmp L48
L47:
.dbline 72
; else
; channel =0;
clr R2
sts _channel,R2
L48:
.dbline 73
; }
L45:
.dbline 74
; }
L41:
.dbline 75
; WDR();
wdr
.dbline 76
; if(key[5]==on) //通道號減一
lds R24,_key+5
cpi R24,90
brne L49
.dbline 77
; {
.dbline 78
; key[5]=off;
ldi R24,165
sts _key+5,R24
.dbline 79
; if(mode_flag==on)
lds R24,_mode_flag
lds R25,_mode_flag+1
cpi R24,90
ldi R30,0
cpc R25,R30
brne L53
.dbline 80
; {
.dbline 81
; if(channel>0)
ldi R24,0
lds R2,_channel
cp R24,R2
brsh L55
.dbline 82
; channel--;
mov R24,R2
subi R24,1
sts _channel,R24
xjmp L56
L55:
.dbline 84
; else
; channel=47;
ldi R24,47
sts _channel,R24
L56:
.dbline 85
; }
L53:
.dbline 86
; }
L49:
.dbline 88
;
; if(key[6]==on) //通道號減16
lds R24,_key+6
cpi R24,90
brne L57
.dbline 89
; {
.dbline 90
; key[6]=off;
ldi R24,165
sts _key+6,R24
.dbline 91
; if(mode_flag==on)
lds R24,_mode_flag
lds R25,_mode_flag+1
cpi R24,90
ldi R30,0
cpc R25,R30
brne L61
.dbline 92
; {
.dbline 93
; if(channel>15)
ldi R24,15
lds R2,_channel
cp R24,R2
brsh L63
.dbline 94
; channel=channel-16;
mov R24,R2
subi R24,16
sts _channel,R24
L63:
.dbline 95
; }
L61:
.dbline 96
; }
L57:
.dbline 97
; WDR();
wdr
.dbline 98
; if(key[7]==on) //通道號加16
lds R24,_key+7
cpi R24,90
brne L65
.dbline 99
; {
.dbline 100
; key[7]=off;
ldi R24,165
sts _key+7,R24
.dbline 101
; if(mode_flag==on)
lds R24,_mode_flag
lds R25,_mode_flag+1
cpi R24,90
ldi R30,0
cpc R25,R30
brne L69
.dbline 102
; {
.dbline 103
; if(channel<32)
lds R24,_channel
cpi R24,32
brsh L71
.dbline 104
; channel=channel+16;
subi R24,240 ; addi 16
sts _channel,R24
L71:
.dbline 105
; }
L69:
.dbline 106
L65:
.dbline -2
L2:
adiw R28,12
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e led7_display _led7_display fV
; p -> R20,R21
; tt -> y+4
; point -> y+2
; ds -> R18
; i -> R16
.even
_led7_display::
xcall push_gset1
.dbline -1
.dbline 111
; }
;
; }
;
; void led7_display(unsigned char i,unsigned char ds,unsigned char point,unsigned char tt) //七段碼顯示
; {
.dbline 112
; unsigned char *p= (unsigned char *) (addr_led7[ds]);
ldi R24,2
mul R24,R18
movw R30,R0
ldi R24,<_addr_led7
ldi R25,>_addr_led7
add R30,R24
adc R31,R25
ldd R20,z+0
ldd R21,z+1
.dbline 113
; WDR();
wdr
.dbline 114
; if(tt)
ldd R0,y+4
tst R0
breq L74
.dbline 115
; {
.dbline 116
; if(point)
ldd R0,y+2
tst R0
breq L76
.dbline 117
; *p = (led7_data[i]&0x7f);
ldi R24,<_led7_data
ldi R25,>_led7_data
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
andi R24,127
movw R30,R20
std z+0,R24
xjmp L75
L76:
.dbline 119
; else
; *p = led7_data[i];
ldi R24,<_led7_data
ldi R25,>_led7_data
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
movw R30,R20
std z+0,R2
.dbline 120
; }
xjmp L75
L74:
.dbline 122
lds R2,_led7_data+12
movw R30,R20
std z+0,R2
L75:
.dbline -2
L73:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r p 20 pc
.dbsym l tt 4 c
.dbsym l point 2 c
.dbsym r ds 18 c
.dbsym r i 16 c
.dbend
.dbfunc e led_display _led_display fV
; dd -> R22
; d -> R10
; j -> R20
; i -> R12
.even
_led_display::
xcall push_gset4
sbiw R28,3
.dbline -1
.dbline 127
; else
; *p= led7_data[12];
; }
;
;
; void led_display(void)
; {
.dbline 130
; unsigned char i,j,d,dd;
;
; WDR();
wdr
.dbline 131
; PORTD&=0x7f;
in R24,0xb
andi R24,127
out 0xb,R24
.dbline 132
; asm("nop");
nop
.dbline 133
; asm("nop");
nop
.dbline 134
; for(j=0;j<6;j++)
clr R20
xjmp L83
L80:
.dbline 135
; {
.dbline 136
; d=0;
clr R10
.dbline 137
; dd=0;
clr R22
.dbline 138
; for(i=0;i<8;i++)
clr R12
xjmp L87
L84:
.dbline 139
; {WDR();
.dbline 139
wdr
.dbline 140
; if(pannel_led[j*8+i].state==noack) //報警顯示
ldi R24,8
mul R24,R20
mov R17,R0
add R17,R12
ldi R16,20
muls R16,R17
movw R30,R0
ldi R24,<_pannel_led+13
ldi R25,>_pannel_led+13
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L88
.dbline 141
; {
.dbline 142
; if(pannel_led[j*8+i].cut_off==off) //無閉鎖則輸出
ldi R24,8
mul R24,R20
mov R17,R0
add R17,R12
muls R16,R17
movw R30,R0
ldi R24,<_pannel_led+16
ldi R25,>_pannel_led+16
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,165
brne L91
.dbline 143
; {
.dbline 144
; d|=(1<<i);
ldi R16,1
mov R17,R12
xcall lsl8
or R10,R16
.dbline 145
; dd&= ~(1<<i);
ldi R16,1
mov R17,R12
xcall lsl8
mov R2,R16
com R2
and R22,R2
.dbline 146
; }
xjmp L89
L91:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -