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

📄 menu.c

📁 这是一个对OSD芯片upd6464A操作的接口测试程序,使用KC51编译
💻 C
字号:
//--------------------------------------
//
//FileName= menu.c
//
//--------------------------------------
#include<string.h>
#include"menu.h"
#include"upd6464a.h"

extern uchar doom_id;
extern uchar protocol;
extern uchar baud;
extern uint  s_id;

uchar code *PROTOCOL_TAB[]={
	"B01",
	"PELCO_D",
	"PELCO_P",
	"FOCURM"
};

uint code BAUDRATE_TAB[]={19200, 9600, 4800, 2400};

uchar	disp_line_buff[25];

//--------------------------------------
//	菜单测试函数
//--------------------------------------
//显示自检菜单
void	disp_init_menu(void)
{
uchar buf[25];
uchar i;
	memset(buf, ' ', sizeof(buf)-1);
	buf[sizeof(buf)-1] =0;
	i =strlen(STR_0_0_0_DOOM_ID);
	memcpy(buf, STR_0_0_0_DOOM_ID, i);
	get_num(3,&buf[i],doom_id);
	disp_one_line(buf,0,0);

	memset(buf, ' ', sizeof(buf)-1);
	buf[sizeof(buf)-1] =0;
	i =strlen(STR_0_0_0_PROTOCOL);
	memcpy(buf, STR_0_0_0_PROTOCOL, i);
	memcpy(buf+i,PROTOCOL_TAB[protocol],strlen(PROTOCOL_TAB[protocol]));
	disp_one_line(buf,1,0);

	memset(buf, ' ', sizeof(buf)-1);
	buf[sizeof(buf)-1] =0;
	i =strlen(STR_0_0_0_BAUDRATE);
	memcpy(buf, STR_0_0_0_BAUDRATE, i);
	get_num(4,&buf[i],BAUDRATE_TAB[baud]);
	disp_one_line(buf,2,0);

	memset(buf, ' ', sizeof(buf)-1);
	buf[sizeof(buf)-1] =0;
	i =strlen(STR_0_0_0_SERIAL);
	memcpy(buf, STR_0_0_0_SERIAL, i);
	get_num(6,&buf[i],s_id);
	disp_one_line(buf,3,0);

	memset(buf, ' ', sizeof(buf)-1);
	buf[sizeof(buf)-1] =0;
	i =strlen(STR_0_0_0_NUMBER);
	memcpy(buf+(CONST_COLUMN_NUMBER_MAX-i)/2, STR_0_0_0_NUMBER, i);
	disp_one_line(buf,4,0);
}

//--------------------------------------
//	菜单显示函数
//--------------------------------------
//显示一行字符串
//输入:
//	str	字符串数组
//使用全局变量	 disp_line_buff[]
void	disp_one_line(uchar *str, uchar line, uchar column)
{
	if(str ==NULL) return;
	memset(disp_line_buff,0,sizeof(disp_line_buff));
	memcpy(disp_line_buff, str, strlen(str));
	change_str_to_disp_code(disp_line_buff,CONST_COLUMN_NUMBER_MAX);
	upd6464A_write_addr_control(line,column);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_OFF, disp_line_buff,CONST_COLUMN_NUMBER_MAX);
}


//将一行字符转换为显示码
void	change_str_to_disp_code(uchar *str, uchar len)
{
	uchar i;
	for(i=0; i<len; i++)
		str[i] =upd6464a_get_disp_code(str[i]);
}

//将num按照ASCII数字格式长度n填充到p中
void	get_num(uchar n, uchar *p, uint num)
{
	for(; n>0; n--)
	{
		*(p+n-1) =(num%10)+'0';
		num /=10;
	}
}

//End Of File

⌨️ 快捷键说明

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