您的位置 首页 嵌入式

AVR M16试验之九 LCD12864

***********************************************************************文件名称:mainc*程序作者:kidcao1987*程序

/**********************************************************************
* 文件名称: main.c
* 程序作者: kidcao1987
* 程序版别: V1.0
* 功用描绘: 接好LCD12864,用在LCD12864上显现,这儿主张再外接上电源
“CEPARK-M16开发板
12864液晶测验
程序设计: 曹佃生!!
www.cepark.com ”
* 编译器:WinAVR-20090313
* 芯片:ATmega16,外部11.0592MHZ晶振
* 技术支持:http://bbs.cepark.com
**********************************************************************/
//头文件包括
#include//io端口寄存器装备文件,有必要包括
#include//GCC中的延时函数头文件

//端口位界说
#define RS PA4 //数据/指令操控端 0指令,1数据
#define RW PA5 //读/写挑选操控端 0写,1读
#define E PA6 //使能端 下降沿读,高电平写
#define PSB PA3 //数据传输方法挑选端,H,8位或4位并口方法;L,串口方法

//全局变量声明
unsigned char ucString1[]=”CEPARK-M16开发板”;
unsigned char ucString2[]=” 12864液晶测验 “;
unsigned char ucString3[]=”程序设计: 曹佃生”;
unsigned char ucString4[]=” www.cepark.com “;

//函数声明
void LCD12864PortInit(void); //端口初始化
void LCD12864Init(void); //LCD初始化
void LCD12864WriteCommand(unsigned char ucCommand); //LCD写指令
void LCD12864WriteData(unsigned char ucData); //LCD写数据
void LCD12864BusyCheck(void); //读写检测函数,每次对液晶操作前都要进行读写检测

int main(void)
{
unsigned char i;

LCD12864PortInit(); //端口初始化
LCD12864Init(); //LCD初始化

LCD12864WriteCommand(0x80+0x00);
for(i = 0;i < 16;i++)
{
LCD12864WriteData(ucString1[i]);
}
LCD12864WriteCommand(0x90+0x00);
for(i = 0;i < 16;i++)
{
LCD12864WriteData(ucString2[i]);
}
LCD12864WriteCommand(0x88+0x00);
for(i = 0;i < 16;i++)
{
LCD12864WriteData(ucString3[i]);
}
LCD12864WriteCommand(0x98+0x00);
for(i = 0;i < 16;i++)
{
LCD12864WriteData(ucString4[i]);
}

while(1)
{

}
}

void LCD12864PortInit()
{
//LCD数据端口设置
PORTB = 0x00; //
DDRB = 0xFF; //装备端口PA悉数为输出口

PORTA = 0x00;
DDRA |= (1 << RS) | (1 << RW) | (1 << E);
_delay_ms(15);
}

void LCD12864Init()
{
LCD12864WriteCommand(0x01); //清屏
_delay_ms(15);
LCD12864WriteCommand(0x38); //显现形式
_delay_ms(5);
//LCD12864WriteCommand(0x0f); //显现开关操控,开显现,光标显现,光标闪耀
LCD12864WriteCommand(0x0c); //显现开关操控,开显现,光标不显现,光标不闪耀
_delay_ms(5);
LCD12864WriteCommand(0x06); //光标设置,读或写一个字符后,地址指针加一,光标加一,整屏不移动
_delay_ms(5);
}

void LCD12864WriteCommand(unsigned char ucCommand)
{
LCD12864BusyCheck();

PORTA &= ~(1 << RS); //RS=0,写指令
PORTA &= ~(1 << RW); //RW=0,写指令
PORTA |= (1 << E); //E=1,写操作
_delay_ms(2);
PORTB = ucCommand; //指令送数据端口
PORTA &= ~(1 << E); //E=0,中止写操作
// _delay_ms(5);

}

void LCD12864WriteData(unsigned char ucData)
{
LCD12864BusyCheck();

PORTA |= (1 << RS); //RS=1,写数据
PORTA &= ~(1 << RW); //RW=0,写指令
PORTA |= (1 << E); //E=1,写操作
_delay_ms(2);
PORTB = ucData; // 数据送数据端口
PORTA &= ~(1 << E); //E=0,中止写操作
// _delay_ms(5);

}

void LCD12864BusyCheck(void)
{
unsigned int uiTemp;
uiTemp = 3000;

DDRB = 0x00; //PB口置为输进口,预备读取数据
PORTA &= ~(1 << RS); //RS=0,读指令
PORTA |= (1 << RW); //RW=1,读指令
PORTA |= (1 << E); //E=1,使能 while((0x80 & PINB) && (uiTemp–)); //监测忙信号,直到忙信号为0,才干进行读写操作 PORTA &= ~(1 << E); //E=0
DDRB = 0xFF; //PA口置为输出口,预备向端口发送数据

}

视频地址:http://v.youku.com/v_show/id_XMTYxNDk3NzUy.html

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/258841.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部