⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_main.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	ui_main(17)
	RSEG	COM_MAIN(0)
	RSEG	IDATA0(0)
	RSEG	CDATA0(0)
	RSEG	COM_MAIN_D(0)
	EXTERN	ClearScreen
	EXTERN	PutS
	EXTERN	PutSDImage
	EXTERN	SD_FRead
	EXTERN	SD_FSeek
	EXTERN	SetTextPos
	EXTERN	UpdateScreen
	EXTERN	ap_sleep
	PUBLIC	batt_id
	EXTERN	g_comval
	PUBLIC	itoa_1
	PUBLIC	itoa_2
	PUBLIC	itoa_3
	PUBLIC	itoa_4
	PUBLIC	main_ResShowPic
	PUBLIC	region_c
	PUBLIC	region_cd
	PUBLIC	region_d
	PUBLIC	region_d2
	PUBLIC	region_e
	PUBLIC	region_ef
	PUBLIC	region_f
	PUBLIC	region_g
	EXTERN	res_entry
	EXTERN	res_fp
	EXTERN	res_region
	EXTERN	ui_auto_update
	PUBLIC	ui_show_a
	PUBLIC	ui_show_b
	PUBLIC	ui_show_batt
	PUBLIC	ui_show_c
	PUBLIC	ui_show_cd
	PUBLIC	ui_show_d
	PUBLIC	ui_show_d2
	PUBLIC	ui_show_d_pic
	PUBLIC	ui_show_e
	PUBLIC	ui_show_ef
	PUBLIC	ui_show_f
	PUBLIC	ui_show_g
	PUBLIC	ui_show_lock
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?UC_DIV_L01
	EXTERN	?UC_MOD_L01
	EXTERN	?US_DIV_L02
	EXTERN	?SS_DIV_L02
	EXTERN	?US_MOD_L02
	EXTERN	?S_MUL_L02
	EXTERN	?L_LSH_L03
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	COM_MAIN
itoa_1:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        ap common lib , main ui control 
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.                             
; 7.	*             All Right Reserved                          
; 8.	*
; 9.	*******************************************************************************
; 10.	*/ 
; 11.	#pragma codeseg(COM_MAIN)
; 12.	
; 13.	#include "ap_common.h"
; 14.	
; 15.	//主界面为了不用bank切换而使用 ResShowPic()
; 16.	extern res_entry_t res_entry;
; 17.	extern region_t res_region;
; 18.	extern comval_t g_comval; 
; 19.	//bank const
; 20.	/*注意-以下函数必须能访问到这些常量 */
; 21.	#pragma memory=constseg(COM_MAIN_D)
; 22.	//const region_t region_a = {POSITION_A, 0, 15, 16};
; 23.	//const region_t region_b = {POSITION_B, 0, 21, 16};
; 24.	const region_t region_c = {POSITION_C, 0, 11, 16};
; 25.	const region_t region_d2 = {POSITION_D-6, 0, 23, 16};
; 26.	const region_t region_d = {POSITION_D, 0, 17, 16};
; 27.	const region_t region_cd = {POSITION_C, 0, 11+17+1, 16};
; 28.	const region_t region_e = {POSITION_E, 0, 16, 16};
; 29.	const region_t region_f = {POSITION_F, 0, 29, 16};
; 30.	const region_t region_ef = {POSITION_E, 0, 15+29+3, 16};
; 31.	const region_t region_g = {POSITION_G, 16, 128, 16};
; 32.	//const region_t region_batt = {POSITION_BATT, 0, 13, 16};
; 33.	
; 34.	const WORD batt_id[9] = {BATTLVL1, BATTLVL2, BATTLVL3, BATTLVL4, 
; 35.	    BATTLVL5, BATTLVL6, BATTLVL7, BATTLVL8, BATTLVL9};    //对应1~9级电量的图标
; 36.	#pragma memory=default
; 37.	
; 38.	/*
; 39.	********************************************************************************
; 40.	* Description : 数字转换成字符串
; 41.	*
; 42.	* Arguments   : i, 数字
; 43.	*               buf, 输出字符串指针, 3 bytes
; 44.	*
; 45.	* Returns     : 成功, 输出字符串指针
; 46.	*
; 47.	* Notes       : 数字只能是 0~9
; 48.	*
; 49.	********************************************************************************
; 50.	*/
; 51.	char *itoa_1(BYTE i, char *buf)
; 52.	{
	PUSH	IX
	PUSH	BC
	POP	IX
; 53.	    //ASSERT(buf != NULL); 
; 54.	    /* 
; 55.	    buf[0] = mychar[i % 10];
; 56.	    buf[1] = 0;
; 57.	    */
; 58.	    buf[0] = (i % 10) + '0';
	LD	B,10
	LD	A,E
	CALL	LWRD ?UC_MOD_L01
	ADD	A,48
	LD	(IX+0),A
; 59.	    buf[1] = 0;            
	LD	(IX+1),0
; 60.	    return buf;
?0113:
	PUSH	IX
	POP	HL
; 61.	}
	POP	IX
	JP	LWRD ?BANK_FAST_LEAVE_L08
itoa_2:
; 62.	
; 63.	/*
; 64.	********************************************************************************
; 65.	* Description : 数字转换成字符串
; 66.	*
; 67.	* Arguments   : i, 数字
; 68.	*               buf, 输出字符串指针, 3 bytes
; 69.	*
; 70.	* Returns     : 成功, 输出字符串指针
; 71.	*
; 72.	* Notes       : 数字只能是 00~99
; 73.	*
; 74.	********************************************************************************
; 75.	*/
; 76.	char *itoa_2(BYTE i, char *buf)
; 77.	{
	PUSH	IX
	PUSH	BC
	POP	IX
	LD	D,E
; 78.	    //ASSERT(buf != NULL);  
; 79.	    /* 
; 80.	    buf[0] = mychar[(i % 100) / 10];
; 81.	    buf[1] = mychar[i % 10];
; 82.	    buf[2] = 0;
; 83.	    */
; 84.	    buf[0] = (i % 100) / 10 + '0';
	LD	B,100
	LD	A,E
	CALL	LWRD ?UC_MOD_L01
	LD	B,10
	CALL	LWRD ?UC_DIV_L01
	ADD	A,48
	LD	(IX+0),A
; 85.	    buf[1] = (i % 10) + '0';
	LD	A,D
	CALL	LWRD ?UC_MOD_L01
	ADD	A,48
	LD	(IX+1),A
; 86.	    buf[2] = 0;    
	LD	(IX+2),0
; 87.	    return buf;
	JP	LWRD ?0113
; 88.	}
itoa_3:
; 89.	/*
; 90.	********************************************************************************
; 91.	* Description : 数字转换成字符串
; 92.	*
; 93.	* Arguments   : i, 数字
; 94.	*               buf, 输出字符串指针,4 bytes
; 95.	*
; 96.	* Returns     : 成功, 输出字符串指针
; 97.	*
; 98.	* Notes       : 数字只能是 000~999
; 99.	*
; 100.	********************************************************************************
; 101.	*/
; 102.	char *itoa_3(WORD i, char *buf)
; 103.	{
	PUSH	IY
	PUSH	IX
	PUSH	BC
	POP	IX
	PUSH	DE
	POP	IY
; 104.	    //ASSERT(buf != NULL);
; 105.	    /*
; 106.	    buf[0] = mychar[(i % 1000) / 100];
; 107.	    buf[1] = mychar[(i % 100) / 10];    
; 108.	    buf[2] = mychar[i % 10];
; 109.	    buf[3] = 0;
; 110.	    */
; 111.	    buf[0] = (i % 1000) / 100 + '0';
	LD	BC,1000
	CALL	LWRD ?US_MOD_L02
	LD	BC,100
; 112.	    buf[1] = (i % 100) / 10 + '0';    
	CALL	LWRD ?0117
	LD	C,10
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+1),A
; 113.	    buf[2] = (i % 10) + '0';
	CALL	LWRD ?0118
	LD	A,E
	ADD	A,48
	LD	(IX+2),A
; 114.	    buf[3] = 0;
	LD	(IX+3),B
; 115.	
; 116.	    return buf;
?0114:
	PUSH	IX
	POP	HL
; 117.	}
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0117:
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+0),A
?0118:
	PUSH	IY
	POP	DE
	JP	LWRD ?US_MOD_L02
itoa_4:
; 118.	/*
; 119.	********************************************************************************
; 120.	* Description : 数字转换成字符串
; 121.	*
; 122.	* Arguments   : i, 数字
; 123.	*               buf, 输出字符串指针,5 bytes
; 124.	*
; 125.	* Returns     : 成功, 输出字符串指针
; 126.	*
; 127.	* Notes       : 数字只能是 0000~9999
; 128.	*
; 129.	********************************************************************************
; 130.	*/    
; 131.	char *itoa_4(WORD i, char *buf)
; 132.	{
	PUSH	IY
	PUSH	IX
	PUSH	BC
	POP	IX
	PUSH	DE
	POP	IY
; 133.	    //ASSERT(buf != NULL);
; 134.	    /*
; 135.	    buf[0] = mychar[(i % 10000) / 1000];
; 136.	    buf[1] = mychar[(i % 1000) / 100];
; 137.	    buf[2] = mychar[(i % 100) / 10];    
; 138.	    buf[3] = mychar[i % 10];
; 139.	    buf[4] = 0;
; 140.	    */
; 141.	    buf[0] = (i % 10000) / 1000 + '0';
	LD	BC,10000
	CALL	LWRD ?US_MOD_L02
	LD	BC,1000
; 142.	    buf[1] = (i % 1000) / 100 + '0';
	CALL	LWRD ?0117
	LD	BC,100
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+1),A
; 143.	    buf[2] = (i % 100) / 10 + '0';    
	CALL	LWRD ?0118
	LD	C,10
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+2),A
; 144.	    buf[3] = (i % 10) + '0';
	CALL	LWRD ?0118
	LD	A,E
	ADD	A,48
	LD	(IX+3),A
; 145.	    buf[4] = 0;
	LD	(IX+4),B
; 146.	
; 147.	    return buf;
	JP	LWRD ?0114
; 148.	}
main_ResShowPic:
; 149.	    
; 150.	
; 151.	//只有这个界面使用,为了提高效率而放在这里
; 152.	int main_ResShowPic(WORD id, uchar x, uchar y)
; 153.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
; 154.	    WORD buf[2];    //buffer for sd read
; 155.	
; 156.	    ASSERT(id <= UIID_MAX);
; 157.	    
; 158.	    //读entry
; 159.	    SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t));
	LD	L,E
	LD	H,D
	LD	BC,0
	LD	A,4
	CALL	LWRD ?L_LSH_L03
	PUSH	BC
	PUSH	HL
	LD	C,0
	LD	DE,(res_fp)
	CALL	LWRD SD_FSeek
	POP	HL
	POP	HL
; 160.	    SD_FRead(res_fp, &res_entry, sizeof(res_entry_t));
	LD	HL,16
	PUSH	HL
	LD	BC,res_entry
	LD	DE,(res_fp)
	CALL	LWRD SD_FRead
	POP	AF
; 161.	    if(res_entry.type != RES_TYPE_PIC) return 0;
	LD	A,(res_entry+6)
	DEC	A
	JR	Z,?0003
?0002:
	LD	HL,0
; 162.	    ASSERT(res_entry.length <= 512);
	JR	?0006
?0003:
; 163.	
; 164.	    //读数据
; 165.	    SD_FSeek(res_fp, SEEK_SET, res_entry.offset);
	LD	HL,(res_entry+2)
	PUSH	HL
	LD	HL,(res_entry)
	PUSH	HL
	LD	C,A
	LD	DE,(res_fp)
	CALL	LWRD SD_FSeek
	POP	HL
	POP	HL
; 166.	    //SD_FRead(res_fp, &(res_region.width), 2);
; 167.	    //SD_FRead(res_fp, &(res_region.height), 2);
; 168.	    SD_FRead(res_fp, buf, sizeof(buf));
	LD	HL,4
	PUSH	HL
	DEC	HL
	DEC	HL
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	DE,(res_fp)
	CALL	LWRD SD_FRead
	POP	AF
; 169.	    //ASSERT(buf[0] <= 128);
; 170.	    //ASSERT(buf[1] <= 32);    
; 171.	    res_region.width = (char)buf[0];
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region+2),A
; 172.	    res_region.height = (char)buf[1];
	INC	HL
	INC	HL
	LD	A,(HL)
	LD	(res_region+3),A
; 173.	    
; 174.	    //显示
; 175.	    res_region.x = x;
	LD	HL,6
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region),A
; 176.	    res_region.y = y;
	LD	HL,12
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region+1),A
; 177.	    PutSDImage(&res_region, res_fp->rwpointer);
	LD	HL,20
	LD	BC,(res_fp)
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	LD	DE,res_region
	CALL	LWRD PutSDImage
	POP	HL
	POP	HL
; 178.	    if(ui_auto_update) UpdateScreen(&res_region);
	LD	A,(ui_auto_update)
	OR	A
	JR	Z,?0005
?0004:
	LD	DE,res_region
	CALL	LWRD UpdateScreen
?0005:
; 179.	    return 1;
	LD	HL,1
; 180.	}
?0006:
	POP	AF
	POP	AF
	POP	AF
	POP	AF
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_show_a:
; 181.	
; 182.	void ui_show_a(WORD id)
; 183.	{
	PUSH	BC
	PUSH	DE
; 184.	    main_ResShowPic(id, POSITION_A, 0);
	LD	C,0
	PUSH	BC
?0115:
	CALL	LWRD ?0119
	POP	AF
; 185.	}
	POP	HL
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0119:
	LD	A,BYTE3 main_ResShowPic
	LD	HL,LWRD main_ResShowPic
	JP	LWRD ?BANK_CALL_DIRECT_L08
ui_show_b:
; 186.	
; 187.	void ui_show_b(WORD id)
; 188.	{
	PUSH	BC
	PUSH	DE
; 189.	    main_ResShowPic(id, POSITION_B, 0);
	LD	C,0
	PUSH	BC
	LD	C,15
	JP	LWRD ?0115
; 190.	    //FIXME:显示小数字
; 191.	    
; 192.	    //if(ui_auto_update) UpdateScreen(&region_b);
; 193.	}
ui_show_c:
; 194.	//id =0, clear the icon
; 195.	void ui_show_c(WORD id)
; 196.	{
	PUSH	BC
	PUSH	IX
; 197.	    if(id == 0)
	LD	A,E
	OR	D
	JR	NZ,?0008
?0007:
; 198.	    {
; 199.	        ClearScreen(&region_c);
	LD	DE,region_c
	CALL	LWRD ClearScreen
; 200.	        if(ui_auto_update) UpdateScreen(&region_c);
	LD	A,(ui_auto_update)
	OR	A
	JR	Z,?0011
?0009:
	LD	DE,region_c
	CALL	LWRD UpdateScreen
?0010:
	JR	?0011
?0008:
; 201.	    }
; 202.	    else main_ResShowPic(id, POSITION_C, 0);    
	LD	C,0
	PUSH	BC
	LD	C,38
	CALL	LWRD ?0119
	POP	AF
?0011:
; 203.	}
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_show_d2:
; 204.	
; 205.	void ui_show_d2(const char *string, BYTE part)
; 206.	{
	PUSH	BC
	PUSH	DE
; 207.	    if(part == 0) SetTextPos(POSITION_D - 6, 0);
	XOR	A
	OR	C
	JR	Z,?0074
?0012:
?0013:
; 208.	    else SetTextPos(POSITION_D - 6, 8);
	LD	C,8
?0074:
	LD	E,44
	CALL	LWRD ?0120
?0014:
; 209.	
; 210.	    PutS(string, -1);
	ADD	HL,SP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -