📄 lcd.h
字号:
unsigned char ADtmp,ADbz=0;
#define LCD_DATAL PORTA&=~BIT(1)
#define LCD_DATAH PORTA|=BIT(1)
#define LCD_CLKL PORTA&=~BIT(3)
#define LCD_CLKH PORTA|=BIT(3)
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++) //延时
{asm("nop");}
}
//*************************************************************************
//***************************************************************************
void lcd_out(unsigned char send_byte)
{
unsigned char i,s;
for (i=0;i<8;i++)
{
if((send_byte&0x80)==0)
{
LCD_DATAL;
}
else
{
LCD_DATAH;
} //送数据
LCD_CLKL;
LCD_CLKH;
send_byte=send_byte<<1;
}
delay(256);
}
//***************************************************************************
void WR_dat(unsigned char dat)
{
unsigned char s;
s=dat&0xf0;
lcd_out(0xfa);
lcd_out(s);
s=dat&0x0f;
s<<=4;
lcd_out(s);
}
//**************************************************************************
void WR_control(unsigned char dat)
{
unsigned char s;
s=dat&0xf0;
lcd_out(0xf8);
lcd_out(s);
s=dat&0x0f;
s<<=4;
lcd_out(s);
}
//**************************************************************************
void lcd_control()
{
WR_control(0x30);
WR_control(0x0c);
}
//**************************************************************************
void lcd_clear()
{
int i;
WR_control(0x01);
for(i=0;i<5000;i++) // 延时5ms
{
asm("nop");
asm("nop");
}
}
/*******************************************************/
/****** 函数名称: LCD_set_xy() ******/
/****** 功 能: 设置LCD显示坐标 ******/
/****** 参 数: 显示字符串的位置,X:0-15,Y:0-1*****/
/****** 返回值 : 无 ******/
/*******************************************************/
void LCD_address( unsigned char x, unsigned char y )
{
unsigned char address;
switch(x)
{
case 0:
address = 0x80 + y; //计算显示地址
break;
case 1:
address = 0x90 + y; //计算显示地址
break;
case 2:
address = 0x88 + y; //计算显示地址
break;
case 3:
address = 0x98 + y; //计算显示地址
break;
default:address = 0x80 + y;
}
WR_control( address); //写地址命令
}
//**************************************************************************
/*******************************************************/
/****** 函数名称: LCD_write_string() ******/
/****** 功 能: 中英文字符串显示函数 ******/
/****** 参 数: *s--英文字符串指针 ******/
/****** X、Y--显示字符串的位置 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_address( X, Y ); //写显示地址
while (*s) //是否到字符串尾
{
WR_dat (*s ); //写显示数据
s ++; //字符串地址加1
}
}
/******************************************************************************/
//函数功能:将BCD码转换为ASCII码函数
//输入数据:BCD
//输出:ASCII
//作者:韩红瑞
//修改时间:2006-08-31
/******************************************************************************/
unsigned char BCD_ASCII(unsigned char bcd)
{
bcd &= 0x0F;
if(bcd > 9)
bcd +=('7'); // 将A~F转换为ASCII
else
bcd += '0'; // 将0~9转换为ASCII 0~9
return(bcd);
}
void LCD_writeasc(unsigned char x, unsigned char y, unsigned char data)
{
LCD_address(x,y);
WR_dat(data);
}
void Lcd_INT()
{
DDRA|=BIT(1);
DDRA|=BIT(3);
lcd_control();
}
void lcd_writechar(unsigned char X,unsigned char Y,unsigned char number)
{
LCD_address(X,Y);
WR_dat(BCD_ASCII(number>>4));
WR_dat(BCD_ASCII(number));
}
/*
void lcd_write2(unsigned char X,unsigned char Y,unsigned char number)
{
LCD_address(X,Y);
WR_dat(BCD_ASCII(number%100/10));
WR_dat(BCD_ASCII(number%10));
}
*/
void lcd_write2(unsigned char X,unsigned char Y,unsigned char number)
{
LCD_address(X,Y);
WR_dat(BCD_ASCII(number/100));
WR_dat(BCD_ASCII(number%100/10));
LCD_address(X,Y+1);
WR_dat(BCD_ASCII(number%10));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -