LCD12864经典写数据.docx
- 文档编号:29804816
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:12
- 大小:16.38KB
LCD12864经典写数据.docx
《LCD12864经典写数据.docx》由会员分享,可在线阅读,更多相关《LCD12864经典写数据.docx(12页珍藏版)》请在冰豆网上搜索。
LCD12864经典写数据
/*注:
不同开发板,LCD数据显示口不同,Y51最小系统板数据口为P2口*/
/*注:
不同开发板,LCD数据显示口不同,Y51最小系统板数据口为P2口*/
/*注:
不同开发板,LCD数据显示口不同,Y51最小系统板数据口为P2口*/
/*注:
不同开发板,LCD数据显示口不同,Y51最小系统板数据口为P2口(即dat口)否则LCD12864不能正常显示!
*/
#include
/*端口定义*/
#include<18b20.H>
#include
#defineDataPortP2//数据口
#defineucharunsignedchar
#defineuintunsignedint
sbitRS=P0^7;//寄存器选择输入
sbitRW=P0^6;//寄存器读写控制
sbitE=P0^5;//液晶使能控制
sbitPSB=P0^4;//串并方式控制
sbitRES=P0^3;
sbitled=P1^7;
sbitF=P1^0;
sbitL=P1^1;
uinttemp0,temp1,temp2;
uinttime,j,q,M=1,N,K,Z,W;
uchari;
voidtvaluesckan();
uchardis1[]={"温度范围"};
uchardis2[]={"℃"};
uchardis3[]={"稳定时间:
"};
uchardis4[]={"最大功率跟踪!
"};
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(unsignedchart)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
//检测忙位
------------------------------------------------*/
voidCheck_Busy()
{
RS=0;
RW=1;
E=1;
DataPort=0xff;
while((DataPort&0x80)==0x80);//忙则等待
E=0;
}
/*------------------------------------------------
写命令
------------------------------------------------*/
voidWrite_Cmd(unsignedcharCmd)
{
Check_Busy();
RS=0;
RW=0;
E=1;
DataPort=Cmd;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
写数据
------------------------------------------------*/
voidWrite_Data(unsignedcharData)
{
Check_Busy();
RS=1;
RW=0;
E=1;
DataPort=Data;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
液晶屏初始化
------------------------------------------------*/
voidInit_ST7920()
{
DelayMs(40);//大于40MS的延时程序
PSB=1;//设置为8BIT并口工作模式
DelayMs
(1);//延时
RES=0;//复位
DelayMs
(1);//延时
RES=1;//复位置高
DelayMs(10);
Write_Cmd(0x30);//选择基本指令集
DelayUs2x(50);//延时大于100us
Write_Cmd(0x30);//选择8bit数据流
DelayUs2x(20);//延时大于37us
Write_Cmd(0x0c);//开显示(无游标、不反白)
DelayUs2x(50);//延时大于100us
Write_Cmd(0x01);//清除显示,并且设定地址指针为00H
DelayMs(15);//延时大于10ms
Write_Cmd(0x06);//指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动
DelayUs2x(50);//延时大于100us
}
/*------------------------------------------------
显示字符串
x:
横坐标值,范围0~8
y:
纵坐标值,范围1~4
------------------------------------------------*/
voidLCD_PutString(unsignedcharx,unsignedchary,unsignedcharcode*s)
{
switch(y)
{
case1:
Write_Cmd(0x80+x);break;
case2:
Write_Cmd(0x90+x);break;
case3:
Write_Cmd(0x88+x);break;
case4:
Write_Cmd(0x98+x);break;
default:
break;
}
while(*s>0)
{
Write_Data(*s);
s++;
DelayUs2x(50);
}
}
/*------------------------------------------------
清屏
------------------------------------------------*/
voidClrScreen()
{
Write_Cmd(0x01);
DelayMs(15);
}
unsignedcharReadByte(void)
{
unsignedcharbyReturnValue;
Check_Busy();
DataPort=0xff;
RS=1;
RW=1;
E=0;
E=1;
byReturnValue=DataPort;
E=0;
returnbyReturnValue;
}
//----------------------------------------------
//清整个GDRAM空间
//-----------------------------------------------
voidclrgdram()
{
unsignedcharx,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{
Write_Cmd(0x34);
Write_Cmd(y+0x80);
//行地址
Write_Cmd(x+0x80);
//列地址
Write_Cmd(0x30);
Write_Data(0x00);
Write_Data(0x00);
}
}
/*----------------------------------------------
显示数据
----------------------------------------------*/
/*Write_Cmd(0x80);
Write_Data(j+0x30);
for(i=0;i<30;i++)
DelayMs(200);*/
/*主程序*/
voidmain()
{
Init_ST7920();
while
(1)
{
zhu1();//借用库函数“18b20.h”中最主要的读取函数(很重要)!
!
/*******************************************/
LCD_PutString(0,1,"温度");//第一行,第零列;
Write_Data(':
');
/*百位*/
//write_dat(tvalue/1000+0x30);//写入18b20中的值必须加“0x30”非常重要!
!
;
/*十位*/
Write_Data(tvalue%1000/100+0x30);//写入18b20中的值必须加“0x30”非常重要!
!
;
/*个位*/
Write_Data(tvalue%100/10+0x30);//写入18b20中的值必须加“0x30”非常重要!
!
;
/*小数点*/
Write_Data('.');//写入18b20中的值必须加“0x30”非常重要!
!
;
/*小数*/
Write_Data(tvalue%10+0x30);//写入18b20中的值必须加“0x30”非常重要!
!
;
Write_Data('');
LCD_PutString(0,6,"℃");
temp0=(tvalue%1000/100);
temp1=(tvalue%100/10);
temp2=temp0*10+temp1;
tvaluesckan();
//LCD_PutString(0,3,"床前明月光想死,");
//LCD_PutString(0,4,"最大功率跟踪!
。
");
}
}
voidtvaluesckan()
{
if(M==1)
{
F=0;
L=1;//升温;
LCD_PutString(0,3,"加温中...");
if(temp2==30)
{M=0;N=1;}
}
if(N==1)
{
F=0;
L=1;//升温;
led=0;
LCD_PutString(0,3,"加温中...");
if(temp2==50)
{N=0;K=1;}
}
if(K==1)
{
F=0;
L=0;//关闭;
LCD_PutString(0,3,"恒温中...");
if(temp2<50)
{F=0;L=1;}
else
{F=1;L=0;}
j++;
if(j%50==0)
{q++;}
if(q==121)
{j=0;q=0;K=0;Z=1;}
LCD_PutString(0,2,"稳定");
Write_Data(':
');
Write_Data(q/100+0x30);
Write_Data(q/10%10+0x30);
Write_Data(q%10+0x30);
Write_Data('S');
}
if(Z==1)
{
F=1;
L=0;//降温;
LCD_PutString(0,3,"降温中...");
if(temp2==40)
{F=0;L=0;W=1;Z=0;}//关闭;
}
if(W==1)
{
LCD_PutString(0,3,"恒温中...");
if(temp2<40)
{F=0;L=1;}
else
{F=1;L=0;}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD12864 经典 数据
![提示](https://static.bdocx.com/images/bang_tan.gif)