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

📄 test.c

📁 液晶程序,用汇编语言编写,用于单片机开发中
💻 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 + -