当使用include包含头文件时,用引号“”或尖括号<>意思不一样。只用引号“”时,首先搜索工程文件所在目录,然后再搜索编译器头文件所在目录。而当使用尖括号<>时,搜索编译器头文件所在目录,再搜索工程文件所在目录。一般来说,包含自己编写的头文件时,用双引号“”,而包含编译器自带的头文件时,用尖括号<>。
#ifndef _LCD_H_
#define _LCD_H_
/***************************************************************
LCD1602管脚定义
1 GND
2 VCC
3 VEE
4 RS PD4
5 RW PD5
6 E PD6
7-14 DB0~DB7 PB0~PB7
15 LEDA+
16 LEDK-
***************************************************************/
void delay_xms(unsigned char m); //定义延时x ms的延时函数
void LCD_write_data(unsigned char data); //LCD写字节函数
void LCD_write_cmd(unsigned char cmd); //LCD写命令函数
void LCD_gotoxy(unsigned char x,unsigned char y); //LCD开始显示的位置坐标函数
void LCD_puts(unsigned char *str); //LCD输出字符串函数
void LCD_init(); //LCD初始化函数,清屏,光标归位(0,0),且光标不闪烁不显示。
#endif
//============延时1ms函数=================
#define RS PORTD.4
#define RW PORTD.5
#define EN PORTD.6
void delay_xms(unsigned char m)
{
unsigned int i;
while(m--) //延时xms
for(i=0;i<1714;i++){ } //延时1ms
}
/*********************************************************
*******************LCD写数据函数*************************/
void LCD_write_data(unsigned char data)
{
EN=0;
RS=1;
PORTB=data; //送数据
EN=1;
delay_xms(1);
EN=0;
}
/********************************************************
*****************LCD写命令函数***************************/
void LCD_write_cmd(unsigned char cmd)
{
EN=0;
RS=0;
PORTB=cmd; //送命令码
EN=1;
delay_xms(1);
EN=0;
}
/*********************************************************
******************LCD显示位置函数************************/
void LCD_gotoxy(unsigned char x,unsigned char y)
{
unsigned char addr;
switch(x)
{
case 0: addr=0x00+y;break; //x=0时,即开始显示位置为:0行y列
case 1: addr=0x40+y;break; //x=1时,即开始显示位置为:1行y列
default: addr=0x00; //若x超出范围,则默认从0行0列开始显示
}
LCD_write_cmd(addr|0x80); //写显示位置命令,设置显示起始位置
}
/*********************************************************
****************LCD输出字符串函数************************/
void LCD_puts(unsigned char *str)
{
unsigned char i=0;
for(i=0;str!='\0';i++) //输出字符串
{
LCD_write_data(str);
delay_xms(1);
}
}
/***************************************************************
*******************LCD初始化*******************************/
void LCD_init()
{
DDRD.4=1; //设PD4~PD6为输出
DDRD.5=1;
DDRD.6=1;
DDRB=0xff; //PB各口设为输出
LCD_write_cmd(0x38); //2行,5*7点阵/每字符
delay_xms(1);
LCD_write_cmd(0x01); //LCD清屏
delay_xms(1);
LCD_write_cmd(0x06); //字符输入模式;地址增量,显示屏不动,字符后移
delay_xms(1);
LCD_write_cmd(0x0c); //显示开,光标不显示不闪烁
delay_xms(1);
//RW=0;
}
用户377235 2014-8-24 18:03
用户593939 2014-4-28 18:44
460114537_680770963 2014-4-22 13:07
644398774_263592779 2014-4-22 00:22
用户403664 2014-4-21 16:46