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

📄 12864_serial.c

📁 使用凌阳SPCE061A为主控核的测温程序
💻 C
字号:
/*********************************************************************************************/
//液晶驱动
//液晶型号:12864
//---------------------------------------------------------------------
//连接方式:(串行)
//			\CS:	IOB0
//			SID:	IOB2
//			SCLK:	IOB1
// 			PSB:	GND(serial)
//			/RST:	VCC
//---------------------------------------------------------------------
//日期:	2008.08.15
//作者:	LiPeng
/*********************************************************************************************/
#include "SPCE061A.h"
#include "ds18b20.h"

/*变量定义*/
unsigned int Disp_Addr=0x0000;//液晶显示ddram地址

/*********************************************************************/
//功能:	延时
//参数:	无
//返回值:	无
/*********************************************************************/
void delay(unsigned int i)
{
	while(i--)
		CL_Wdog;
}

/*********************************************************************/
//功能:	模拟输出高低
//参数:	要输出的数据
//返回值:	无
/*********************************************************************/
void Send_Simulate(unsigned int Send_Data)
{
	if(Send_Data&0x0080)
		SID_H;
    else
       	SID_L;
    SCLK_H;
    delay(8);
    CL_Wdog;
    SCLK_L;
}

/*********************************************************************/
//功能:	输出数据或指令
//参数:	数据或指令以及其表示:0为数据,1为指令
//返回值:	无
/*********************************************************************/
void Serial_Send(unsigned int data,unsigned int mark)
{
    unsigned int i,j,Com_or_Data;
	
	switch(mark)
	{
		case 0:
			Com_or_Data=0x00fa;
			break;
		case 1:
			Com_or_Data=0x00f8;
			break;
	}
	CS_H;//enable
	
	for(i=1;i<=8;i++)//判断发送数据或指令
	{
		Send_Simulate(Com_or_Data);
		Com_or_Data<<=1;
		CL_Wdog;
	}
	
    for(j=0;j<2;j++)//发送
    {
    	for(i=4;i>=1;i--)
    	{	
    		Send_Simulate(data);
    		data<<=1;
    		CL_Wdog;
    	}
        for(i=4;i>=1;i--)
        {
            SID_L;
            SCLK_H;
            delay(8);
            SCLK_L;
            CL_Wdog;
         }
     }
     CS_L;//disable
 }

/*********************************************************************/
//功能:	LCD初始化
//参数:	无
//返回值:	无
/*********************************************************************/
void Lcd_Initial()
{
	Serial_Send(0x0030,1);//功能设置:基本指令集
	Serial_Send(0x0004,1);//点设定:显示字符/光标从左到右移位,DDRAM地址加1 
    Serial_Send(0x000c,1);//显示设定:开显示,不显示光标位置
    Serial_Send(0x0001,1);//清DDRAM
    Serial_Send(0x0002,1);//DDRAM地址归位
    Serial_Send(0x0080,1);//把显示地址设为0X80,即为第一行的首位
}

/*********************************************************************/
//功能:	清DDRAM
//参数:	无
//返回值:	无
/*********************************************************************/
void Erase_Lcd()
{
	Serial_Send(0x0001,1);
}

/*********************************************************************/
//功能:	选择显示地址
//参数:	地址的行和列
//返回值:	无
/*********************************************************************/
void Position_Select(int line,int row)
{
	if(line==1)
		Disp_Addr=0x80+row-1;
	else if(line==2)
		Disp_Addr=0x90+row-1;
	else if(line==3)
		Disp_Addr=0x88+row-1;
	else
		Disp_Addr=0x98+row-1;
}

/*********************************************************************/
//功能:	显示字符
//参数:	地址行列值和字符ASCII值
//返回值:	无
/*********************************************************************/
void Disp_String(int line,int row,int string)
{
	Position_Select(line,row);
	Serial_Send(Disp_Addr,1);
	Serial_Send(string,0);
}

/*********************************************************************/
//功能:	显示字符串
//参数:	地址行列值和要显示的字符串
//返回值:	无
/*********************************************************************/
void Disp_Strs(int line,int row,char *strings)
{
	int i;
	Position_Select(line,row);	
	Serial_Send(Disp_Addr,1);
	for(i=0;*(strings+i)!='\0';i++)
		Serial_Send(*(strings+i),0);
}

/*********************************************************************/
//功能:	显示float型数字
//参数:	地址行列值和数字
//返回值:	无
/*********************************************************************/
void Disp_Num(int line,int row,float number)
{
	unsigned int first,second,third,forth,numbertemp;
	if(number>100)
		numbertemp=(int)(number*10);
	else if(number>10)
		numbertemp=(int)(number*100);
	else
		numbertemp=(int)(number*1000);
	first=numbertemp/1000;
	second=numbertemp%1000/100;
	third=numbertemp%100/10;
	forth=numbertemp%10;
	CL_Wdog;
	Position_Select(line,row);
	Serial_Send(Disp_Addr,1);
	if(number>100)
	{
		Serial_Send(first+0x30,0);
		Serial_Send(second+0x30,0);
		Serial_Send(third+0x30,0);
		Serial_Send(0x2e,0);
		Serial_Send(forth+0x30,0);
	}
	else if(number>10)
	{
		Serial_Send(first+0x30,0);
		Serial_Send(second+0x30,0);
		Serial_Send(0x2e,0);
		Serial_Send(third+0x30,0);
		Serial_Send(forth+0x30,0);
	}
	else
	{
		Serial_Send(first+0x30,0);
		Serial_Send(0x2e,0);
		Serial_Send(second+0x30,0);
		Serial_Send(third+0x30,0);
		Serial_Send(forth+0x30,0);
	}
}




⌨️ 快捷键说明

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