📄 menu.c
字号:
//模块:Menu.C
//功能:菜单模块
//晶振:24.000MHz
//芯片: STC12C5412AD
//版本:V1.0.0
//设计:魏广寅
//日期:2007.4.10
//--------------------------------------------------------------------
#include"STC12C5412AD.h"
#define size_of_keybd_menu 8
#define uint unsigned int
#define uchar unsigned char
sbit sel_1=P1^6;
sbit sel_10=P1^4;
sbit sel_100=P3^4;
sbit f_in=P3^5;
uchar temp_l,temp_h;
uchar i=0;
uint temp0=0x30,temp1=0x30,temp2=0x30,temp3=0x30,temp4=0x30;
uchar keyfuncindex=0;
void(*keyfuncptr)();
void beep(uint time);
uchar bdata gate=4;
uchar code tab[16]=
{'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
extern void get_value();
extern void AD_init(uchar AD_port_sel );
extern void pwm();
extern void bin_to_hex();
extern unsigned char code x0[]; // 请
extern unsigned char code x1[]; // 选
extern unsigned char code x2[]; // 择
extern unsigned char code x3[]; // 工
extern unsigned char code x4[]; // 作
extern unsigned char code x5[]; // 模
extern unsigned char code x6[]; // 式
extern unsigned char code x7[]; // 频
extern unsigned char code x8[]; // 率
extern unsigned char code x9[]; // 计
extern unsigned char code x10[];// 示
extern unsigned char code x11[];// 波
extern unsigned char code x12[];// 器
extern unsigned char code x13[];// 测
extern unsigned char code x14[];// 量
extern unsigned char code x15[];// 红
extern unsigned char code x16[];// 外
extern unsigned char code x17[];// 分
extern unsigned char code x18[];// 析
extern unsigned char code x19[];// 固
extern unsigned char code x20[];// 件
extern unsigned char code x21[];// 版
extern unsigned char code x22[];// 本
extern unsigned char code x23[];// 信
extern unsigned char code x24[];// 息
extern unsigned char code x25[];// 程
extern unsigned char code x26[];// 式
extern unsigned char code x27[];// 设
extern unsigned char code x28[];// 计
extern unsigned char code x29[];// 魏
extern unsigned char code x30[];// 广
extern unsigned char code x31[];// 寅
extern unsigned char code x32[];// 贵
extern unsigned char code x33[];// 大
extern unsigned char code x34[];// 电
extern unsigned char code x35[];// 科
extern unsigned char code x36[];// 欢
extern unsigned char code x37[];// 迎
extern unsigned char code x38[];// 使
extern unsigned char code x39[];// 用
extern unsigned char code x40[];// 多
extern unsigned char code x41[];// 功
extern unsigned char code x42[];// 能
extern void lcd_init();
extern void delay(uint time);
extern void dis_one_zi(uchar x_add,uchar y_add,uchar code *po,bit back_flag,bit char_moudle);
extern void dis_one_char(uchar x,uchar y,uchar asc_num,bit b_flag);
extern wave();
extern void dis_cls(void);
extern void freq();
sbit beep_port=P1^5;
//--------------------------------------------------------------------
void d0_3(uchar sel)
{
dis_cls();
dis_one_char(0,0,'1',1); //1. 50MHz频率计
dis_one_char(0,1,'.',1);
dis_one_char(0,2,' ',1);
dis_one_char(0,3,'5',1);
dis_one_char(0,4,'0',1);
dis_one_char(0,5,'M',1);
dis_one_char(0,6,'H',1);
dis_one_char(0,7,'z',1);
dis_one_zi(0,4,x7,1,1);
dis_one_zi(0,5,x8,1,1);
dis_one_zi(0,6,x9,1,1);
dis_one_char(1,0,'2',1); //2. 15KHz示波器
dis_one_char(1,1,'.',1);
dis_one_char(1,2,' ',1);
dis_one_char(1,3,'1',1);
dis_one_char(1,4,'5',1);
dis_one_char(1,5,'K',1);
dis_one_char(1,6,'H',1);
dis_one_char(1,7,'z',1);
dis_one_zi(1,4,x10,1,1);
dis_one_zi(1,5,x11,1,1);
dis_one_zi(1,6,x12,1,1);
dis_one_char(2,0,'3',1); //3. PWM红外分析
dis_one_char(2,1,'.',1);
dis_one_char(2,2,' ',1);
dis_one_char(2,3,'P',1);
dis_one_char(2,4,'W',1);
dis_one_char(2,5,'M',1);
dis_one_zi(2,3,x15,1,1);
dis_one_zi(2,4,x16,1,1);
dis_one_zi(2,5,x17,1,1);
dis_one_zi(2,6,x18,1,1);
dis_one_char(3,0,'4',1); //4. SOW版本信息
dis_one_char(3,1,'.',1);
dis_one_char(3,2,' ',1);
dis_one_char(3,3,'S',1);
dis_one_char(3,4,'O',1);
dis_one_char(3,5,'W',1);
dis_one_zi(3,3,x21,1,1);
dis_one_zi(3,4,x22,1,1);
dis_one_zi(3,5,x23,1,1);
dis_one_zi(3,6,x24,1,1);
switch (sel)
{
case 0:
{
dis_one_char(0,0,'1',0); //1. 50MHz频率计
dis_one_char(0,1,'.',0);
dis_one_char(0,2,' ',0);
dis_one_char(0,3,'5',0);
dis_one_char(0,4,'0',0);
dis_one_char(0,5,'M',0);
dis_one_char(0,6,'H',0);
dis_one_char(0,7,'z',0);
dis_one_zi(0,4,x7,0,1);
dis_one_zi(0,5,x8,0,1);
dis_one_zi(0,6,x9,0,1);
dis_one_char(0,14,0x7f,1);
dis_one_char(0,15,0x7f,1);
break;}
case 1:
{
dis_one_char(1,0,'2',0); //2. 15KHz示波器
dis_one_char(1,1,'.',0);
dis_one_char(1,2,' ',0);
dis_one_char(1,3,'1',0);
dis_one_char(1,4,'5',0);
dis_one_char(1,5,'K',0);
dis_one_char(1,6,'H',0);
dis_one_char(1,7,'z',0);
dis_one_zi(1,4,x10,0,1);
dis_one_zi(1,5,x11,0,1);
dis_one_zi(1,6,x12,0,1);
dis_one_char(1,14,0x7f,1);
dis_one_char(1,15,0x7f,1);
break;}
case 2:
{
dis_one_char(2,0,'3',0); //3. PWM红外分析
dis_one_char(2,1,'.',0);
dis_one_char(2,2,' ',0);
dis_one_char(2,3,'P',0);
dis_one_char(2,4,'W',0);
dis_one_char(2,5,'M',0);
dis_one_zi(2,3,x15,0,1);
dis_one_zi(2,4,x16,0,1);
dis_one_zi(2,5,x17,0,1);
dis_one_zi(2,6,x18,0,1);
dis_one_char(2,14,0x7f,1);
dis_one_char(2,15,0x7f,1);
break;}
case 3:
{
dis_one_char(3,0,'4',0); //4. SOW版本信息
dis_one_char(3,1,'.',0);
dis_one_char(3,2,' ',0);
dis_one_char(3,3,'S',0);
dis_one_char(3,4,'O',0);
dis_one_char(3,5,'W',0);
dis_one_zi(3,3,x21,0,1);
dis_one_zi(3,4,x22,0,1);
dis_one_zi(3,5,x23,0,1);
dis_one_zi(3,6,x24,0,1);
dis_one_char(3,14,0x7f,1);
dis_one_char(3,15,0x7f,1);
break;}
}
}
//--------------------------------------------------------------------
void d0(void)
{
d0_3(0);
}
//--------------------------------------------------------------------
void d1(void)
{
d0_3(1);
}
//--------------------------------------------------------------------
void d2(void)
{
d0_3(2);
}
//--------------------------------------------------------------------
void d3()
{
d0_3(3);
}
//--------------------------------------------------------------------
void d4()
{
dis_cls();
pwm();
}
//--------------------------------------------------------------------
void d5()
{
dis_cls();
dis_one_zi(0,0,x19,1,1);
dis_one_zi(0,1,x20,1,1);
dis_one_char(0,4,':',1);
dis_one_char(0,5,' ',1);
dis_one_char(0,6,'V',1);
dis_one_char(0,7,'1',1);
dis_one_char(0,8,'.',1);
dis_one_char(0,9,'0',1);
dis_one_char(0,10,'.',1);
dis_one_char(0,11,'0',1);
dis_one_zi(1,0,x25,1,1);
dis_one_zi(1,1,x26,1,1);
dis_one_zi(1,2,x27,1,1);
dis_one_zi(1,3,x28,1,1);
dis_one_char(1,8,':',1);
dis_one_zi(2,4,x32,1,1);
dis_one_zi(2,5,x33,1,1);
dis_one_zi(2,6,x34,1,1);
dis_one_zi(2,7,x35,1,1);
dis_one_zi(3,4,x29,1,1);
dis_one_zi(3,5,x30,1,1);
dis_one_zi(3,6,x31,1,1);
}
//--------------------------------------------------------------------
void d6()
{
dis_cls();
freq();
}
//--------------------------------------------------------------------
void d7()
{
dis_cls();
wave();
}
//--------------------------------------------------------------------
typedef struct
{
uchar keystateindex;
uchar keydnstate;
uchar keyupstate;
uchar keycrstate;
void(*currentoperate)();
} kbdtabstruct;
//--------------------------------------------------------------------
kbdtabstruct code keytab[size_of_keybd_menu]=
{ //第一行表示在0级菜单时按下向下键则转到1级菜单
//按下向上键则转1级菜单,按下回车键则转5级菜单
// 下 上 回车
{ 0, 1, 3, 6, (* d0)},
{ 1, 2, 0, 7, (* d1)},
{ 2, 3, 1, 4, (* d2)},
{ 3, 0, 2, 5, (* d3)},
{ 4, 2, 2, 2, (* d4)},//PWM分析子程序
{ 5, 3, 3, 3, (* d5)},//版本信息
{ 6, 0, 0, 0, (* d6)},//频率计子程序
{ 7, 0, 1, 1, (* d7)},//示波器子程序
};
//--------------------------------------------------------------------
void getkeyinput(void)
{
uchar key_value,temp;
re: temp=P3;
temp|=0x03;
P3=temp;
key_value=P3&0x03;
delay(50000);
//0:下键 2:中键 1:上键
switch(key_value)
{
case 1:
{
keyfuncindex=keytab[keyfuncindex].keycrstate;
beep(6500);
break;
}
case 2:
{
keyfuncindex=keytab[keyfuncindex].keyupstate;
beep(6500);
break;
}
case 0:
{
keyfuncindex=keytab[keyfuncindex].keydnstate;
beep(6500);
break;
}
default:
goto re;
}
keyfuncptr=keytab[keyfuncindex].currentoperate;
(*keyfuncptr)();
delay(65535);
delay(65535);
}
//--------------------------------------------------------------------
void beep(uint time)
{
beep_port=0;
delay(time);
delay(time);
delay(time);
delay(time);
beep_port=1;
}
//--------------------------------------------------------------------
void sys_auto_check(void)
{
uchar xx,c=3;
dis_one_zi(0,2,x36,1,1);
dis_one_zi(0,3,x37,1,1);
dis_one_zi(0,4,x38,1,1);
dis_one_zi(0,5,x39,1,1);
dis_one_zi(1,1,x40,1,1);
dis_one_zi(1,2,x41,1,1);
dis_one_zi(1,3,x42,1,1);
dis_one_zi(1,4,x7,1,1);
dis_one_zi(1,5,x8,1,1);
dis_one_zi(1,6,x9,1,1);
while(--c!=0)
{
for(xx=3;xx<13;xx++)
{
dis_one_char(2,xx-1,'>',1);
dis_one_char(2,xx ,'>',1);
dis_one_char(2,xx+1,'>',1);
delay(50000);
delay(50000);
dis_one_char(2,xx-1,' ',1);
dis_one_char(2,xx ,' ',1);
dis_one_char(2,xx+1,' ',1);
}
}
beep(60000);
}
//--------------------------------------------------------------------
void main(void) using 0
{
beep_port=1;
EA=0;
SP=0x7f;
lcd_init();
f_in=1;
sys_auto_check();
AD_init(7);
keyfuncindex=0;
d0();
while(1)
{
getkeyinput();
}
}
//--------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -