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

📄 lcd.c

📁 STC12C5410AD 对 清达光电HG12864 控制程序 Keil环境
💻 C
字号:
#include <STC12C5410AD.h>

#define uchar unsigned char
#define uint unsigned int

sbit RS = P3^2;
sbit RW = P3^3;
sbit E  = P3^4;
sbit WDT= P3^5;

void InitialCPU(void);
void Delay60ns(int);
void wr_InD(uchar,uchar);
void Lcd_Init(void);
void chk_busy(void);
void Clear_Lcd(void);
void Char_Disp(uchar x, uchar y, char *p);


main()
{  char date[8] = {' ','a','b','c','d','e','f','g'};
   char *p = date;

   InitialCPU();
   Lcd_Init();
   while(1)
   {
   		
   		//Clear_Lcd();
   		chk_busy();
		WDT  = !WDT;
   		Char_Disp(0,0,"星期一");
		Char_Disp(0,1,"星期二");
		Char_Disp(0,2,"星期三");
		Char_Disp(0,3,"星期四");
		Delay60ns(120);
   }
}


/************************************/
/*     CPU  初始化子程序            */
/************************************/
void InitialCPU(void)
{  //IDLE_CLK |=0x01;
   //端口设置
   P1M0 = 0x00;							//设置P1 口为IO状态
   P1M1 = 0x00;							
   
   P3M0 = 0x00;							//设置P3 口为IO状态
   P3M1 = 0x00;
   WDT  = 0;
}



//**************
//延时
//**************
void Delay60ns(int ns)
{
	int i,j;
	for (i=0;i<ns;i++);
	{
		for (j=0;j<4;j++);
		
	}
}

//**************
//输入命令或数据
//**************

void wr_InD(unsigned char com_d,unsigned char content)
{
   //chk_busy ();
   //SoftDelay(8);
   E = 1; 
   if (com_d)
   {
    	RS = 0;
		RW = 0;                        //写命令 RS=0, RW=0     	 
   }
   else 
   {
     	RS = 1;
		RW = 0;                        //写数据 RS=1, RW=0
   }
   P1 = content;                       //命令或数据内容
   ///E = 1;                              //使能	开始写数据或命令
   Delay60ns(3);
   E = 0;                              //不使能 写数据或命令完毕

}



//**********
//LCD初始化
//**********
void Lcd_Init(void)
{   	
	wr_InD(1,0x30);         //8bits,基本指令
    
	wr_InD(1,0x0c);         //开显示,显游标,不反显

	wr_InD(1,0x01);         //清屏
	Delay60ns(200);
	wr_InD(1,0x06);
}


//**************
//忙检查
//**************
void chk_busy(void)
{
    RS = 0;
    RW = 1;
 
    while (1)
    {
    	//Delay70ns(2);
        E = 1;;
    	
    	if ((P1 & 0x80) == 0)          //判断DB7为1,则忙
    		break;					   //空闲时退出
    	
    	//Delay70ns(2);
    	E = 0;  	
    }
   
    E = 0;
}



//**********
//清屏
//**********
void Clear_Lcd(void)
{
	wr_InD(1,0x01);
}



//**********
//显示汉字
//**********
void Char_Disp(unsigned char x, unsigned char y, char *p)
{
   if(y == 0)
 	  wr_InD(1,(0x80+x)); 

   if(y == 1)
 	 wr_InD(1,(0x90+x));
 
   if(y == 2)
 	 wr_InD(1,(0x88+x));
 
   if(y == 3)
 	 wr_InD(1,(0x98+x));
 
   while(*p != 0)
	 wr_InD(0,*p++);
}

⌨️ 快捷键说明

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