最近研究的一些心得!
全部资料下载:
041 LCD12864显示实验.zip
(71.8 KB, 下载次数: 26)
- /**********************HJ-2G V8.0 专业级AVR开发板例程************************
- * 平台:HJ-2G V8 AVR开发板 +ICC7.22 +ATMETA16
- * 名称:驱动开发板上的12864液晶
- * 公司:慧净电子
- * 淘宝:http://shop37031453.taobao.com
- * 网站:www.hjmcu.com
- * 编写:HJMCU
- * 日期:2008-8-08
- * QQ : 121350852 398115088
- * 晶振:内部12M晶振
- * 说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
- * 论坛:http://hjdz.5d6d.net
- ******************************************************************/
- #include "iom16v.h" //包含型号头文件
- #include "macros.h" //包含"位"操作头文件
- #include "stdio.h" //标准输入输出头文件
- #include "AVR_PQ1A.h" //包含自定义常量头文件
- #pragma data:code //以下是字模工具取出的图片数组
- const uchar GDRAM[1024]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x7F,0xFF,0xC0,0xFF,0xFF,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x83,0xFF,0xFE,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
- 0x20,0x7F,0xFF,0xC0,0xFF,0xFF,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x83,0xFF,0xFE,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x2F,0xFF,0xFF,0xFF,0xC1,0xF8,0x7F,0xBF,0xC1,0xE3,0x9C,0x00,0x78,0x1E,0x3F,0xC4,
- 0x26,0xD9,0xB6,0x6D,0x80,0x60,0x33,0x1B,0x63,0x31,0x8C,0x00,0xCC,0x33,0x1B,0x64,
- 0x26,0xD9,0xB6,0x6D,0x80,0x60,0x1E,0x1B,0x66,0x31,0x8C,0x01,0x8C,0x61,0x9B,0x64,
- 0x27,0xF9,0xFE,0x7F,0x80,0x60,0x0C,0x1B,0x66,0x01,0x8C,0x01,0x80,0x61,0x9B,0x64,
- 0x27,0xF9,0xFE,0x7F,0x80,0x60,0x1E,0x1B,0x66,0x01,0x8C,0x01,0x80,0x61,0x9B,0x64,
- 0x23,0x30,0xCC,0x33,0x1C,0x6C,0x33,0x1B,0x63,0x31,0x9C,0x70,0xCC,0x33,0x1B,0x64,
- 0x23,0x30,0xCC,0x33,0x1C,0x78,0x7F,0xBF,0xF1,0xE0,0xFC,0x70,0x78,0x1E,0x3F,0xF4,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- #pragma data:data
- /*******************************************
- 函数名称: LCD12864_portini
- 功 能: 初始化12864液晶用到的IO口
- 参 数: 无
- 返回值 : 无
- /********************************************/
- void LCD12864_portini(void)
- {
- LCDb_CTRL_DDR |= BIT(LCDb_RS)|BIT(LCDb_RW)|BIT(LCDb_E)|BIT(LCDb_RST);//配置控制管脚为输出
- LCDb_DATA_DDR |= 0xFF; //配置数据管脚为输出
- LCDb_SET_RST; //不使能复位端
- }
- /*******************************************
- 函数名称: LCD12864_readbyte
- 功 能: 从12864液晶读出一个字节数据或者指令
- 参 数: DatCmd--为iDat时是数据,为iCmd时是指令
- 返回值 : dByte--读回的数据或者指令
- /********************************************/
- uchar LCD12864_readbyte(uchar DatCmd)
- {
- uchar dByte;
- if (DatCmd == iCmd) //指令操作
- LCDb_CLR_RS;
- else
- LCDb_SET_RS;
-
- LCDb_SET_RW; //读操作
- LCDb_SET_E;
- LCDb_DATA_DDR=0x00; //数据总线定义为输入
- dByte=LCDb_DI; //读数据或者指令
- Delayms(1); //时序调整
- LCDb_CLR_E;
- LCDb_DATA_DDR|=0xff; //数据总线还原为输出
- return dByte;
- }
- /*******************************************
- 函数名称: LCD12864_sendbyte
- 功 能: 向12864液晶写入一个字节数据或者指令
- 参 数: DatCmd--为iDat时是数据,为iCmd时是指令
- dByte--为写入12864的数据或者指令
- 返回值 : 无
- /********************************************/
- void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
- {
- if (DatCmd == iCmd) //指令操作
- LCDb_CLR_RS;
- else
- LCDb_SET_RS;
-
- LCDb_CLR_RW; //写操作
- LCDb_SET_E;
- LCDb_DO = dByte; //写入数据
- Delayus(100);
- LCDb_CLR_E;
- }
- /*******************************************
- 函数名称: LCD12864_sendstr
- 功 能: 向12864液晶写入一个字符串
- 参 数: ptString--字符串指针
- 返回值 : 无
- /********************************************/
- void LCD12864_sendstr(uchar *ptString)
- {
- while((*ptString)!='\0') //字符串未结束一直写
- {
- LCD12864_sendbyte(iDat, *ptString++);
- }
- }
- /*******************************************
- 函数名称: LCD12864_clear
- 功 能: 12864液晶清屏
- 参 数: 无
- 返回值 : 无
- /********************************************/
- void LCD12864_clear(void)
- {
- LCD12864_sendbyte(iCmd,LCDb_CLS);
- Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
- }
- /*******************************************
- 函数名称: LCD12864_readBF
- 功 能: 12864液晶清屏
- 参 数: 无
- 返回值 : busy--为1时忙,为0时可以接收指令
- /********************************************/
- uchar LCD12864_readBF(void)
- {
- uchar busy;
- busy=LCD12864_readbyte(iCmd); //读回BF标志和地址
- if(busy&0x80) //如果忙,返回忙状态
- busy=1;
- else //不忙,可以写入
- busy=0;
- return busy;
- }
- /*******************************************
- 函数名称: LCD12864_gotoXY
- 功 能: 移动到指定位置
- 参 数: Row--指定的行
- Col--指定的列
- 返回值 : 无
- /********************************************/
- void LCD12864_gotoXY(uchar Row, uchar Col)
- {
- switch (Row) //选择行
- {
- case 2:
- LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列
- case 3:
- LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列
- case 4:
- LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列
- default:
- LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列
- }
- }
- /*******************************************
- 函数名称: LCD12864_initial
- 功 能: 12864液晶初始化
- 参 数: 无
- 返回值 : 无
- /********************************************/
- void LCD12864_initial(void)
- {
- Delayms(100); // 等待内部复位
- LCD12864_portini(); //端口初始化
-
- LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定
- while(LCD12864_readBF());
- LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示
- while(LCD12864_readBF());
- LCD12864_clear(); //清屏
- while(LCD12864_readBF());
- LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定
- }
- /*******************************************
- 函数名称: LCD12864_opGDRAM
- 功 能: 向GDRAM写入数据,并显示(完成绘图功能)
- 参 数: ptGDRAM--GDRAM数据指针
- 返回值 : 无
- /********************************************/
- void LCD12864_opGDRAM(const uchar *ptGDRAM)
- {
- uchar i,j;
- uint x=0;
- while(LCD12864_readBF()); //读忙标志
- LCD12864_sendbyte(iCmd,LCDb_EXTCMD1); //扩充指令集,并关闭绘图显示
- //写入并显示上半屏幕
- for(i=0;i<32;i++) //行地址计数
- {
- for(j=0;j<8;j++) //列地址计数
- {
- LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
- Delayus(10);
- LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
- Delayus(10);
- LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据
- Delayus(10);
- LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
- Delayus(10);
- }
- }
- //写入并显示下半屏幕
- for(i=0;i<32;i++)
- {
- for(j=8;j<16;j++)
- {
- LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
- Delayus(10);
- LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
- Delayus(10);
- LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据
- Delayus(10);
- LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
- Delayus(10);
- }
- }
- Delayus(10);
- LCD12864_sendbyte(iCmd,LCDb_EXTCMD2); //打开绘图显示
- LCD12864_sendbyte(iCmd,LCDb_BASCMD); //还原回基本指令集模式
- }
- /*******************************************
- 函数名称: main
- 功 能: 12864液晶驱动主程序
- 参 数: 无
- 返回值 : 无
- /********************************************/
- void main(void)
- {
- uchar i;
- Board_init( ); //初始化开发板
- LCD12864_initial(); //初始化12864液晶
-
- while(1)
- {
- LCD12864_clear();
- while(LCD12864_readBF());
- LCD12864_gotoXY(1,0); //第1行,第1列显示
- LCD12864_sendstr("HJ-2G AVR 开发板");
- LCD12864_gotoXY(2,2); //第2行,第3列显示
- LCD12864_sendstr("慧净制作");
- LCD12864_gotoXY(3,0); //第3行,第1列显示
- LCD12864_sendstr("电话:18691419224");
- LCD12864_gotoXY(4,1); //第4行,第2列显示
- LCD12864_sendstr("www.hjmcu.com ");
- Delayms(2000); //延时等待
-
- }
- }
-
复制代码
|