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

📄 main.c

📁 是单片机上液晶显示程序:带中文字库的LM3033:控制器是ST7920
💻 C
字号:
#include<AT89X51.H>
#include "INTRINS.H"

#define  LCD_BUS  P0
sbit RS= P2^5;
sbit RW=P2^6;
sbit E =P2^7;
// sbit pcb=P1^3;
 // sbit RS= P1^0;
 //sbit RW=P1^1;
 //sbit E =P1^2;

//extern  unsigned char code str[14][3];//={":0",":1",":2",":3",":4",":5",":6",":7",":8",":9"};


 


    ////////////////////////////////////

 ////////////////////////////////////
   
    void delay(unsigned int t) ;             //延时t倍///

    unsigned char  check_bf(unsigned char Address_AC);   //LCD标志位查询//
    void  write_data(unsigned char dispdata);    //写数据//
    void write_comand(unsigned char cmdcode);    //写命令//
     
    void lcd_init();                           ///LCD初始化//
    void stringdisp (unsigned char  code *str,unsigned char adress); //显示字符串//

	void   data_disp(unsigned int disp_data,unsigned char adress);       //数字显示
	 void disp_graph();						    //总界面:教室灯控系统
	 void disp_graph_password();                //密码输入登录界面
	 void disp_graph_set();					    //系统设置总界面
/////////////////////////////////////////////////////

    unsigned char  code str[]="  教室灯控系统  ";	  //登陆总界面
    unsigned char  code str1[]="  ●登陆界面  →";
//	unsigned char  code str2[]="  ●设置界面  →";

   unsigned char  code str_password1[]="请输入登录密码:";	 //输入密码界面
   unsigned char  code str_password2[]="  ******  ";
   unsigned char  code str_password3[]="   1 2 3 4 5 6  ";
   unsigned char  code str_password4[]="     6 7 8 9    ";

   unsigned char  code str_set1[]="设置选项:    ";	  //设置总界面
   unsigned char  code str_set2[]="●密码设置    →";
   unsigned char  code str_set3[]="●系统时间设置→";
   unsigned char  code str_set4[]="●定时时间设置→";

   unsigned char code str3[]="1234567891234567";

// unsigned char  code str12[14][3]={"1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","11","12","13","14",};

//////////////////////////////////////////////////////////////////
 void main()
 {
   unsigned char m;
  
  //init591();
 // pcb=1;
  lcd_init();
  LCD_BUS=0X00;
 //disp_graph();			  //登陆总界面
  disp_graph_password();
  // disp_graph_set();


  //stringdisp(&str3,0x80);   ///////显示开机画面//////

  //write_comand(0x85);
 // stringdisp("1",0x88);
  // data_disp(198,0x98);	//数字显示




 /* m=check_bf();		//测试LCD屏状态查询中AC的返回值是否正确
  delay(10);
  if(m=0x87)
  {
// write_comand(0x30);
 write_comand(0x88);
 write_data('1'); }
 else
  {
 //write_comand(0x30);
 write_comand(0x88);
 write_data('0'); 
    }	 */

 delay(100);
   }

/**********************************************************************
函数原型: void  delay(unsigned int t)   
入口参数:
		   t  :  延时程序t倍的100us
出口参数:   无
返 回 值:  无      
说    明: LCD液晶延时子程序t倍100us
**********************************************************************/ 
///////////////////延时程序/////////////////////////////////////

  void  delay(unsigned int t)          //延时程序t倍100us
  {
    unsigned char j;
    unsigned int  i;
    for(i=0;i<t;i++)
    for(j=0;j<29;j++);

}
/***********************************************************************
函数原型:check_bf(unsigned char Address_AC)
入口参数:无      
出口参数:无
          
返回值: 
      Address_AC:当前状态的地址(一个无符号字符)
功能说明:LCD液晶的状态BF查询和DDRAM的地址查询
************************************************************************/
////////////////////////////查询BF///////////////////////////////////////

unsigned char check_bf(unsigned char Address_AC)
  {
   unsigned char  BF;         ////忙标志位,BF是某字节的一位,是D7位,如果为1,则忙//////
   LCD_BUS=0x00 ;
   do
    {
	 RS=0;
     RW=1;
     E=1;
     BF=LCD_BUS;              /////此处BF定义不是一个位,而是一个字节,不过在处理中代表标志位bf///
     _nop_();
     E=0;
	 Address_AC=BF;
     BF=BF&0x80;               ////取出BF////
     }while( BF!=0x00 ) ;                 //////判断是否忙?///////
	 Address_AC=Address_AC&0x7f;  ///读出DDRAM的地址指针AC的值
     delay(5) ;
	 return(Address_AC);
  }    
/**********************************************************************
函数原型:write_comand(unsigned char cmdcode)
入口参数:
		   cmdcode  :  命令字 (0x01:清屏)
出口参数:   无
返 回 值:  无      
说    明: 对lcd写命令字
**********************************************************************/ 
/////////////////////////写命令子程序//////////////////////////////////

 void write_comand(unsigned char cmdcode)
 {
   check_bf();
   RS=0;
   RW=0;
   E=1;
   LCD_BUS=cmdcode;
   _nop_();
   E=0;
   delay(5) ;
 }
/***********************************************************************
函数原型:write_data(unsigned char dispdata)
入口参数:
          dispdata:写入lcd要显示内容
出口参数:无
返回值:  无
功能说明:LCD液晶的数据写入指令
************************************************************************/
//////////////////////////写数据子程序///////////////////////////////////

void  write_data(unsigned char dispdata)
  {
   check_bf();
   RS=1;
   RW=0;
   E=1;
   LCD_BUS=dispdata;
   _nop_();
   E=0;
   }
/******************************************************************
 函数:lcd_init()
入口参数:无
出口参数:无
返回值:无
功能说明:LCD液晶的初始化
********************************************************************/
 /////////////////////////液晶初始化////////////////////////////////
void  lcd_init()
 {
    delay(100);
    write_comand(0x30);                   //8并,基本指令
	delay(10);
    write_comand(0x30);                  //8并,
    delay(5);

    // write_comand(0x0c);                  //整体显示开,游标关不反白
   //  write_comand(0x0d);                  //整体显示开,游标关反白
    write_comand(0x0f);                  //整体显示开,游标开反白
	delay(10);

    write_comand(0x01);                  //清屏
	delay(5);

	write_comand(0x06);                  //游标移动方向及地址AC的增减方式
  
 }
/***********************************************************************
函数原型:stringdisp(unsigned char code *str,unsigned char adress)
入口参数:
              str:要写入lcd显示的字符串数组
		  adress :要设定字符串在液晶显示中地址
出口参数:无
返回值:  无
功能说明:LCD液晶的字符串显示子程序
************************************************************************/
///////////////////////////字符串显示////////////////////////////////////

void  stringdisp(unsigned char code *str,unsigned char adress)       //字符串显示
  {
    write_comand(0x30);
    write_comand(adress);
    while(*str>0)
     {
      write_data(*str) ;
      str++;
      delay(1);
      }
   }
 
 ////////////////////////

/*
 void  data_disp(unsigned int disp_data,unsigned char adress)       //数字显示
                                    //此处disp_data类型改变***************************
  {
    unsigned char   data_code[10]={'0','1','2','3','4','5','6','7','8','9'};
    unsigned char   data_every[3]={0,0,0};
    unsigned char   disp_data_code[5]={'H',0,'.',0,0,};
    unsigned char     i;
    unsigned int  every_data;
    for(i=0;i<3;i++)
     {
       every_data=disp_data%10;
       disp_data=disp_data/10;
       if(i==0)
       {
       data_every[i]=every_data;
       disp_data_code[i+1]=data_code[every_data];
        }
       else
       {
       data_every[i]=every_data;
       disp_data_code[i+2]=data_code[every_data];
        }
       }



     i=2;
    while(data_every[i]==0)
     {
      i--;
      }
      i+=3;

    write_comand(0x30);
    write_comand(adress);


   while(i>=1)
    {
     i--;
    write_data(disp_data_code[i]) ;

    delay(1);
   }
 }	*/		
 /////////////clear_string//////////////////////////  此处未用到,可适当增减
/* void string_clear(unsigned char space_data,adress)
{
  unsigned char space=' ' ;
 write_comand(0x30);
  write_comand(adress);
  while(space_data>0)
  {

   write_data(space) ;
   space_data--;
   delay(1);
  }
  }  */
 
/***********************************************************************
函数原型:void disp_graph()
入口参数:
出口参数:无
返回值:  无
功能说明:教室节能灯控登陆界面显示子程序
************************************************************************/
///////////////////////////系统登陆界面///////////////////////////////////
 void disp_graph()
  {
    lcd_init();
    stringdisp(&str,0x80);       //////总界面:教室灯控系统////////
	delay(100);
    stringdisp(&str1,0x88);     //////总界面:登陆界面////////////
	delay(100);		
//	stringdisp(&str2,0x88);     //////总界面:设置界面////////////
//    delay(100);	
    write_comand(0x8f);


//	write_comand(0x34);			////设置为全反白显示
   //	write_comand(0x05);
     }
/***********************************************************************
函数原型:void disp_graph_password()
入口参数:
出口参数:无
返回值:  无
功能说明:教室节能灯控密码输入显示子程序
************************************************************************/
///////////////////////////密码输入界面///////////////////////////////////
 void disp_graph_password()
  {
    lcd_init();
    stringdisp(&str_password1,0x80);       //////密码输入:请输设置密码////////
	delay(100);
    stringdisp(&str_password2,0x90);     //////总界面:登陆系统////////////
    delay(100);
	stringdisp(&str_password3,0x88); 
	delay(100); 
	stringdisp(&str_password4,0x98); 
	 
 	write_comand(0x98);		

   //	write_data('A');
  //  write_comand(0x9f);
	

	//write_comand(0x34);			////设置为全反白显示
   	//write_comand(0x05);
     }

 /// ****************************************////
 /***********************************************************************
函数原型:void disp_graph_set()
入口参数:
出口参数:无
返回值:  无
功能说明:教室节能灯控设置总界面显示子程序
************************************************************************/
///////////////////////////设置总界面///////////////////////////////////
 void disp_graph_set()
  {
    lcd_init();
    stringdisp(&str_set1,0x80);     ///////设置总界面////////
	delay(100);
    stringdisp(&str_set2,0x90);     //////设置总界面:密码设置////////////
    delay(100);						
	stringdisp(&str_set3,0x88); 	//////设置总界面:时钟时间设置///////////
	delay(100); 
	stringdisp(&str_set4,0x98); 	//////设置总界面:定时时间设置///////////
	 
 	write_comand(0x9f);		

   //	write_data('A');
  //  write_comand(0x9f);
	

	//write_comand(0x34);			////设置为全反白显示
   	//write_comand(0x05);
     }

 /// ****************************************////

⌨️ 快捷键说明

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