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

📄 main.c

📁 12864程序51单片机控制12864液晶(程序+仿真电路)
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************/
/*********************************************************************/
typedef struct { 
                char    hour;
                char    minute;
                char    second;
} time;
/*****************************/
/*******************************/
typedef struct { 
                char    year;
                char    month;
                char    day;
} date;
/******************************/
time now={00,00,00},display;
int   Aminute;
date today={17,04,22},tmpday; 
char	ABC ;
char	ABCD;
 unsigned char gx,gy;


void initFlag(void)
{
	P0 = 0xFF;			// 输出端口初始化
  	P2 = 0xFF;			// 输出端口初始化
  	P1 = 0xFF;			// 输入端口初始化
  	P3 = 0xFF;			// 输入端口初始化		
    now.hour = 24;
    now.minute =00;
    now.second =00; 
}
/**************************************************/
/***************检测忙****************************/
/************************************************/
void check_GLCD_busyflag(void)
{
       unsigned char   x;
        GLCD_R_W=1;
        GLCD_D_I=0;
        GLCD_ENABLE=1;
        P2=0x00;
        do 
		{
                x=P2 && 128;
        } while(x);
		  GLCD_ENABLE=0;
        GLCD_D_I=1;
        GLCD_R_W=1;
}
/********************写命令**********************/
void write_GLCD_command(unsigned command)
{
			GLCD_R_W = 0;
         	GLCD_D_I = 0;
        	GLCD_ENABLE=1;
        	P2=command;
        	GLCD_ENABLE=0;
        	GLCD_D_I=1;
        	GLCD_R_W=1;
        	check_GLCD_busyflag();   //检测忙
}
/********************写数据*********************/
void write_GLCD_data(unsigned GLCDdata)
{
	  		GLCD_R_W=0;
        	GLCD_D_I=1;
        	GLCD_ENABLE=1;
        	P2=GLCDdata;
        	GLCD_ENABLE=0;
        	GLCD_D_I=0;
        	GLCD_R_W=1;
        	check_GLCD_busyflag(); //检测忙
}
/*********************清屏**********************/	
void clear_GLCD()
{
        int     i,j;
        GLCD_CS1=1;
        GLCD_CS2=1;
        write_GLCD_command(GLCD_ON);    
        write_GLCD_command(GLCD_START_LINE_0);
        for(i=0;i<8;i++)
        {
                write_GLCD_command(SET_PAGE+i); 
                write_GLCD_command(SET_Y_ADDRESS_0);    
                for(j=0;j<64;j++)
                write_GLCD_data(0);
        }               
}
/*******************显示一个圆形****************/
void show_pattern(unsigned char page,unsigned char y,unsigned char *pattern,unsigned char len)
{
        int i;
        write_GLCD_command(SET_PAGE+page);      
        write_GLCD_command(SET_Y_ADDRESS_0+y);  
        for(i=0;i<len;i++)
        {
                write_GLCD_data(*pattern);
                pattern++;
        }
}
/*********************显示一个字****************/
void display_GLCD_data(unsigned char *p)
{			
          if (gx<64) 
				{
          		GLCD_CS1=1;
          		GLCD_CS2=0;
          		show_pattern(gy,gx,p,8);
          		show_pattern(gy,gx+8,p+8,8);
          		show_pattern(gy+1,gx,p+16,8);
          		show_pattern(gy+1,gx+8,p+24,8);
        		} 
		else
        		{
          		GLCD_CS1=0;
          		GLCD_CS2=1;
          		show_pattern(gy,gx-64,p,8);
          		show_pattern(gy,gx-56,p+8,8);

          		show_pattern(gy+1,gx-64,p+16,8);
          		show_pattern(gy+1,gx-56,p+24,8);
        		}
        gx=gx+16;
}
void display_GLCD_string(unsigned char *p,int len)
{
         int i;
        	for(i=0;i<len;i++)
                display_GLCD_data((p+32*i));
}

void display_GLCD_numberAB(char number)
{
        int x,y;
        x=number/10;
        y=number%10;
        display_GLCD_data(digit[x]);
        display_GLCD_data(digit[y]);
}

void display_GLCD_numberB(char number)
{
         unsigned int x,y,z,j;		
        x=(number/1000)%10;
        y=(number/100)%10;
		z=(number/10)%10;
		j=number%10;
        display_GLCD_data(digit[x]);
        display_GLCD_data(digit[y]);
		display_GLCD_data(digit[z]);
        display_GLCD_data(digit[j]);
}

void gotoxy(unsigned x,unsigned y)
{
        gy=y;
        gx=x;
}

void display_time(time dispaly_time)
{
        gotoxy(0,4);
        display_GLCD_numberAB(dispaly_time.hour);
        display_GLCD_data(comma);
        display_GLCD_numberAB(dispaly_time.minute);
        display_GLCD_data(comma);
        display_GLCD_numberAB(dispaly_time.second);
}

void display_time1(int F)
{
        gotoxy(48,6);        
     	display_GLCD_numberB(F);  
}


void initTimer (void)
{
 	timer0_tick=0;
	EA=0; 
 	TMOD=0x11;
	TH0=-9460/256;
	TL0=-9460%256;         //初始化计数器初值

	PT0=1;
	TR0=1;
	ET0=1;
 	
    EA =1;
}

void timer0 (void) interrupt 1
{	 
	TR0=0;
    TH0=-9460/256;
	TL0=-9460%256;         //初始化计数器初值	
    TR0=1;
    timer0_tick++;
	if (timer0_tick==100)
   {
        timer0_tick=0;
		/***********************************************************/		         
        	if(now.second==0)
           		{
			   		now.second=59;            
            		if (now.minute==0) 
              			{ 
               				now.minute=59;              	
							if (now.hour==0)
                  				{
									now.hour = 24;
        							now.minute =00;
        							now.second =00; 									 
                  				}else now.hour--;
               			}else now.minute--;            	  
           		}else  now.second--;		 		
	        
		if(Aminute==10000)Aminute=0;
			else Aminute++;	
		  
  }             
}


/******************************************************************/ 
/***********************主程序*************************************/
/******************************************************************/
void MAIN (void)
{ 

   	unsigned int i,j;               
	initFlag ();							//端口初始化
	clear_GLCD();							//清屏
	     gotoxy(0,0);
		 display_GLCD_string(QINGPIN,8); 
		 gotoxy(0,2);
		 display_GLCD_string(QINGPIN,8); 
		 gotoxy(0,4);
		 display_GLCD_string(QINGPIN,8); 
		 gotoxy(0,6);
		 display_GLCD_string(QINGPIN,8);  						

 		gotoxy(32,0);					   	//设光标
    	display_GLCD_string(HUANYIN,4); 	//显示"欢迎使用"字符串
      	gotoxy(16,2);					   	//设光标
      	display_GLCD_string(HENFENG,6);    	//显示"控制系统"字符串
      	gotoxy(0,4);					   	//设光标
      	display_GLCD_string(CHUSHI,8); 	   	//显示"初始化"字符串 
		    
		for (i=0;i<1000;i++)				//延时
		for(j=0;j<200;j++);		 		 
		initTimer(); 						//开中断
	while(1)					
		{					
								gotoxy(0,0);							//设光标
           						display_GLCD_string(CHUWU,4); 		    //显示"严重错误"字符串
								gotoxy(64,0);
								display_GLCD_string(XIA,4);
	
 								gotoxy(0,2);							//设光标
           						display_GLCD_string(GUOLI,4); 			//显示"过滤时间"字符串
  								gotoxy(64,2);
        						display_GLCD_numberAB(ABCD);		 	//显示00数字 
 								gotoxy(96,2);							//设光标
           						display_GLCD_string(XIAOSHI,2); 		//显示"小时"字符串

 								display_time(now); 						//显示到计时时间
 									
          						gotoxy(0,6);							//设光标
             					display_GLCD_string(QINGXIE,2);			//显示"清洗:"字符串 
								display_GLCD_string(comma,1);			//显示":"字符串					 
 								display_time1(Aminute);         		// 显示电机运行时间
	 							gotoxy(112,6);							//设光标
             					display_GLCD_string(MIAO,1);			//显示"秒"字符串
		}						 										  
}  
/*********************************************************************/
/*******************END MAIN******************************************/
/*********************************************************************/

⌨️ 快捷键说明

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