📄 updatescreen.msa
字号:
/********************************************************************************** ACTOS* ui dirver show picture** (c) Copyright 2002-2003, Actions Co,Ld.* All Right Reserved** File : UI_ShowPic.msa* By : Chliang* Version: 1> v1.00 first version 12/07/2003 10:46PM*********************************************************************************/#include "UI_S0724.h"#include "irq.h" module UpdateScreen public UpdateScreen public sUI_CmdTrans rseg UI_RCODE extern DisplayBuffer extern UpdStartColumnH extern UpdStartColumnL extern UpdWidth extern UpdPgNum extern CurrentPg extern REG02_Buff extern REG2f_Buff extern REGee_Buff #define TallestPgNum 0xb3 //large,在有些情况下,这里需要修改,如第一PAGE不是0XB3的时候//***************************************************************************/*** FUNCTION: UpdateScreen** PURPOSE: UpdateScreen** PARAMETERS:** input** de=图片范围结构region_t的指针** typedef struct** {** char x; //列位置** char y; //页位置** char width; //宽度** char hight; //高度 以page为单位** }region_t;** output** none** DESCRIPTION://***************************************************************************/UpdateScreen: push ix push bc push de ld a,e //region=NULL or d jr nz,lsUpdSectionScr xor a ld (UpdStartColumnL),a ld (CurrentPg),a ld a,10h ld (UpdStartColumnH),a //ybfu ld a,DisplaySuppPage ld (UpdPgNum),a //ybfu ld a,Displaylength ld (UpdWidth),a jr lsUpdBeginlsUpdSectionScr: push de pop ix ld a,(ix+2) //宽 or a jr z,lsUpdScreenEnd ld (UpdWidth),a ld b,a //ybfu //注意,为了程序的精简,这里没有越界的处理 ld a,(ix+0) //列 ld e,a //***************************** change by ybfu for 越界处理 add a,b cp Displaylength+1 jr c,lsUpdSectionScrConti1 //ybfu ld a,Displaylength sub e //减当前列 ld (UpdWidth),alsUpdSectionScrConti1: ld a,e //************************ ybfu and 0fh ld (UpdStartColumnL),a ld a,e srl a srl a srl a srl a set 4,a ld (UpdStartColumnH),a ld a,(ix+1) //行 ld b,a srl a srl a srl a ld (CurrentPg),a ld c,a ld a,(ix+3) //高 add a,b srl a srl a srl a sub c ld (UpdPgNum),alsUpdBegin: //ybfu ld hl,DisplayBuffer ld d,0 //e=列 add hl,de //没加Page的Buffer地址 ld a,(CurrentPg) or a ld c,0 //ybfu ld de,Displaylength jr z,lsStartUpd ld c,a ld b,a //循环次数lsGetUpdStartAddr: add hl,de djnz lsGetUpdStartAddrlsStartUpd: ld a,(UpdWidth) //宽 ld b,a //b=宽lsUpdLoop: call sUpdOnePage //输入参数 b=长度,c=Page选择,hl=Buffer地址 add hl,de inc c //c=Page选择 ld a,(UpdPgNum) dec a ld (UpdPgNum),a jr nz,lsUpdLooplsUpdScreenEnd: pop de pop bc pop ix retsUpdOnePage: //输入参数 b=长度,c=Page选择,hl=Buffer地址 push bc push de push hl mDI in a,(REG02_EMHiPageReg) //REG02 bak ld (REG02_Buff),a in a,(REG02_EMHiPageReg) or CE_EN_BIT out (REG02_EMHiPageReg),a ld a,TallestPgNum //定义Page为相反 sub c ld c,a call sUI_CmdTrans //change by ybfu 2004-2-27 17:47 ld a,(UpdStartColumnH) //设Column高四位 ld c,a ld a,(UpdStartColumnL) cp 0ch jr c,NotAddHighCol inc cNotAddHighCol: call sUI_CmdTrans ld a,(UpdStartColumnL) //设Column低四位 add a,04h //change by ybfu 2004-2-6 10:27 and 0fh //change by ybfu 2004-2-27 16:06 ld c,a call sUI_CmdTrans call sUI_TransPage //输入参数b=长度,hl=Buffer地址 ld a,(REG02_Buff) out (REG02_EMHiPageReg),a //CE 恢复 mEI pop hl pop de pop bc ret//********************************************************/*** FUNCTION: CmdTransport** PURPOSE: Trasnport one Byte CMD data to ST7565** PARAMETERS: 动到寄存器A** input---none** output---none** DESCRIPTION: 注意这里的函数和硬件外围I/O分配关系密切,改动时要小心*///********************************************************sUI_CmdTrans: push bc in a,(A0_GIO_DATA_REG) //LCM A0=0; and A0_CLR_BIT out (A0_GIO_DATA_REG),a ld a,c ld (0x8000),a pop bc ret//******************************************************sUI_TransPage: in a,(A0_GIO_DATA_REG) //LCM A0=1; or A0_SET_BIT out (A0_GIO_DATA_REG),asUI_TransPage1: ld a,(hl) ld (0x8001),a inc hl djnz sUI_TransPage1 retend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -