📄 menu.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 + -