📄 lcd.c
字号:
/*****************************************************************************************/
/* */
/* LCD串行驱动程序 */
/* */
/*****************************************************************************************/
#include <ADUC842.H>
#include"lcd.h"
sbit cs = P2^0; //只需修改此三口即可使用
sbit std = P2^1; //
sbit sclk = P2^2; //
void wr_lcd (uchar dat_comm,uchar content);
void ldelay (uint us);
uchar x[4]={0x80,0x90,0x88,0x98}; //行地址
bit flag_LCD; //为0时关闭液晶显示,1时打开
/*------------------初始化-----------------*/
void init_lcd (void) //使用前须调用此函数初始化
{
flag_LCD=1;
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
ldelay (100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
}
/*--------------清DDRAM------------------*/
/*void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
// ldelay (180);
}*/
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
ldelay (30);
a=content;
cs=1;
sclk=0;
std=1;
for(i=0;i<5;i++)
{
sclk=1;
sclk=0;
}
std=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1; //data
else
std=0; //command
sclk=1;
sclk=0;
std=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
std=CY;
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
/*-----------------------------------*/
void ldelay (uint us) //delay time
{
uint i,temp;
for(i=0;i<10;i++)
for(temp=us;temp>0;temp--)
;
}
/*-----------write string------------*/
void putstr(char *str,uchar line) //在第line行输出一个字符串
{
uchar i=0;
if(!flag_LCD)
{
return;
}
wr_lcd (comm,0x30);
wr_lcd (comm,x[line-1]);
while(str[i] != '\0' )
{
if(str[i]=='\n')
{
wr_lcd (comm,x[line]);
i++;
continue;
}
if(str[i]=='\t')
{
wr_lcd (comm,x[line-1]+8);
i++;
continue;
}
wr_lcd (cdat,str[i++]);
}
}
/*void putcar(char *str) //在默认位置输出一个字符串
{
uchar i=0;
if(!flag_LCD)
{
return;
}
while(str[i] != '\0' )
{
wr_lcd (cdat,str[i++]);
}
}
*/
/*-----------write number------------
void put2num(int num) //在默认位置输出两位数字num
{
if(!flag_LCD)
{
return;
}
wr_lcd (comm,0x30);
wr_lcd (cdat,num/10+0x30);
wr_lcd (cdat,num%10+0x30);
}
/*-----------write number------------*/
void putnum(int num) //在默认位置输出四位数字num
{
uchar out[4],i;
if(!flag_LCD)
{
return;
}
wr_lcd (comm,0x30);
if(num<0)
{
wr_lcd(cdat,'-');
num=-num;
}
out[0]=num/1000-num/10000*10;
out[1]=num/100-out[0]*10;
out[2]=num/10-out[0]*100-out[1]*10;
out[3]=num%10;
for(i=0;i<4;i++)
wr_lcd (cdat,out[i]+0x30);
// ldelay(8000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -