📄 test.c
字号:
#include <REG51.H>
sbit P0_0=P0^0;
sbit rs = P1^0; //H=data; L=command;
sbit rw = P1^1; //H=read; L=write;
sbit e = P1^2; //input enable;
sbit busy=P2^7; //lcd busy bit
#define com_expand_command 0x40
#define base_command 0x34
#define oppsite_cursor_dec 0x10
#define open_display_oppsite 0x0D
#define clear_screen 0x01
/*------下面的这些反白指令没有什么用处!--------*/
#define oppsite_first_line 0x04
#define oppsite_second_line 0x05
#define oppsite_third_line 0x06
#define oppsite_forth_line 0x07
/*------上面的这些反白指令没有什么用处!--------*/
/*-----键盘扫描码定义------------------*/
#define key_down_1 14 //第一键
#define key_down_2 13 //第二键
#define key_down_3 11 //
#define key_down_4 7 //
#define k1 14
#define k2 13
#define K3 11
#define K4 7
#define OK_Down 14
#define Up_Down 11
#define Down_Down 7
/*-----键盘扫描码定义------------------*/
/*-------------屏幕代号定义区-----------*/
#define Main_menu 4
#define Wave_Choose_menu 5
#define Fruequency_Choose_menu 6
#define Wave_range 7
#define comm 0
#define dat 1
#define uchar unsigned char
uchar code screen_data[][64]={
{
"淮北煤炭师范学院"
"03级电子信息 2班"
" 石玮松 "
" 毕业设计 "},//第一屏
///////////////////////////
{" "
" "
" DDS信号发生器 "
" "},//第二屏
//////////////////////////
{"指导老师: 周正"
" "
" 候俊钦"
" "},//第三屏
////////////////////////
{" 系统启动中 "
"请您保护国有资产"
"您请稍候********"
" "},//第四屏
////////////////////////
{"波形 频率 幅度"
" 欢迎 使用 "
"返回 确认"
"煤师院信号发生器"},//第五屏
///////////////////////
{"正弦波 三角波"
"返回 确认"
"方波 "
"煤师院信号发生器"////第六屏
},
{"频率: HZ"
" 欢迎 使用 "
"返回 确认"
"煤师院信号发生器"////第七屏
},
{"幅度: MV"
" 欢迎 使用 "
"返回 确认"
"煤师院信号发生器" ////第八屏
}
};
//函数声明
void chk_busy (void);
void voice_function();
void Set_Oppsite_Point(uchar posituin);
void Down_Down_function();
void Up_Down_function();
void Ok_Down_function();
void Shown_Main_menu();//显示主菜单
/*-----键盘变量定义--------*/
unsigned char KEY_WORD;
bit KEY_DOWN;
uchar Current_screen_num;
uchar Currrent_Position;//保存光标所在的位置
/*------键盘扫描也是中T0中断函数--------*/
void inter_timer0() interrupt 1
{
unsigned char b;
TR0=0;
P3=0xff;
b=P3;
b=b&0x0f;
if(b!=15)
{
KEY_DOWN=1;
KEY_WORD=b;
voice_function();
}
while(b!=15)
{
b=P3;
b=b&0x0f;
}
TR0=1;
}
/*------发音子程序-------*/
void voice_function()
{
int c,e,d;
for(d=0;d<1;d++)
{
for (c=0;c<50;c++)
for(e=0;e<100;e++)
P0_0=0;
for (c=0;c<50;c++)
for(e=0;e<100;e++)
P0_0=1;
}
}
/*------------写LCD子程序----------*/
void wr_lcd (unsigned char dat_comm,unsigned char content)
{
unsigned char i;
chk_busy ();
if(dat_comm)
{
rs=1; //data
rw=0; //write
}
else
{
rs=0; //command
rw=0; //write
}
P2=content; //本人用的上P2口输出数据
e=1;
for(i=0;i<5;i++)
{
; //这里是用来迤时间的这是我加的我
//是怕这个家伙太快了不会液晶反应不过来
}
e=0;
}
void chk_busy (void)
{
P2=0xff;
rs=0;
rw=1;
e =1;
while(busy==1);
e =0;
}
/*--------初始化定时器----------*/
void inicial_timer () {
TMOD=0x1;
EA=1;
TR0=1;
ET0=1;
}
/*------------显示一个整屏----------*/
void display_all_screen (uchar screen_num)
{
uchar counter;
wr_lcd (comm,clear_screen);//这里是写入清屏指令
wr_lcd (comm,0x80);
for(counter=0;counter<64;counter++)
{
wr_lcd (dat,screen_data[screen_num][counter]);
}
}
void delay_ms(unsigned int ms)////延时毫秒级的
{ unsigned int i,j;
uchar timer;
for(i=0;i<ms;i++)
for(j=0;j<30;j++)
{ for(timer=10;timer>1;timer--)
{
;
}
}
}
/*------键盘响应函数----------*/
void respond_key_down()
{
if(KEY_DOWN)
{
KEY_DOWN=0;
switch(KEY_WORD)
{
case Up_Down:
Up_Down_function();
break;
case Down_Down:
Down_Down_function();
break;
case OK_Down:
Ok_Down_function();
break;
default:
break;
}
};
// switch(Current_screen_num)
}
/*------键盘响应函数----------*/
void Down_Down_function()
{
switch(Current_screen_num)
{
case Main_menu:
if(Currrent_Position==1)
{
wr_lcd (comm,0x84);
Currrent_Position=2; //
//voice_function();
return;
}
if(Currrent_Position==2)
{
wr_lcd (comm,0x87);
Currrent_Position=3;
return;
}
if(Currrent_Position==3)
{
voice_function();
return;
}
case Wave_Choose_menu:
if(Currrent_Position==1)
{
wr_lcd (comm,0x87);
Currrent_Position=2; //
//voice_function();
return;
}
if(Currrent_Position==2)
{
wr_lcd (comm,0x91);
Currrent_Position=3;
return;
}
if(Currrent_Position==3)
{
wr_lcd (comm,0x89);
Currrent_Position=4;
return;
}
if(Currrent_Position==4)
{
voice_function();
return;
}
default:
break;
}
}
void Up_Down_function()
{
switch(Current_screen_num)
{
case Main_menu:
if(Currrent_Position==1) //在主菜单下位置1说明是要进入波形选择菜单
{
//wr_lcd (comm,0x84);
//Currrent_Position=2; //
voice_function();//不可能再上去了故叫一声
return;
}
if(Currrent_Position==2)
{
wr_lcd (comm,0x81);
Currrent_Position=1;
return;
}
if(Currrent_Position==3)
{
wr_lcd (comm,0x84);
Currrent_Position=2;
return;
}
case Wave_Choose_menu:
if(Currrent_Position==1) //在波形选择单下位置1说明是要进入波形选择菜单
{
//wr_lcd (comm,0x84);
//Currrent_Position=2; //
voice_function();//不可能再上去了故叫一声
return;
}
if(Currrent_Position==2)
{
wr_lcd (comm,0x82);
Currrent_Position=1;
return;
}
if(Currrent_Position==3)
{
wr_lcd (comm,0x87);
Currrent_Position=2;
return;
}
if(Currrent_Position==4)
{
wr_lcd (comm,0x91);
Currrent_Position=3;
return;
}
default:
break;
}
}
void Ok_Down_function()
{
switch(Current_screen_num)
{
case Main_menu:
if(Currrent_Position==1)
{
display_all_screen(Wave_Choose_menu);
Current_screen_num=Wave_Choose_menu;
Currrent_Position=1;
wr_lcd (comm,0x0D); /*开显示,不关游标*/
wr_lcd (comm,0x82);
return;
}
if(Currrent_Position==2)
{
display_all_screen(Fruequency_Choose_menu);
Current_screen_num=Fruequency_Choose_menu;
Currrent_Position=1;
wr_lcd (comm,0x0D); /*开显示,不关游标*/
wr_lcd (comm,0x86);
return;
}
if(Currrent_Position==3)
{
display_all_screen(Wave_range);
Current_screen_num=Wave_range;
Currrent_Position=1;
wr_lcd (comm,0x0D); /*开显示,不关游标*/
wr_lcd (comm,0x86);
return;
}
case Wave_Choose_menu:
Shown_Main_menu(); //现在这些地方不写东西到以后再写进去
break;
case Fruequency_Choose_menu:
Shown_Main_menu();
break;
case Wave_range:
Shown_Main_menu();
break;
default:
break;
}
}
void Shown_Main_menu()
{
display_all_screen(Main_menu);
wr_lcd (comm,0x0D); /*开显示,不关游标*/
wr_lcd (comm,0x81);
Currrent_Position=1;
Current_screen_num=Main_menu;
}
main()
{
inicial_timer ();
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0D); /*开显示,不关游标*/
wr_lcd (comm,0x80); //这是置AC为0;
for(Current_screen_num=0;Current_screen_num<5;Current_screen_num++)
{
display_all_screen(Current_screen_num);
delay_ms(1000);
}
//voice_function();
Shown_Main_menu();
while(1)
{
respond_key_down();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -