📄 lcd.c
字号:
/*
LCD底层操作函数
所有与LCD相关的初始化,写数据,读数据等操作函数
都封装在该文件中
设计人:吴光捷
*/
#include "lcd.h"
//高低位转换函数
unsigned char convert(unsigned char c)
{
int i;
unsigned char d;
d=0x00;
if(c&0x80) d=d|(0x01);
if(c&0x40) d=d|(0x02);
if(c&0x20) d=d|(0x04);
if(c&0x10) d=d|(0x08);
if(c&0x08) d=d|(0x10);
if(c&0x04) d=d|(0x20);
if(c&0x02) d=d|(0x40);
if(c&0x01) d=d|(0x80);
return d;
}
/*
lcd参数初始化函数
*/
void Lcd_Init(void)
{
DDRE=DDRE|0x06;
DDRC=DDRC|0xc0;
DDRB=DDRB|0x02;
DDRA=0xFF;
Lcd_Reset();
Set_Bias();
Set_ADC(0);
Set_Scan(0);
Set_Register(0x03);
Set_Volume(40);
Lcd_Clear();
Set_Power();
Lcd_OnOff(1);
}
/*关闭打开LCD显示屏函数*/
void Lcd_OnOff(unsigned char on)
{
unsigned char d;
if(on)
d=0xf5;
else
d=0x75;
SetLcdA0_L();
SetLcdCs_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=d;
SetLcdWr_H();
SetLcdCs_H();
if(on)
SetLcdCs_L();
else
SetLcdCs_H();
}
/*写LCD数据命令*/
void Write_Data(unsigned char x,unsigned char y,unsigned char d)
{
Set_Column(x);
Set_Page(y);
SetLcdA0_H();
SetLcdCs_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=d;
SetLcdWr_H();
SetLcdCs_H();
}
/*清除LCD*/
void Lcd_Clear()
{
/*
int i,j;
for(i=0;i<8;i++)
{
Set_Page(i);
for(j=0;j<132;j++)
{
SetLcdA0_H();
SetLcdCs_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=0;
SetLcdWr_H();
SetLcdCs_H();
}
}*/
int k=0;
for(k=0;k<132;k++)
{
Write_Data(k,0,0x00);
Write_Data(k,1,0x00);
Write_Data(k,2,0x00);
Write_Data(k,3,0x00);
Write_Data(k,4,0x00);
Write_Data(k,5,0x00);
Write_Data(k,6,0x00);
Write_Data(k,7,0x00);
}
}
unsigned char Read_Data(unsigned char x,unsigned char y)
{
unsigned char c;
Set_Column(x);
Set_Page(y);
SetLcdA0_H();
SetLcdCs_L();
SetLcdWr_H();
SetLcdRd_L();
DDRA=0x00;
PORTA=0xff;
c=PINA;
c=PINA;
c=PINA;
SetLcdRd_H();
DDRA=0xFF;
SetLcdCs_H();
return c;
}
void Write_command(unsigned char command)
{
SetLcdA0_L();
SetLcdCs_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=convert(command);
SetLcdWr_H();
SetLcdCs_H();
}
void Set_Start_Line(unsigned char line)
{
unsigned char d;
d=0x40|(line&0xc0);
d=convert(d);
SetLcdA0_L();
SetLcdCs_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=d;
SetLcdWr_H();
SetLcdCs_H();
}
void Set_Page(unsigned char page)
{
unsigned char d;
d=0xB0|(page);
d=convert(d);
SetLcdA0_L();
SetLcdCs_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=d;
SetLcdWr_H();
SetLcdCs_H();
}
void Set_Column(unsigned char colum)
{
unsigned char d;
d=0x10|((colum&0xF0)>>4);
d=convert(d);
SetLcdA0_L();
SetLcdCs_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=d;
SetLcdWr_H();
SetLcdCs_H();
d=0x00|(colum&0x0F);
SetLcdCs_L();
d=convert(d);
SetLcdA0_L();
SetLcdRd_H();
SetLcdWr_L();
PORTA=d;
SetLcdWr_H();
SetLcdCs_H();
}
void clear_line(unsigned char line)
{
int i,j;
unsigned char *p;
}
unsigned char Read_Stat()
{
unsigned char c;
SetLcdA0_L();
SetLcdCs_L();
SetLcdRd_L();
SetLcdWr_H();
c=PINA;
SetLcdRd_H();
SetLcdCs_H();
return convert(c);
}
void Lcd_Reset()
{
int k;
DDRC=DDRC|(0x01>>6);
SetLcdRes_L();
k=655;
while(k>0)
{
k--;
}
SetLcdRes_H();
}
void Set_Power()
{
Write_command(0x2f);
}
void Set_Register(unsigned char regvalue)
{
Write_command(regvalue|0x20);
}
void Set_Volume(unsigned char VolValue)
{
Write_command(0x81);
Write_command(VolValue);
}
void Set_Bias()
{
Write_command(0xa3);
}
void Set_EntireOn(unsigned char on)
{
if(on)
Write_command(0x85);
else
Write_command(0x84);
}
void Set_ADC(unsigned char on )
{
if(on)
Write_command(0xA1);
else
Write_command(0xA0);
}
void Set_Scan(unsigned char direct )
{
if(direct)
Write_command(0xc0);
else
Write_command(0xc8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -