📄 12864_serial.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 + -