📄 display_board2.1.s
字号:
xcall _RAM_Write
.dbline 294
; DataIndex++;
lds R24,_DataIndex
lds R25,_DataIndex+1
adiw R24,1
sts _DataIndex+1,R25
sts _DataIndex,R24
.dbline 295
; if(DataIndex <2) //送文件长度数据到变量
cpi R24,2
ldi R30,0
cpc R25,R30
brge L78
.dbline 296
; {
.dbline 298
; //FileLength |=data <<DataIndex;
; FileLength =316;
ldi R24,316
ldi R25,1
sts _FileLength+1,R25
sts _FileLength,R24
.dbline 299
; } //数据指针
L78:
.dbline 300
; if((DataIndex >=FileLength)&& (DataIndex >16))
lds R2,_FileLength
lds R3,_FileLength+1
lds R4,_DataIndex
lds R5,_DataIndex+1
cp R4,R2
cpc R5,R3
brlt L80
ldi R24,16
ldi R25,0
cp R24,R4
cpc R25,R5
brge L80
.dbline 301
; {
.dbline 302
; HeadEN =1;
ldi R24,1
sts _HeadEN,R24
.dbline 303
; FileEnd =1;
sts _FileEnd,R24
.dbline 304
; }
L80:
.dbline 305
; }
L76:
.dbline 306
; if(HeadEN ==1) //循环检测文件起始标志
lds R24,_HeadEN
cpi R24,1
brne L82
.dbline 307
; {
.dbline 308
; Head[HeadLoad] =data;
ldi R24,<_Head
ldi R25,>_Head
lds R30,_HeadLoad
clr R31
add R30,R24
adc R31,R25
std z+0,R20
.dbline 309
; HeadLoad++;
lds R24,_HeadLoad
subi R24,255 ; addi 1
sts _HeadLoad,R24
.dbline 310
; if(HeadLoad ==3)
cpi R24,3
brne L84
.dbline 311
; {
.dbline 312
; if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
lds R24,_Head
cpi R24,76
brne L86
lds R24,_Head+1
cpi R24,69
brne L86
lds R24,_Head+2
cpi R24,68
brne L86
.dbline 313
; {
.dbline 314
; HeadEN =0;
clr R2
sts _HeadEN,R2
.dbline 315
; FileEnd =0;
sts _FileEnd,R2
.dbline 316
; }
L86:
.dbline 317
; }
L84:
.dbline 318
L82:
.dbline -2
L73:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbend
.dbfunc e Disp_Model _Disp_Model fV
; PFileMax -> R16,R17
; file_length -> R18,R19
.even
_Disp_Model::
.dbline -1
.dbline 326
; }
; }
; /**************************************************
;
; 显示效果处理
;
; ****************************************************/
; void Disp_Model(void)
; {
.dbline 327
; unsigned int file_length =0;
clr R18
clr R19
.dbline 331
; int PFileMax;
; //DispModel =RAM_Read(2) & (RAM_Read(3)<<8); //model控制字节
; //PFileMax =(RAM_Read(0) & RAM_Read(1)<<8)>>3; //计算缓冲区域的最大列数
; if(ModelDelayTime ==0)
lds R2,_ModelDelayTime
lds R3,_ModelDelayTime+1
tst R2
breq X6
xjmp L91
X6:
tst R3
breq X7
xjmp L91
X7:
X2:
.dbline 332
; {
.dbline 333
; switch(DispModel)
lds R18,_DispModel
clr R19
cpi R18,0
cpc R18,R19
breq L96
X3:
cpi R18,1
ldi R30,0
cpc R19,R30
breq L97
cpi R18,2
ldi R30,0
cpc R19,R30
breq L98
cpi R18,3
ldi R30,0
cpc R19,R30
brne X8
xjmp L94
X8:
cpi R18,4
ldi R30,0
cpc R19,R30
breq L100
cpi R18,5
ldi R30,0
cpc R19,R30
brne X9
xjmp L94
X9:
xjmp L93
X4:
.dbline 334
; {
L96:
.dbline 336
; case 0:
; { //基本显示
.dbline 337
; PDataYMin =4;
ldi R24,4
ldi R25,0
sts _PDataYMin+1,R25
sts _PDataYMin,R24
.dbline 338
; PDataYMax =154;
ldi R24,154
sts _PDataYMax+1,R25
sts _PDataYMax,R24
.dbline 339
; break;
xjmp L94
L97:
.dbline 342
; }
; case 1:
; { //滚屏
.dbline 343
; PDataY++;
lds R24,_PDataY
lds R25,_PDataY+1
adiw R24,1
sts _PDataY+1,R25
sts _PDataY,R24
.dbline 344
; break;
xjmp L94
L98:
.dbline 347
; }
; case 2:
; { //反向滚屏
.dbline 348
; PDataY--;
lds R24,_PDataY
lds R25,_PDataY+1
sbiw R24,1
sts _PDataY+1,R25
sts _PDataY,R24
.dbline 349
; break;
xjmp L94
X5:
.dbline 352
; }
; case 3:
; {
.dbline 353
; break;
L100:
.dbline 356
; }
; case 4:
; { //覆盖模式
.dbline 357
; if(ModelContJuge =1)
ldi R24,1
sts _ModelContJuge,R24
tst R24
breq L101
.dbline 358
; {
.dbline 359
; PDataYMax++;
lds R24,_PDataYMax
lds R25,_PDataYMax+1
adiw R24,1
sts _PDataYMax+1,R25
sts _PDataYMax,R24
.dbline 360
; PDataYMin++;
lds R24,_PDataYMin
lds R25,_PDataYMin+1
adiw R24,1
sts _PDataYMin+1,R25
sts _PDataYMin,R24
.dbline 361
; }
xjmp L102
L101:
.dbline 363
; else
; {
.dbline 364
; PDataYMax--;
lds R24,_PDataYMax
lds R25,_PDataYMax+1
sbiw R24,1
sts _PDataYMax+1,R25
sts _PDataYMax,R24
.dbline 365
; PDataYMin--;
lds R24,_PDataYMin
lds R25,_PDataYMin+1
sbiw R24,1
sts _PDataYMin+1,R25
sts _PDataYMin,R24
.dbline 366
; }
L102:
.dbline 367
; if(PDataYMax >PFileMax)
lds R2,_PDataYMax
lds R3,_PDataYMax+1
cp R16,R2
cpc R17,R3
brge L103
.dbline 368
; {
.dbline 369
; ModelContJuge =0;
clr R2
sts _ModelContJuge,R2
.dbline 370
; }
L103:
.dbline 371
; if(PDataYMax <PFileMax)
lds R2,_PDataYMax
lds R3,_PDataYMax+1
cp R2,R16
cpc R3,R17
brge L94
.dbline 372
; {
.dbline 373
; ModelContJuge =1;
ldi R24,1
sts _ModelContJuge,R24
.dbline 374
; }
.dbline 375
; break;
.dbline 378
; }
; case 5:
; {
.dbline 379
; break;
L93:
L94:
.dbline 383
ldi R24,400
ldi R25,1
sts _ModelDelayTime+1,R25
sts _ModelDelayTime,R24
.dbline 384
L91:
.dbline -2
L90:
.dbline 0 ; func end
ret
.dbsym r PFileMax 16 I
.dbsym r file_length 18 i
.dbend
.dbfunc e KEY_event _KEY_event fV
.even
_KEY_event::
.dbline -1
.dbline 393
; }
; }
; //ModelDelayTime =RAM_Read(4) & (RAM_Read(5)<<8);
; ModelDelayTime =400;
; }
; }
;
; /**************************************************
;
; 按键\显示事件处理区
;
; ****************************************************/
; void KEY_event(void)
; { /********* 添加按键处理代码 ***************/
.dbline 394
; switch(key_num)
lds R16,_key_num
clr R17
cpi R16,0
cpc R16,R17
breq L110
X10:
cpi R16,1
ldi R30,0
cpc R17,R30
breq L110
cpi R16,2
ldi R30,0
cpc R17,R30
breq L114
cpi R16,3
ldi R30,0
cpc R17,R30
breq L117
xjmp L109
X11:
.dbline 395
; {
.dbline 397
; case 0:
; {//And your code
.dbline 399
; //RAM_Write(0x0010,0xCF);
; break;
.dbline 402
; }
; case 1:
; {
.dbline 405
; //Disp_Buff[0] =RAM_Read(0x0010)&0xf;
; //Disp_Buff[1] =RAM_Read(0x0010)>>4;
; break;
L114:
.dbline 408
; }
; case 2:
; {
.dbline 409
; DispModel++;
lds R24,_DispModel
subi R24,255 ; addi 1
sts _DispModel,R24
.dbline 410
; if(DispModel >8)
ldi R24,8
lds R2,_DispModel
cp R24,R2
brsh L110
.dbline 411
; DispModel =0;
clr R2
sts _DispModel,R2
.dbline 412
; break;
xjmp L110
L117:
.dbline 415
; }
; case 3:
; {
.dbline 416
; PORTD &=0b10111111;
in R24,0x12
andi R24,191
out 0x12,R24
.dbline 417
; break;
L109:
L110:
.dbline -2
L108:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Display_event _Display_event fV
.even
_Display_event::
.dbline -1
.dbline 424
; }
; /*..................*/
; }
; }
; // 显示事件添加
; void Display_event(void)
; { /************* 添加显示 ***********************/
.dbline 427
; //Disp_Buff[1] =>>4;
; //Disp_Buff[6] =head[2]&0x0f;
; Disp_Buff[0] =DataIndex&0x0f;
lds R24,_DataIndex
lds R25,_DataIndex+1
andi R24,15
andi R25,0
sts _Disp_Buff,R24
.dbline 428
; Disp_Buff[1] =(DataIndex>>4)&0x0f;
lds R24,_DataIndex
lds R25,_DataIndex+1
asr R25
ror R24
asr R25
ror R24
asr R25
ror R24
asr R25
ror R24
andi R24,15
andi R25,0
sts _Disp_Buff+1,R24
.dbline 429
; Disp_Buff[2] =DataIndex>>8;
lds R2,_DataIndex
lds R3,_DataIndex+1
mov R2,R3
clr R3
sbrc R2,7
com R3
sts _Disp_Buff+2,R2
.dbline 430
; Disp_Buff[4] =PDataY&0x0f;
lds R24,_PDataY
lds R25,_PDataY+1
andi R24,15
andi R25,0
sts _Disp_Buff+4,R24
.dbline 431
; Disp_Buff[3] =DispModel;
lds R2,_DispModel
sts _Disp_Buff+3,R2
.dbline 432
; Disp_Buff[6] =HeadEN;
lds R2,_HeadEN
sts _Disp_Buff+6,R2
.dbline 433
; Disp_Buff[7] =FileEnd;
lds R2,_FileEnd
sts _Disp_Buff+7,R2
.dbline -2
L118:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; temp -> <dead>
.even
_main::
.dbline -1
.dbline 440
;
; }
;
; /******************* 结束 ***********************************/
; /********** 主函数区 *****************************/
; void main(void)
; {
.dbline 442
; char temp;
; device_int();
xcall _device_int
L126:
.dbline 444
.dbline 445
.dbline 446
L127:
.dbline 443
xjmp L126
X12:
.dbline -2
L125:
.dbline 0 ; func end
ret
.dbsym l temp 1 c
.dbend
.dbfunc e exi_int0 _exi_int0 fV
; adress -> R20,R21
; i -> R22
.even
_exi_int0::
xcall push_lset
xcall push_gset2
.dbline -1
.dbline 457
; while(1)
; {
; ;
; }
; }
;
; /************ 中断函数区 *************************/
;
; /************************************
; 外中断
; 数电机脉冲
; *************************************/
;
; void exi_int0(void)
; {
.dbline 458
; char i =0;
clr R22
.dbline 460
; int adress;
; adress =PDataY<<3;
lds R20,_PDataY
lds R21,_PDataY+1
lsl R20
rol R21
lsl R20
rol R21
lsl R20
rol R21
.dbline 461
; for(;i <8;i++)
xjmp L133
L130:
.dbline 462
.dbline 463
movw R2,R20
subi R20,255 ; offset = 1
sbci R21,255
movw R16,R2
xcall _RAM_Read
ldi R24,<_DispTemp
ldi R25,>_DispTemp
mov R30,R22
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 464
L131:
.dbline 461
inc R22
L133:
.dbline 461
cpi R22,8
brlo L130
.dbline 465
xcall _Screen_send
.dbline 466
lds R24,_PDataY
lds R25,_PDataY+1
adiw R24,1
sts _PDataY+1,R25
sts _PDataY,R24
.dbline 467
lds R2,_PDataYMax
lds R3,_PDataYMax+1
cp R24,R2
cpc R25,R3
brne L134
.dbline 468
lds R2,_PDataYMin
lds R3,_PDataYMin+1
sts _PDataY+1,R3
sts _PDataY,R2
L134:
.dbline -2
L129:
xcall pop_gset2
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym r adress 20 I
.dbsym r i 22 c
.dbend
.dbfunc e timer1_vof _timer1_vof fV
.even
_timer1_vof::
xcall push_lset
.dbline -1
.dbline 476
; {
; DispTemp[i] =RAM_Read(adress++);//地址偏移,取数到显示缓冲区
; }
; Screen_send(); //送显示屏幕数据
; PDataY++;
; if(PDataY == PDataYMax) //数据定位
; PDataY =PDataYMin;
; }
;
; /*******************************************
; 定时器中断
; 系统主要时钟基准
; ********************************************/
; void timer1_vof(void)
; {
.dbline 477
; SEI();
sei
.dbline 478
; TCNT1H = 0xd4; //setup
ldi R24,212
out 0x2d,R24
.dbline 479
; TCNT1L = 0xce;
ldi R24,206
out 0x2c,R24
.dbline 481
;
; sys_cont++; //系统调用时间变量
lds R24,_sys_cont
lds R25,_sys_cont+1
adiw R24,1
sts _sys_cont+1,R25
sts _sys_cont,R24
.dbline 483
;
; if(sys_cont ==1000)
cpi R24,232
ldi R30,3
cpc R25,R30
brne L137
.dbline 484
; sys_cont =0;
clr R2
clr R3
sts _sys_cont+1,R3
sts _sys_cont,R2
L137:
.dbline 486
;
; if(key_delay >0) //键盘去抖动延时变量
clr R2
lds R3,_key_delay
cp R2,R3
brsh L139
.dbline 487
; key_delay--;
mov R24,R3
subi R24,1
sts _key_delay,R24
L139:
.dbline 489
;
; if(delay_time_count >0)
lds R2,_delay_time_count
lds R3,_delay_time_count+1
tst R2
brne X13
tst R3
breq L141
X13:
.dbline 490
; delay_time_count--; //ms延时用变量
lds R24,_delay_time_count
lds R25,_delay_time_count+1
sbiw R24,1
sts _delay_time_count+1,R25
sts _delay_time_count,R24
L141:
.dbline 492
;
; if(ModelDelayTime >0) //模式切换时间
clr R2
clr R3
lds R4,_ModelDelayTime
lds R5,_ModelDelayTime+1
cp R2,R4
cpc R3,R5
brge L143
.dbline 493
; ModelDelayTime--;
movw R24,R4
sbiw R24,1
sts _ModelDelayTime+1,R25
sts _ModelDelayTime,R24
L143:
.dbline 495
;
; Disp_key_group(); //显示刷新,取键值到缓冲区
xcall _Disp_key_group
.dbline 496
; Key_num(); //键值后期处理以及去抖函数
xcall _Key_num
.dbline 497
; Disp_Model(); //屏幕显示特效模式
xcall _Disp_Model
.dbline 498
; KEY_event(); //按键事件处理
xcall _KEY_event
.dbline 499
; Display_event(); //显示事件
xcall _Display_event
.dbline 500
; Screen_send();
xcall _Screen_send
.dbline -2
L136:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e usart_rcx _usart_rcx fV
; uart_data -> R20
.even
_usart_rcx::
xcall push_lset
xcall push_gset1
.dbline -1
.dbline 508
;
; }
;
; /*************************************
; USART 接受中断
; ******************************/
; void usart_rcx(void)
; {
.dbline 510
; unsigned char uart_data;
; uart_data =UDR;
in R20,0xc
.dbline 511
; data_store(uart_data);
mov R16,R20
xcall _data_store
.dbline 512
; uart_TX(0xAA);
ldi R16,170
xcall _uart_TX
.dbline 513
; time_out_ms=0;
clr R2
clr R3
sts _time_out_ms+1,R3
sts _time_out_ms,R2
.dbline 514
; time_out_s=0;
sts _time_out_s,R2
.dbline -2
L145:
xcall pop_gset1
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym r uart_data 20 c
.dbend
.area bss(ram, con, rel)
.dbfile display_board2.1.c
_Head::
.blkb 3
.dbsym e Head _Head A[3:3]c
_DispTemp::
.blkb 8
.dbsym e DispTemp _DispTemp A[8:8]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -