📄 12864.c.120714080216
字号:
/*****************************************
*文件名:lcd12864.c
*功能:LCD12864串行方式AVR驱动程序
*日期:2010年7月10日
****************************************/
#include "12864.h" //包含头文件
/*****************************************
*函数名:delay_12864
*功能:利用寄存器操作实现延时效果
*参数:延时变量x
*返回值:无
****************************************/
void delay_ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<1141;i++);
}
void delay_12864(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<40;i++);
}
/*****************************************
*函数名:send_command
*功能:向LCD控制器的寄存器写指令
*参数:指令command_data
*返回值:无
****************************************/
void send_command(uchar command_data)
{
uchar i,temp;
uchar i_data;
DDR_lcd12864=0XFF;
i_data=0xf8;
PORT_lcd12864&=~BIT(PB1);
for(i=0;i<8;i++)
{
temp=i_data&0x80;
if(temp==0x80)
PORT_lcd12864|=BIT(PB0);//PB0=1;
if(temp==0x00)
PORT_lcd12864&=~BIT(PB0);//PB0=0;
PORT_lcd12864&=~BIT(PB1);
PORT_lcd12864|=BIT(PB1);
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
temp=i_data&0x80;
if(temp==0x80)
PORT_lcd12864|=BIT(PB0);
if(temp==0x00)
PORT_lcd12864&=~BIT(PB0);
PORT_lcd12864&=~BIT(PB1);
PORT_lcd12864|=BIT(PB1);
i_data=i_data<<1;
}
i_data=command_data;
i_data<<=4;
for(i=0;i<8;i++)
{
temp=i_data&0x80;
if(temp==0x80)
PORT_lcd12864|=BIT(PB0);
if(temp==0x00)
PORT_lcd12864&=~BIT(PB0);
PORT_lcd12864&=~BIT(PB1);
PORT_lcd12864|=BIT(PB1);
i_data=i_data<<1;
}
delay_12864(15);
}
/*****************************************
*函数名:send_data
*功能:向LCD的寄存器写数据
*参数:数据command_data
*返回值:无
****************************************/
void send_data(uchar command_data)
{
uchar i,temp;
uchar i_data;
DDR_lcd12864=0XFF;
i_data=0xfa;
for(i=0;i<8;i++)
{
temp=i_data&0x80;
if(temp==0x80)
PORT_lcd12864|=BIT(PB0);
if(temp==0x00)
PORT_lcd12864&=~BIT(PB0);
PORT_lcd12864&=~BIT(PB1);
PORT_lcd12864|=BIT(PB1);
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
temp=i_data&0x80;
if(temp==0x80)
PORT_lcd12864|=BIT(PB0);
if(temp==0x00)
PORT_lcd12864&=~BIT(PB0);
PORT_lcd12864&=~BIT(PB1);
PORT_lcd12864|=BIT(PB1);
i_data=i_data<<1;
}
i_data=command_data;
i_data<<=4;
for(i=0;i<8;i++)
{
temp=i_data&0x80;
if(temp==0x80)
PORT_lcd12864|=BIT(PB0);
if(temp==0x00)
PORT_lcd12864&=~BIT(PB0);
PORT_lcd12864&=~BIT(PB1);
PORT_lcd12864|=BIT(PB1);
i_data=i_data<<1;
}
delay_12864(15);
}
/*****************************************
*函数名:lcd_displayString
*功能:在LCD12864上定坐标显示字符串
*参数:行坐标x,列坐标y,显示字符串string
*返回值:无
****************************************/
void lcd_displayString(uchar x,uchar y,uchar *string)
{
uchar i;
switch(x)
{
case 0:send_command(0x80);send_command(0x80+y);break;
case 1:send_command(0x90);send_command(0x90+y);break;
case 2:send_command(0x88);send_command(0x88+y);break;
case 3:send_command(0x98);send_command(0x98+y);break;
}
for(i=0;string[i]!='\0';i++)
{
send_data(string[i]);
}
}
/*****************************************
*函数名:lcd_init
*功能:LCD12864的初始化函数
*参数:无
*返回值:无
****************************************/
void lcd_init()
{
delay_12864(150);
send_command(0x30); /*设置8位数据接口,基本指令模式。*/
send_command(0x02); /*清DDRAM*/
send_command(0x06); /*游标及显示右移一位*/
send_command(0x0c); /*整体显示开,游标关,反白关*/
send_command(0x01); /*写入空格清屏幕*/
send_command(0x80); /*设定首次显示位置*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -