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

📄 main.c

📁 通用OSD控制(51单片机控制的TFTLCD源码,MTV018)
💻 C
📖 第 1 页 / 共 2 页
字号:

unsigned char tint_step(unsigned char val, unsigned char inc)
{
#if 0
	if (inc && (val-TINT_OFF) < TINT_RANGE) {
		val += TINT_FAC;
	} else if (!inc && val > TINT_OFF) {
		val -= TINT_FAC;
	}
	return val;
#else
	val = step_value(val, TINT_FAC, inc);
	return check_value2(val, TINT_OFF, TINT_RANGE, inc ? TINT_OFF+TINT_RANGE : TINT_OFF);
#endif
}


unsigned char reset_step(unsigned char val, unsigned char inc)
//unsigned char reset_step()
{
    unsigned char	Data;
	Data = inc;
	return val;
}

#if 0
unsigned char bival_step(unsigned char val, unsigned char inc)
{
	if (inc) {
		if (++val > 1)
			val = 0;
	} else {
		if (--val > 1)
			val = 1;
	}
	return val;
}

#endif

void bri_apply(unsigned char val)
{
    if (val<92)
	    val=92;
	else if(val>132)
	       val=132;
	osd_setbrightness(val);
}

void cont_apply(unsigned char val)
{
	osd_setcontrast(val);
}

void col_apply(unsigned char val)
{
	osd_setcolor(val);
}

void tint_apply(unsigned char val)
{
	osd_settint(val);
}

void reset_apply(unsigned char val)
//void reset_apply(void)
{
	unsigned char i;
    unsigned char Data;	
	struct menuitem_struct code *item;

    Data = val;
	for (i = 0, item = &items[0]; i < NR_ITEMS; i++, item++) {
		if (item->flags & MIF_RESET) {
			at24cxx_writebyte(item->addr, item->defval);
			item->apply(item->defval);
			if (!(item->flags & MIF_DOCA)) {
				paint_line(ROW_BRI+i, 12, 18, 2);
				item->draw(ROW_BRI+i, 12, item->defval);
			}
		}
	}
}


void bri_draw(char row, char col, unsigned char val)
{

	struct progbar_struct pb;
       // flag=7;	
//	disp_char(ROW_BRI+2,2,172);
//	disp_char(ROW_BRI+2,3,173);
	pb.step = 1;
	pb.range = ABS(BRI_RANGE/BRI_FAC);
	pb.pos = (BRI_RANGE-(val-BRI_OFF))/BRI_FAC;
	pb.val = BRI_RANGE-val;
	draw_progbar(row, col, &pb);
}



void cont_draw(char row, char col, unsigned char val)
{
	struct progbar_struct pb;
	pb.step = 1;
	pb.range = ABS(CONT_RANGE/CONT_FAC);
	pb.pos = (CONT_RANGE-(val-CONT_OFF))/CONT_FAC;
	pb.val = CONT_RANGE-val;
	draw_progbar(row, col, &pb);
}

void col_draw(char row, char col, unsigned char val)
{
	struct progbar_struct pb;
	pb.step = 1;
	pb.range = ABS(COL_RANGE/COL_FAC);
	pb.pos = (val-COL_OFF)/COL_FAC;
	pb.val = val;
	draw_progbar(row, col, &pb);
}

void tint_draw(char row, char col, unsigned char val)
{
	struct progbar_struct pb;
	pb.step = 1;
	pb.range = ABS(TINT_RANGE/TINT_FAC);
	pb.pos = (val-TINT_OFF)/TINT_FAC;
	pb.val = val;
	draw_progbar(row, col, &pb);
}


void reset_draw(char row, char col, unsigned char val)
{
	unsigned char	Data;
	Data	= val;
	Data	= row;
	Data	= col;
}

/*----------------------------------------------------------------------------------------------------*/

void show_menu(void)//显示菜单项目
{
	unsigned char i;
	struct menuitem_struct code *item;

	for (i = 0, item = &items[0]; i < NR_ITEMS; i++, item++) {
		osd_setrowattr(ROW_BRI+i, 0);
		paint_line(ROW_BRI+i, 0, 12, 6);
		disp_str3(ROW_BRI+i, 1, item->title);
		if (!(item->flags & MIF_DOCA)) {
			unsigned char c = item->read(item->addr);
			paint_line(ROW_BRI+i, 12, 18, c == item->defval ? 2 : 4);
			item->draw(ROW_BRI+i, 12, c);
		}
	}
}

void select_item(unsigned char id, bit selected)
{
	struct menuitem_struct code *item = &items[id];
//	paint_line(ROW_BRI+id, 0, strlen(item->title), selected ? 5|8 : 6);
	disp_str2(ROW_BRI+id, 1, item->title, selected ? 5|8 : 6);
	if (item->flags & MIF_DOCA) {
		if (selected) {
			unsigned char c = item->read(item->addr);
			paint_line(ROW_BRI+NR_ITEMS+0, 8, 10, 5);
			paint_line(ROW_BRI+NR_ITEMS+0, 18, 12, 6);
			paint_line(ROW_BRI+NR_ITEMS+1, 0, 30, 6);
			disp_str3(ROW_BRI+NR_ITEMS+0, 8, item->title);
			item->draw(ROW_BRI+NR_ITEMS+1, 1, c);
		} else {
			clear_line(ROW_BRI+NR_ITEMS+0);
			clear_line(ROW_BRI+NR_ITEMS+1);
		}
	}
}
#if 0
void hide_menu(void)
{
	unsigned char i;
	for (i = 0; i < NR_ITEMS; i++) {
		clear_line(ROW_BRI+i);
//		osd_setctrl1(CTRL1_OSDEN|CTRL1_RAMCLR);
//		osd_setctrl1(CTRL1_OSDEN);
	}
	clear_line(ROW_BRI+NR_ITEMS+1);
	clear_line(ROW_BRI+NR_ITEMS+2);
}
#endif
#if 0
void show_video(void)
{
//	paint_line(0, 18, 7, 2);
//	disp_str3(0, 18, PIN_VSEL == 0 ? "VIDEO 1" : "VIDEO 2");
	disp_str2(1, 18, PIN_VSEL == 0 ? "VIDEO 1" : "VIDEO 2", 2);
//	paint_line(1, 19, 4, 6);
//	disp_str3(1, 19, HZ_IND ? "NTSC" : "PAL ");
	disp_str2(2, 19, HZ_IND ? "NTSC" : "PAL ", 6);
}

void hide_video(void)
{
//	paint_line(0, 18, 7, 0);
//	disp_str3(0, 18, "       ");
	disp_str2(1, 18, "       ", 0);
//	paint_line(1, 19, 4, 0);
//	disp_str3(1, 19, "    ");
	disp_str2(2, 19, "    ", 0);
}
#endif
#if 0

bit mtv130_test(unsigned short c)
{
	unsigned char i,j;

	for (i = 0; i < 8; i++) {
		for (j = 0; j < 16; j++) {
			osd_putchar(i, j, c, 0x16);
			c++;
		}
	}
	return 1;
}

#endif
#if 0
void osd_back(void)
{
     	mtv130_puta(WIN1ROW_ROW, WIN1ROW_COL, 0x0f);
	mtv130_puta(WIN1COLS_ROW, WIN1COLS_COL, 0x04);
	mtv130_puta(WIN1COLE_ROW, WIN1COLE_COL,0xf1);
}

#endif
void osd_clear(void)
{
	osd_setctrl1(CTRL1_OSDEN|CTRL1_WENCLR|CTRL1_RAMCLR);
	osd_setctrl1(CTRL1_OSDEN);
}

void osd_init(void)
{
	unsigned char i;
	osd_setctrl1(CTRL1_OSDEN|CTRL1_WENCLR|CTRL1_RAMCLR);
	osd_setctrl1(CTRL1_OSDEN);
	osd_setctrl2(CTRL2_FBKGP);
	for (i = 0; i < 15; i++) {
#ifdef CWS
		osd_setrowattr(i, RACR_CHS|RACR_CWS);
#else
		osd_setrowattr(i, 0);
#endif
	}
	mtv130_puta(HORD_ROW, HORD_COL,5);//12);
	mtv130_puta(VERTD_ROW, VERTD_COL,4);// 4);//6);
	mtv130_puta(CH_ROW, CH_COL, HZ_IND ? 0 : 4);
	mtv130_puta(HORR_ROW, HORR_COL,36);
}

void power_turnon(void)
{
	unsigned char i;
	struct menuitem_struct code *item;


	PIN_POWER = 1;
	mdelay(500);
      	PIN_VSEL = 0;
	PIN_POWLED = 0;

	for (i = 0, item = &items[0]; i < NR_ITEMS; i++, item++) {
		if (item->addr != -1) {
			unsigned char c = item->read(item->addr);
			item->apply(c);
		}
	}

	osd_init();
}




void main(void) using 0
{
	unsigned char id = EDIT_NULL;
	unsigned char val;
	unsigned char hide_expires;
//	unsigned char video_expires;
	unsigned char powoff_expires = 0;
	bit  visiblemenu= 0, auto_powoff = 1;
    bit      backflag=1;
        
	initial();
    power_turnon();
	PIN_POWER = 0;
	PIN_POWLED = 1;

#if 0
{
	unsigned char i;
	bit dummy = 1;
	power_turnon();
	for (i = 0; i < 15; i++)
		osd_setrowattr(i, 0);
	mtv130_test(0);
	i = 0;
	for (; dummy;) {
		if (!key_on) {
			continue;
		}
		i += 128;
		mtv130_test(i);

		key_on = 0;
	}
}
#endif
	//////////////////
//	power_turnon();
	///////////////////

	for (;;) {
		wdt_reset();
		hide_expires = jiffies + HZ*5;
		powoff_expires = xtime.min+10;

		if (key_last == KEY_MENU || key_last == KEY_UP || key_last == KEY_DOWN) {
		    visiblemenu= 1;
			if (id == EDIT_NULL) {
				if (key_last != KEY_MENU)
					goto loop_end;
				id = EDIT_FIRST;
				osd_clear();
				show_menu();
			} else {
				select_item(id, 0);
				if (key_last == KEY_UP) {
					if (id == EDIT_FIRST)
						id = EDIT_LAST;
					else
						--id;
				} else {
					if (id == EDIT_LAST)
						id = EDIT_FIRST;
					else
						++id;
				}
			}
			select_item(id, 1);
			/* add */
			val = items[id].read(items[id].addr);
			goto loop_end;
		}
	
		if ((key_last == KEY_INC || key_last == KEY_DEC) && id != EDIT_NULL) {
			struct menuitem_struct code *item = &items[id];

			val = item->step(val, key_last == KEY_INC);
			item->apply(val);
			if (item->flags & MIF_DOCA)
				item->draw(ROW_BRI+NR_ITEMS+1, 1, val);
			else {
				paint_line(ROW_BRI+id-1, 12, 18, val == item->defval ? 2 : 4);
				item->draw(ROW_BRI+id-1, 12, val);
			}
			if (item->addr != -1)
				at24cxx_writebyte(item->addr, val);
		
		}
loop_end:
		key_on = 0;
	}
}

⌨️ 快捷键说明

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