本帖最后由 ohy3686 于 2017-12-26 12:18 编辑
【CC2530开发笔记01】带字库的LCD12232液晶模块的驱动实现与应用开发
1. 系统硬件连接
CC2530与带字库的液晶模块LCD12232进行串行通信连接。
P1_7-->CS片选信号,LCD的4脚,RS。
P1_6-->CLK时钟信号,LCD的5脚,R/W
P1_5-->SID数据信号,LCD的6脚,E
2. 应用运行效果
3、具体开发笔记见附件。
4、如需驱动程序库文件,发邮件给我。
5、案例实现代码开源。
#include "ioCC2530.h"
/*===========引脚端口定义(移植时需要修改)=============*/
#define LCD_CS P1_7
#define LCD_SCLK P1_6
#define LCD_SID P1_5
/*======================================================*/
/*==========================延时函数==========================*/
void delay_lcd(unsigned char time)
{
while(time--);
}
/*========================发送字节函数========================*/
void SendByte_lcd(unsigned char data)
{
LCD_CS = 1;
LCD_SCLK = 0;
for(unsigned char i=0; i<8; i++)
{
if(data & 0x80){
LCD_SID = 1;
}
else {
LCD_SID = 0;
}
data <<= 1;
LCD_SCLK = 1;
delay_lcd(50);
LCD_SCLK = 0;
}
LCD_CS = 0;
}
/*========================发送命令函数========================*/
void SendCMD_lcd(unsigned char dat)
{
SendByte_lcd(0xf8);
SendByte_lcd(dat & 0xf0);
SendByte_lcd((dat<<4)&0xf0);
}
/*========================发送数据函数========================*/
void SendDAT_lcd(unsigned char dat)
{
SendByte_lcd(0xfa);
SendByte_lcd(dat & 0xf0);
SendByte_lcd((dat<<4)&0xf0);
}
/*=======================显示字符串函数=========================
参数1:字符串的起始地址(0x00忽略起始地址)
参数2:显示的字符串内容
===============================================================*/
void DisplayString(unsigned char addr,unsigned char *data)
{
if(addr != 0x00)
{
SendCMD_lcd(addr);
}
while(*data != '\0')
{
SendDAT_lcd(*data);
data++;
}
}
/*=====================显示中文字符函数=========================
参数1:字符串的起始地址(0x00忽略起始地址)
参数2:显示的中文字符内容
参数3:显示的中文字符个数
===============================================================*/
void DisplayChinese(unsigned char addr,unsigned char *data, unsigned char num)
{
unsigned char n;
if(addr != 0x00)
{
SendCMD_lcd(addr);
}
for(n=0; n<num; n++)
{
SendDAT_lcd(*data);
data++;
SendDAT_lcd(*data);
data++;
}
}
/*=========================LCD清屏函数===========================*/
void Clear_lcd()
{
SendCMD_lcd(0x01);
delay_lcd(50);
}
/*=========================LCD初始化函数=========================*/
void Init_lcd()
{
delay_lcd(100);
//功能设置。基本指令集,一次送8位数据
SendCMD_lcd(0x30);
delay_lcd(50);
//显示字符,光标从左到右位移,DDRAM地址加1
SendCMD_lcd(0x04);
delay_lcd(50);
//显示设定。整体显示,不显示游标
SendCMD_lcd(0x0c);
delay_lcd(50);
//清零。将DDRAM填满20H清零,地址计数器AC恢复到00H
SendCMD_lcd(0x01);
delay_lcd(50);
//设定DDRAM地址计数器AC到00H,光标移到开头原点位置,不改变DARAM的内容
SendCMD_lcd(0x02);
delay_lcd(50);
}
/*===========CC2530端口初始化函数(移植时需要修改)=============*/
void Init_Port_lcd()
{
P1SEL &= ~0xe0; //设置为通用I/O端口
P1DIR |= 0xe0; //将I/O端口设置为输出
}
void main()
{
Init_Port_lcd();
Init_lcd();
SendCMD_lcd(0x80);
DisplayChinese(0x00,"广职院",3);
SendDAT_lcd('*');
SendDAT_lcd('*');
DisplayChinese(0x00,"欧浩源",3);
DisplayString(0x91,"2017/12/31");
while(1);
}
|