📄 toucher.s
字号:
.module toucher.c
.area data(ram, con, rel)
_num_open::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile F:\AVR\zhulast\toucher.c
.dbsym e num_open _num_open c
_ccc::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile F:\AVR\zhulast\toucher.c
.dbsym e ccc _ccc i
_pass4::
.blkb 2
.area idata
.byte 4,1
.area data(ram, con, rel)
.dbfile F:\AVR\zhulast\toucher.c
.blkb 2
.area idata
.byte 8,0
.area data(ram, con, rel)
.dbfile F:\AVR\zhulast\toucher.c
.blkb 2
.area idata
.byte 6,9
.area data(ram, con, rel)
.dbfile F:\AVR\zhulast\toucher.c
.dbsym e pass4 _pass4 A[6:6]c
.area text(rom, con, rel)
.dbfile F:\AVR\zhulast\toucher.c
.dbfunc e zhuanhuan1 _zhuanhuan1 fV
.even
_zhuanhuan1::
.dbline -1
.dbline 210
; #include "allhead.h"
;
; /****************************变量声明********************************/
; extern uchar realtimebuff[7];
; extern uchar time_set[7];
; extern uchar tx_buff[12]; //存放要发向转换器的数
; //TWI 相关全局变量
; extern uchar i2c_rd_buff[32]; //i2c读出的数最初存放的地方
; extern uchar i2c_wt_buff[35]; //写
; extern uchar fhz;
;
; extern uchar canuse[4]; //转换器的投用情况 按位
; extern uchar detuse[33][4]; //所有485节点的投用情况,0,1按位起作用
; extern uchar det_link[33]; //探测器或联动模块选择字节段,按位起作用
; extern uchar shoubao[9];
; extern uchar firstuse1; //判断电源故障是不是第一次进入用
; extern uchar firstuse2;
; extern uchar firstuse3;
; extern uchar firstuse4; //亏电
; extern uchar hibao[32][4]; //高报
; extern uchar lobao[32][4]; //低报
; extern uchar detector[32][4]; //传感器
; extern uchar communicate[32][4]; //通讯
; extern struct
; {
; uchar bei; //备电
; uchar shi; //市电
; uchar cong; //从电
; }error;
; extern struct
; {
; uchar di[32][4]; //低报
; uchar tan[32][4]; //探测器
; uchar tong[32][4]; //通讯
; uchar gao[32][4]; //高报
; }rxerror;
;
; //GAL门相关全局变量
; extern uchar gal1data ;
; extern uchar gal2data ; //继电器控制信号1,联动模块故障1,联动输出都为1
; extern uchar gal3data ; //指示灯为共阳极的
; extern uchar gal4data ;
; extern uchar gal5data ;
;
; extern uint baojingaddr;
; extern uint guzhangaddr; //第一次取用的最新故障地址
; extern uint guzhangaddr2; //已存住的最新故障地址
; extern uint baojingaddr2;
; extern uint onaddr2 ; //开关机用
; extern uchar canuse[4];
; extern uchar detuse[33][4]; //所有485节点的投用情况,0,1按位起作用
; extern uchar zhongbuff[32][10]; // 一次接收的转换器的数
; extern uint cuo1;
; extern uint cuo2;
; extern uint cuo3; // 实时界面用 实时报警,故障数
; extern uint cuo4;
; extern uchar keyc;
; extern uchar gal1data;
; extern uchar gal2data;
; extern uchar gal3data;
; extern uchar gal4data;
; //extern uchar first_clarm[11]; //存放首次报警信息
; extern uchar first_alarm;
; extern uchar wunai;
; extern uchar wunai2; //投用
; extern uchar yure_flag;
; extern uchar errorflag;
; extern uchar can_cuo_flag[32];
;
; extern uint realaddr2; //存RAM错误信息用
;
; uchar flag_local; // 联动故障用
;
; //系统坐标
; uchar xh; //横坐标高字节
; uchar xl; //横坐标低字节
; uchar yh; //纵坐标高字节
; uchar yl; //纵坐标高字节
; //矩形的右下角坐标
; uchar x2h; //横坐标高字节
; uchar x2l; //横坐标低字节
; uchar y2h; //纵坐标高字节
; uchar y2l; //纵坐标高字节
; //common use
; uchar i;
; uchar j;
; //系统坐标转换后坐标
; uint x;
; uint y;
;
; uchar biaozhi; //USART1接收中断数据标志
; uchar key; //键值
; uchar RXC_BUFF[15]; //触摸屏发送的数据
; uchar jiemian; //界面标志
;
; //开关机记录显示用
; uint addre2; //外部E2的当前地址
; uchar addre2hi; //地址高址
; uchar addre2lo; //地址低址
;
; uchar num_open=1; //存放开关机记录中的编号
; uchar num_open2; //存放翻页后的第一个开关机记录编号
; uchar data[16]; //存放外部E2中的开关机记录中信息
; uchar baojing[16]; //存放外部E2中的报警记录信息
; uchar guzhang[8]; //存放外部E2中的故障记录信息
; uint chroma[16] ; //显示的浓度
; uchar c[3]; //通道关联探测器编号及高低报情况
;
; uint ccc=0; //等待CAN返回计数延时用
;
; /********************************************************************/
; uchar pass1[6]; //更改密码所存数组
; uchar pass2[6]; //确认密码所存数组
; uchar pass3[6]; //输入密码所存数组
; uchar pass[6]; //存放E2中读出的密码
; uchar pass4[6]={0x04,0x01,0x08,0x00,0x06,0x09}; //设定的超级密码
; uchar time[22]; //存放时间设定后的值
; uchar high[4]; //高报浓度
; uchar low[4]; //低报浓度
; uchar passage1[6]; //探测器高报关联的通道1
; uchar passage2[6]; //探测器低报关联的通道2
; //uchar passage3[4]; //通道3
; //uchar passage4[4]; //通道4
; uchar linkage1[2]; //存放控制外设界面中输入的转换器编号
; uchar linkage2[2]; //存放控制外设界面中输入的探测器编号
; uchar linkage[4]; //存放系统设置界面中输入的调零地址号
; uchar biaoding[4]; //存放系统设置界面中输入的标定值
; uchar old_can[2]; //原来转换器地址
; uchar new_can[2]; //修改后转换器地址
; uchar can[2]; //修改地址界面中can的地址
; uchar old_det[2]; //原来探测器地址
; uchar new_det[2]; //修改后探测器地址
; uchar index_link1; //指向linkage1数组中的数
; uchar index_link2; //指向linkage2数组中的数
; uchar index_link; //指向linkage数组中的数
; uchar bd; //指向biaoding数组中的数
; //uchar send_buff[8];
; //uchar recv_buff[8];
; uchar p1; //对应old_can数组
; uchar p2; //对应new_can数组
; uchar p3; //对应can数组
; uchar p4; //对应old_det数组
; uchar p5; //对应new_det数组
; uchar m1; //对应pass1数组
; uchar m2; //对应pass2数组
; uchar m3; //对应pass3数组
; uchar m; //对应pass数组
; uchar n; //对应time数组
; uchar n1; //对应high数组
; uchar n2; //对应low数组
; uchar way1; //通道1标志
; uchar way2; //通道2标志
; //uchar way3; //通道3标志
; //uchar way4; //通道4标志
; uchar page; //翻页标志
; uchar flag_can; //can标志
; //uchar flag_sound; //按键音
; uchar flag_print; //打印标志
; uchar gas_type; //气体类型
; uchar unit_chroma; //浓度单位
; uchar info_det[4]; //存放高低报浓度转换后的值
; uchar chro_bd[2]; //存放标定浓度
; uchar choice; //选择
; uchar regist; //注册
; uchar denglu; //登录
; uchar password; //判断是超级密码还是普通密码
; uchar num_can; //can编号
; uchar num_det; //节点编号
; uchar num_det2; //已选择的节点的编号
; uchar addr_can; //控制外设界面中转换器编号
; uchar addr_can1; //探测器界面中高报关联的转换器编号
; uchar addr_can2; //探测器界面中低报关联的转换器编号
; uchar addr_can3; //系统设置界面中调零的转换器编号
; //uchar addr_can3; //联动界面中通道3关联的转换器编号
; //uchar addr_can4; //联动界面中通道4关联的转换器编号
; uchar addr_det; //控制外设界面中探测器编号
; uchar addr_det1; //探测器界面中高报关联的探测器编号
; uchar link1; //探测器界面中高报关联的通道编号
; uchar addr_det2; //探测器界面中低报关联的探测器编号
; uchar link2; //探测器界面中低报关联的通道编号
; uchar addr_det3; //系统设置界面调零的探测器编号
; //uchar addr_det3; //联动界面中通道3关联的探测器编号
; //uchar addr_det4; //联动界面中通道4关联的探测器编号
; //uchar high_low1; //联动界面中通道1关联的高低报情况
; //uchar high_low2; //联动界面中通道2关联的高低报情况
; //uchar high_low3; //联动界面中通道3关联的高低报情况
; //uchar high_low4; //联动界面中通道4关联的高低报情况
; uchar channel; //存放通道的吸合断开情况
; uchar cha_local; //存放本地通道的吸合断开情况
; uchar state_cha;
;
; //光标坐标
; uchar X1H;
; uchar X1L;
; uchar Y1H;
; uchar Y1L;
; uchar X2H;
; uchar X2L;
; uchar Y2H;
; uchar Y2L;
; uint X1; //光标左上角横坐标
; uint Y1; //光标左上角纵坐标
; uint X2; //光标右下角横坐标
; uint Y2; //光标右下角纵坐标
;
;
; /************************转换函数*****************************/
; //对颜色位进行处理的转换
; void zhuanhuan1(void)
; {
.dbline 211
; X1=(X1H&0x03); //将X1H,X1L转换成16位数X1,将高6位清零
lds R24,_X1H
clr R25
andi R24,3
andi R25,0
sts _X1+1,R25
sts _X1,R24
.dbline 212
; X1=(X1<<8);
movw R2,R24
mov R3,R2
clr R2
sts _X1+1,R3
sts _X1,R2
.dbline 213
; X1=X1+X1L;
lds R2,_X1L
clr R3
lds R4,_X1
lds R5,_X1+1
add R4,R2
adc R5,R3
sts _X1+1,R5
sts _X1,R4
.dbline 214
; X1H=(X1H&0xfc); //恢复X1H的高6位,低两位清零
lds R24,_X1H
andi R24,252
sts _X1H,R24
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e zhuanhuan2 _zhuanhuan2 fV
.even
_zhuanhuan2::
.dbline -1
.dbline 217
; }
; void zhuanhuan2(void)
; {
.dbline 218
; Y1=Y1H&0x03; //将Y1H,Y1L转换成16位数Y1,将高6位清零
lds R24,_Y1H
clr R25
andi R24,3
andi R25,0
sts _Y1+1,R25
sts _Y1,R24
.dbline 219
; Y1=Y1<<8;
movw R2,R24
mov R3,R2
clr R2
sts _Y1+1,R3
sts _Y1,R2
.dbline 220
; Y1=Y1+Y1L;
lds R2,_Y1L
clr R3
lds R4,_Y1
lds R5,_Y1+1
add R4,R2
adc R5,R3
sts _Y1+1,R5
sts _Y1,R4
.dbline 221
; Y1H=Y1H&0xfc; //恢复Y1H的高6位
lds R24,_Y1H
andi R24,252
sts _Y1H,R24
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbend
.dbfunc e zhuanhuan3 _zhuanhuan3 fV
; x -> R16
.even
_zhuanhuan3::
.dbline -1
.dbline 224
; }
; void zhuanhuan3(void)
; {
.dbline 225
; uchar x=0; //将16位数X1的高低位分离
clr R16
.dbline 226
; X1L=X1; //低8位给X1L
lds R2,_X1
lds R3,_X1+1
sts _X1L,R2
.dbline 227
; x=X1>>8;
movw R16,R2
mov R16,R17
clr R17
.dbline 228
; X1H=X1H|x; //高8位处理后给X1H
lds R2,_X1H
or R2,R16
sts _X1H,R2
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbsym r x 16 c
.dbend
.dbfunc e zhuanhuan4 _zhuanhuan4 fV
; y -> R16
.even
_zhuanhuan4::
.dbline -1
.dbline 231
; }
; void zhuanhuan4(void)
; {
.dbline 232
; uchar y=0; //将16位数Y1的高低位分离
clr R16
.dbline 233
; Y1L=Y1; //将低8位给Y1L
lds R2,_Y1
lds R3,_Y1+1
sts _Y1L,R2
.dbline 234
; y=(Y1>>8);
movw R16,R2
mov R16,R17
clr R17
.dbline 235
; Y1H=(Y1H|y); //高8位处理后给Y1H
lds R2,_Y1H
or R2,R16
sts _Y1H,R2
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbsym r y 16 c
.dbend
.dbfunc e zhuanhuan _zhuanhuan fV
.even
_zhuanhuan::
.dbline -1
.dbline 240
; }
;
; //颜色位没有处理的转换
; void zhuanhuan(void)
; {
.dbline 241
; x=xh;
lds R2,_xh
clr R3
sts _x+1,R3
sts _x,R2
.dbline 242
; x=x<<8;
lds R2,_x
lds R3,_x+1
mov R3,R2
clr R2
sts _x+1,R3
sts _x,R2
.dbline 243
; x=x+xl; //将8位数xh,xl转换成16位数x,高位保持不变
lds R2,_xl
clr R3
lds R4,_x
lds R5,_x+1
add R4,R2
adc R5,R3
sts _x+1,R5
sts _x,R4
.dbline 244
; y=yh;
lds R2,_yh
clr R3
sts _y+1,R3
sts _y,R2
.dbline 245
; y=y<<8;
lds R2,_y
lds R3,_y+1
mov R3,R2
clr R2
sts _y+1,R3
sts _y,R2
.dbline 246
; y=y+yl;
lds R2,_yl
clr R3
lds R4,_y
lds R5,_y+1
add R4,R2
adc R5,R3
sts _y+1,R5
sts _y,R4
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbend
.dbfunc e zhuanhuan5 _zhuanhuan5 fV
; x -> R16
.even
_zhuanhuan5::
.dbline -1
.dbline 249
; }
; void zhuanhuan5(void)
; {
.dbline 250
; uchar x=0; //将16位数X2的高低位分离
clr R16
.dbline 251
; X2L=X2; //低8位给X2L
lds R2,_X2
lds R3,_X2+1
sts _X2L,R2
.dbline 252
; x=X2>>8;
movw R16,R2
mov R16,R17
clr R17
.dbline 253
; X2H=x; //高8位给X2H
sts _X2H,R16
.dbline -2
L8:
.dbline 0 ; func end
ret
.dbsym r x 16 c
.dbend
.dbfunc e zhuanhuan6 _zhuanhuan6 fV
; y -> R16
.even
_zhuanhuan6::
.dbline -1
.dbline 256
; }
; void zhuanhuan6(void)
; {
.dbline 257
; uchar y=0; //将16位数Y2的高低位分离
clr R16
.dbline 258
; Y2L=Y2; //将低8位给Y2L
lds R2,_Y2
lds R3,_Y2+1
sts _Y2L,R2
.dbline 259
; y=Y2>>8;
movw R16,R2
mov R16,R17
clr R17
.dbline 260
; Y2H=y; //高8位给Y2H
sts _Y2H,R16
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbsym r y 16 c
.dbend
.dbfunc e zhuanhuan7 _zhuanhuan7 fV
; temp2 -> R18
; temp1 -> R16
.even
_zhuanhuan7::
.dbline -1
.dbline 263
; }
; void zhuanhuan7(uchar temp1,uchar temp2)
; {
.dbline 264
; x=xh;
lds R2,_xh
clr R3
sts _x+1,R3
sts _x,R2
.dbline 265
; x=x<<8;
lds R2,_x
lds R3,_x+1
mov R3,R2
clr R2
sts _x+1,R3
sts _x,R2
.dbline 266
; x=x+xl;
lds R2,_xl
clr R3
lds R4,_x
lds R5,_x+1
add R4,R2
adc R5,R3
sts _x+1,R5
sts _x,R4
.dbline 267
; x=x+temp1; //报警界面中的位置转换
mov R2,R16
clr R3
add R4,R2
adc R5,R3
sts _x+1,R5
sts _x,R4
.dbline 268
; xl=x;
movw R2,R4
sts _xl,R2
.dbline 269
; xh=x>>8;
mov R2,R3
clr R3
sts _xh,R2
.dbline 270
; y=yh;
lds R2,_yh
clr R3
sts _y+1,R3
sts _y,R2
.dbline 271
; y=y<<8;
lds R2,_y
lds R3,_y+1
mov R3,R2
clr R2
sts _y+1,R3
sts _y,R2
.dbline 272
; y=y+yl;
lds R2,_yl
clr R3
lds R4,_y
lds R5,_y+1
add R4,R2
adc R5,R3
sts _y+1,R5
sts _y,R4
.dbline 273
; y=y+temp2;
mov R2,R18
clr R3
add R4,R2
adc R5,R3
sts _y+1,R5
sts _y,R4
.dbline 274
; yl=y;
movw R2,R4
sts _yl,R2
.dbline 275
; yh=y>>8;
mov R2,R3
clr R3
sts _yh,R2
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r temp2 18 c
.dbsym r temp1 16 c
.dbend
.dbfunc e zbzj _zbzj fV
.even
_zbzj::
.dbline -1
.dbline 279
; }
; /**************************坐标变化函数*****************************/
; void zbzj(void) //液晶坐标增加
; {
.dbline 280
; zhuanhuan1(); //8位数X1H,X1L转换为16位,高6位清零
xcall _zhuanhuan1
.dbline 281
; zhuanhuan2(); //8位数Y1H,Y1L转换为16位,高6位清零
xcall _zhuanhuan2
.dbline 282
; X1=X1+6;
lds R24,_X1
lds R25,_X1+1
adiw R24,6
sts _X1+1,R25
sts _X1,R24
.dbline 283
; X2=X1;
movw R2,R24
sts _X2+1,R3
sts _X2,R2
.dbline 284
; Y2=Y1+15;
lds R24,_Y1
lds R25,_Y1+1
adiw R24,15
sts _Y2+1,R25
sts _Y2,R24
.dbline 285
; zhuanhuan3(); //将16位数X1的高低位分离
xcall _zhuanhuan3
.dbline 286
; zhuanhuan4(); //将16位数Y1的高低位分离
xcall _zhuanhuan4
.dbline 287
; zhuanhuan5(); //将16位数X2的高低位分离
xcall _zhuanhuan5
.dbline 288
; zhuanhuan6(); //将16位数Y2的高低位分离
xcall _zhuanhuan6
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e zbjs _zbjs fV
.even
_zbjs::
.dbline -1
.dbline 291
; }
; void zbjs(void) //液晶坐标减少
; {
.dbline 292
; zhuanhuan1(); //8位数X1H,X1L转换为16位,高6位清零
xcall _zhuanhuan1
.dbline 293
; zhuanhuan2(); //8位数Y1H,Y1L转换为16位,高6位清零
xcall _zhuanhuan2
.dbline 294
; X1=X1-6;
lds R24,_X1
lds R25,_X1+1
sbiw R24,6
sts _X1+1,R25
sts _X1,R24
.dbline 295
; X2=X1;
movw R2,R24
sts _X2+1,R3
sts _X2,R2
.dbline 296
; Y2=Y1+15;
lds R24,_Y1
lds R25,_Y1+1
adiw R24,15
sts _Y2+1,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -