[原创] 【CC2530开发笔记01】带字库的LCD12232液晶模块应用开发

[复制链接]
3149|66
 楼主 | 2017-12-26 12:17 | 显示全部楼层 ||阅读模式
本帖最后由 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、案例实现代码开源。
  1. #include "ioCC2530.h"

  2. /*===========引脚端口定义(移植时需要修改)=============*/
  3. #define LCD_CS    P1_7
  4. #define LCD_SCLK  P1_6
  5. #define LCD_SID   P1_5
  6. /*======================================================*/

  7. /*==========================延时函数==========================*/
  8. void delay_lcd(unsigned char time)
  9. {
  10.   while(time--);
  11. }
  12. /*========================发送字节函数========================*/
  13. void SendByte_lcd(unsigned char data)
  14. {
  15.   LCD_CS = 1;
  16.   LCD_SCLK = 0;
  17.   for(unsigned char i=0; i<8; i++)
  18.   {
  19.     if(data & 0x80){
  20.       LCD_SID = 1;
  21.     }
  22.     else {
  23.       LCD_SID = 0;
  24.     }
  25.   data <<= 1;
  26.   LCD_SCLK = 1;
  27.   delay_lcd(50);
  28.   LCD_SCLK = 0;
  29.   }
  30.   LCD_CS = 0;
  31. }
  32. /*========================发送命令函数========================*/
  33. void SendCMD_lcd(unsigned char dat)
  34. {
  35.   SendByte_lcd(0xf8);
  36.   SendByte_lcd(dat & 0xf0);
  37.   SendByte_lcd((dat<<4)&0xf0);
  38. }
  39. /*========================发送数据函数========================*/
  40. void SendDAT_lcd(unsigned char dat)
  41. {
  42.   SendByte_lcd(0xfa);
  43.   SendByte_lcd(dat & 0xf0);
  44.   SendByte_lcd((dat<<4)&0xf0);
  45. }
  46. /*=======================显示字符串函数=========================
  47. 参数1:字符串的起始地址(0x00忽略起始地址)
  48. 参数2:显示的字符串内容
  49. ===============================================================*/
  50. void DisplayString(unsigned char addr,unsigned char *data)
  51. {
  52.   if(addr != 0x00)
  53.   {
  54.     SendCMD_lcd(addr);
  55.   }
  56.   while(*data != '\0')
  57.   {
  58.     SendDAT_lcd(*data);
  59.     data++;
  60.   }
  61. }
  62. /*=====================显示中文字符函数=========================
  63. 参数1:字符串的起始地址(0x00忽略起始地址)
  64. 参数2:显示的中文字符内容
  65. 参数3:显示的中文字符个数
  66. ===============================================================*/
  67. void DisplayChinese(unsigned char addr,unsigned char *data, unsigned char num)
  68. {
  69.   unsigned char n;
  70.   if(addr != 0x00)
  71.   {
  72.     SendCMD_lcd(addr);
  73.   }
  74.   for(n=0; n<num; n++)
  75.   {
  76.     SendDAT_lcd(*data);
  77.     data++;
  78.     SendDAT_lcd(*data);
  79.     data++;
  80.   }
  81. }
  82. /*=========================LCD清屏函数===========================*/
  83. void Clear_lcd()
  84. {
  85.   SendCMD_lcd(0x01);
  86.   delay_lcd(50);
  87. }
  88. /*=========================LCD初始化函数=========================*/
  89. void Init_lcd()
  90. {
  91.   delay_lcd(100);
  92.   //功能设置。基本指令集,一次送8位数据
  93.   SendCMD_lcd(0x30);  
  94.   delay_lcd(50);
  95.   //显示字符,光标从左到右位移,DDRAM地址加1
  96.   SendCMD_lcd(0x04);  
  97.   delay_lcd(50);
  98.   //显示设定。整体显示,不显示游标
  99.   SendCMD_lcd(0x0c);  
  100.   delay_lcd(50);
  101.   //清零。将DDRAM填满20H清零,地址计数器AC恢复到00H
  102.   SendCMD_lcd(0x01);  
  103.   delay_lcd(50);
  104.   //设定DDRAM地址计数器AC到00H,光标移到开头原点位置,不改变DARAM的内容
  105.   SendCMD_lcd(0x02);  
  106.   delay_lcd(50);
  107. }
  108. /*===========CC2530端口初始化函数(移植时需要修改)=============*/
  109. void Init_Port_lcd()
  110. {
  111.   P1SEL &= ~0xe0;     //设置为通用I/O端口
  112.   P1DIR |= 0xe0;      //将I/O端口设置为输出
  113. }

  114. void main()
  115. {
  116.   Init_Port_lcd();
  117.   Init_lcd();
  118.   
  119.   SendCMD_lcd(0x80);
  120.   DisplayChinese(0x00,"广职院",3);
  121.   SendDAT_lcd('*');
  122.   SendDAT_lcd('*');
  123.   DisplayChinese(0x00,"欧浩源",3);
  124.   
  125.   DisplayString(0x91,"2017/12/31");

  126.   while(1);
  127. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2017-12-26 12:41 | 显示全部楼层
| 2017-12-26 12:42 | 显示全部楼层
用的串口的12232
| 2017-12-26 16:09 | 显示全部楼层
| 2017-12-26 16:10 | 显示全部楼层
现在有串口的TFT,显示内容更丰富。
| 2017-12-26 16:11 | 显示全部楼层
给力的模块开发。
| 2017-12-26 16:11 | 显示全部楼层
IO资源不丰富的芯片,楼主都设计了这么强大的功能
| 2017-12-26 16:12 | 显示全部楼层
看成了1602,还想怎么能够显示汉字呢
| 2017-12-26 16:13 | 显示全部楼层
显示模块简单很多。
| 2017-12-26 16:13 | 显示全部楼层
LCD12232液晶模块的显示宽度有限。
| 2017-12-26 16:13 | 显示全部楼层
期待其他的功能设计。
| 2017-12-26 16:13 | 显示全部楼层
读写LCD的速度怎么样
 楼主 | 2017-12-26 16:19 | 显示全部楼层
lzbf 发表于 2017-12-26 16:10
现在有串口的TFT,显示内容更丰富。

推荐个型号,小弟玩玩。
 楼主 | 2017-12-26 16:21 | 显示全部楼层
lzbf 发表于 2017-12-26 16:13
LCD12232液晶模块的显示宽度有限。

对,每行最多只能显示7个半汉字
如果不够,可以选择12864
不过对于一般的单片机应用是可以的了
主要是它带字库,用起来方便
特别是做一些测试工作。
 楼主 | 2017-12-26 16:22 | 显示全部楼层
youtome 发表于 2017-12-26 16:13
读写LCD的速度怎么样

不快,但够了。
 楼主 | 2017-12-26 16:22 | 显示全部楼层
1988020566 发表于 2017-12-26 16:13
显示模块简单很多。

应该是驱动程序最简单的显示模块了。
 楼主 | 2017-12-26 16:23 | 显示全部楼层
youtome 发表于 2017-12-26 16:12
看成了1602,还想怎么能够显示汉字呢

哈哈哈哈,1602也能够显示汉字
不过复杂些而已。
 楼主 | 2017-12-26 17:04 | 显示全部楼层
houjiakai 发表于 2017-12-26 16:11
IO资源不丰富的芯片,楼主都设计了这么强大的功能

嗯...一款功能比较全面的开发板即将要出来了。
| 2017-12-27 09:02 | 显示全部楼层
路过,支持
 楼主 | 2017-12-28 08:38 | 显示全部楼层

Thank You 支持......
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表