|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2008-11-27 12:45:30
|
显示全部楼层
>> Snail Emulator Kit LCD1602 显示试验平台的建立
借助Snail Emulator Kit连接LCD1602。借助SEK上引出的排针,我们可以轻松将LCD1602
与Snail Emulator Kit合二为一。采用半字节发送模式,引脚定义如下:
直接将LCD1602的1号引脚对准Snail Emulator Kit下载接口边上的GND,此时,LCD1602的
数字逻辑电压引脚(也就是2号引脚)正好对应Snail Emulator Kit的VSYS引脚。并按照这个
顺序,直接将LCD插入排针中。
实际的引脚对应关系如下:
# define LCD_RS _PC3
# define LCD_RW _PC2
# define LCD_E _PC1
数据引脚
D4 PD7
D5~D7 PA1~PA3 (PA1和PA3在另外一排排针上)
对应的头文件和配制信息如下:在LIB_Config.h中<font color=blue>
//LCD1602模块
# define LCD_RS _PC3
# define LCD_RW _PC2
# define LCD_E _PC1
# define LCD_BF PIN_PA3
# define LCD_SEND_HALF_CHAR_HIGH(__VAL) \
{\
if ((__VAL) & BIT(4))\
{\
PORTD |= BIT(PD4);\
}\
else\
{\
PORTD &= ~BIT(PD4);\
}\
\
PORTA &= ~(BIT(PA1)|BIT(PA2)|BIT(PA3));\
PORTA |= (((__VAL) & 0xE0)>>4);\
}
# define LCD_SEND_HALF_CHAR_LOW(__VAL) \
{\
if ((__VAL) & BIT(0))\
{\
PORTD |= BIT(PD4);\
}\
else\
{\
PORTD &= ~BIT(PD4);\
}\
\
PORTA &= ~(BIT(PA1)|BIT(PA2)|BIT(PA3));\
PORTA |= ((__VAL) & 0x0E);\
}
# define LCD_SET_WRITE_DATA \
{\
DDRD |= BIT(PD4);\
DDRA |= BIT(PA1)|BIT(PA2)|BIT(PA3);\
}
# define LCD_SET_READ_DATA \
{\
DDRD &= ~BIT(PD4);\
PORTD |= BIT(PD4);\
DDRA &= ~(BIT(PA1)|BIT(PA2)|BIT(PA3));\
PORTA |= BIT(PA1)|BIT(PA2)|BIT(PA3);\
NOP();\
}
# define LCD_FLASH_STRING_GROUP_TIME_OUT 1024
# define LCD_RUN_STRING_SPEED 80
# include "RD_LCD1602B.h"
由于采用了同一的平台Snail Emulator Kit,因此我们有能力提供一个Ready-to-Use
的模板,并在模板中提供了常用功能的示例,借助这个模板,你可以绕过LCD1602的驱动
编写,直接获得所需的功能:如字符串闪烁、滚频、字符串输出、10进制数字(支持小数)
输出等等。示例代码如下:
<font color=red>
示例代码演示效果:
i) 在LCD1602的第一行显示一个闪烁字幕,每次闪烁的内容都不一样,依次循环为:
www.OurAVR.com、Snail Studio和Emulator Kit。
ii) 在LCD1602的第一行,用一个闪烁的尖括号“<>”括住上面的闪烁字幕。
iii) 当没有收到任何串口数据的时候,在LCD1602的第一行显示浮点数 3.1415927。
ix) 在LCD1602的第二行靠后的位置,十进制显示当前的毫秒数,数字长度固定为5
x) 在LCD1602的第二行的最后一个字符位置,显示类似光盘旋转的效果,使用字符
串“-\|/”。实际上是通过流水滚动字幕的函数来实现的。
xi) 当有任何串口数据传入时,显示对应的ASCII字符,以及对应的十六进制数字
void main(void)
{
BYTE chWelcome[][17] = {
{"www.OurAVR.com "},
{"Snail Studio "},
{"Emulator Kit "}
};
float fNumber = PI;
BYTE *pchSTR = NULL;
System_INIT(); //代码初始化
//系统默认的波特率是19200,在SYS_Config.h中设置
//这里提供一个例子,将波特率改变为115200
USART0_INIT(115200);
//清屏
CLS
//隐藏光标
HIDE_ICON
//这里提供一个例子如何显示小数
pchSTR = ftoa(fNumber,NULL);
//定位到第2行1列
LOCATE(1,2);
PRINT(pchSTR);
while(TRUE) //超级循环
{
/*测试范例---------------BEGING-------------------*/
BYTE chTempData;
FlashStringGroup(chWelcome,3,2,1);
Flash("<",' ',1,1);
Flash(">",' ',16,1);
/*收到什么,发送什么*/
if (SERIAL_IN(chTempData))
{
BYTE chDISPSTR[2] = {0};
SERIAL_OUT(chTempData);
CLS
LOCATE(1,2);
chDISPSTR[0] = chTempData;
PRINT("->");
//输出ASCII字符
PRINT(chDISPSTR);
LOCATE(5,2);
//输出十六进制数字
PRINTN(chTempData,2);
}
else
{
/*
//这里提供了一个例子如何显示无符号整数
//但是需要stdlib.h的支持
BYTE chBuffer[17];
pchSTR = chBuffer;
utoa(chBuffer,g_wSystemTimer,10);
//utoa(chBuffer,g_wSystemTimer,16);//显示16进制数字
//utoa(chBuffer,g_wSystemTimer,8);//显示8进制数字
//utoa(chBuffer,g_wSystemTimer,2);//显示2进制数字
LOCATE(11,2);
PRINT(pchSTR);
*/
//驱动自带的函数,以10进制的形式输出整数
LOCATE(11,2);
PrintD(g_wSystemTimer,5);
}
//用一个显示位置的流水字幕产生的系统工作效果
{
BYTE strDISP[] = {'-',0xCD,'|','/',0};
RunString(strDISP,2,16,16);
}
/*测试范例-----------------END--------------------*/
}
}
</font>
![](http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_516955.jpg)
(原文件名:图像121.jpg)
![](http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_516956.jpg)
(原文件名:图像122.jpg)
![](http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_516957.jpg)
(原文件名:图像123.jpg)
![](http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_516958.jpg)
(原文件名:图像124.jpg)
点击此处下载演示视频 ourdev_516959.rar(文件大小:692K) (原文件名:摄像002.rar)
[相关下载]
点击此处下载 ourdev_517095.rar(文件大小:1.84M) (原文件名:Snail Emulator Kit.rar)
本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-11-27,13:17:56. |
|