找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10397|回复: 7
打印 上一主题 下一主题
收起左侧

LCD12864显示屏使用心得体会与例程及资料下载

  [复制链接]
跳转到指定楼层
楼主
1.第一次使用12864时不知道如何接线,由于开始把BLA和VCC接到了MSP430端口的VCC端,使得显示屏亮度变暗,后来才知道BLA19脚)和VCC2脚)是12864的工作电压,最好接到5V的供电电源上,MSP430端口Vcc输出电压是3.5V左右,可以用万用表测试。


2.12864串行测试要接8条线。DB0~DB7不需要接。根据软件程序,R/w5脚)E6脚)两个分别接MSP430的P1.4、P1.5。
VCC2脚)BLA19脚)两个应该接+5V工作电压,GND1脚)BLK20脚)两个应该接在同一个地。+5V电压可以使用另一片51单片机提供。把51单片机的Vcc和GND跳线帽摘下来,两个引脚都要接满才能导通。PSB15脚)接地说明是串口通讯。RS4脚)接高电平——可以接MSP430的VCC,3.5V足够是高电平了。

3.使用13级之前的学长们留下的程序库,发现MSP430中有一些地方需要改进,就是初始化程序中应该包含有清屏指令,而他们都没有将这条指令写入,屏幕上会出现一些乱码。


4.基本的MSP430    LCD12864程序中包含有的基本的函数:
写命令函数(对显示屏进行一些操作,比如清屏,显示全部字,关闭游标等)
写数据函数(想要在屏幕上输出的东西)
初始化函数(对显示屏进行初始化,调用到写命令函数)
设置坐标函数(了解12864的坐标,第一行是0x80,第二行0x90,第三行0x88,第四行0x98)
写字符串或写数字函数(输出自己想要的字符,但是要注意12864一行只能显示8个字,而且不一定能全部正确显示,会出现各种各样的问题,需要自己慢慢排查接线或者重新调试)

MSP430单片机源程序如下:
  1. //12864液晶串行显示测试程序
  2. //P1.4模拟SID(接第5脚),P1.5模拟SCLK(接第6脚)
  3. //4脚(CS信号)接高电平选通,15脚(PSB信号)接地选择串行方式
  4. //17脚(RST信号)根据注释提示悬空
  5. #include <MSP430g2231.h>

  6. void int_port(void)                    //管脚初始化                       
  7. {
  8.   P1SEL&=~BIT4;                        //P1.4模拟SID,设置为i/o口输出方向                        
  9.   P1DIR|=BIT4;                          
  10.   P1OUT&=~BIT4;                           
  11.   P1SEL&=~BIT5;                        //P1.5模拟SCLK,设置为i/o口输出方向                           
  12.   P1DIR|=BIT5;                           
  13.   P1OUT&=~BIT5;                           
  14. }
  15. void delay(unsigned int t)             //延时函数
  16. {                                      //粗略延时,满足时序要求
  17. unsigned int i,j;
  18. for(i=0; i<t;  i++)
  19.         for(j=0; j<10; j++);
  20. }
  21. void sendbyte(unsigned char zdata)     //数据传送函数
  22. {
  23.   unsigned char code_seg7;            
  24.   unsigned char serial_clk;              
  25.   unsigned char serial_shift;               
  26.   code_seg7=zdata;                              
  27.   serial_shift=0x80;                       
  28.   for(serial_clk=0; serial_clk<8; serial_clk++)
  29.   {                                   
  30.     if(code_seg7&serial_shift)            
  31.     {
  32.       P1OUT|=BIT4;                     //SID为1
  33.     }
  34.     else
  35.     {
  36.       P1OUT&=~BIT4;                    //SID为0                       
  37.     }
  38.     P1OUT&=~BIT5;                      //产生时钟信号下沿
  39.     P1OUT|=BIT5;                       //产生时钟信号上沿                             
  40.     serial_shift=serial_shift>>1;      //准备发送下一位数据           
  41.   }   
  42. }
  43. void write_com(unsigned char cmdcode)  //写命令函数
  44. {                                      //串口控制格式(11111AB0)
  45.                                 //A数据方向控制,A=H时读,A=L时写
  46.                                        //B数据类型选择,B=H时为显示数据,B=L时为命令
  47. sendbyte(0xf8);                //MCU向LCD发命令

  48.         sendbyte(cmdcode & 0xf0);      //发高四位数据(数据格式D7D6D5D4_0000)
  49. sendbyte((cmdcode << 4) & 0xf0);//发低四位数据(数据格式D3D2D1D0_0000)
  50. delay(2);                      //延时等待
  51. }
  52. void write_data(unsigned char Dispdata)//写数据函数
  53. {

  54. sendbyte(0xfa);                //MCU向LCD发数据
  55. sendbyte(Dispdata & 0xf0);     //发高四位数据
  56. sendbyte((Dispdata << 4) & 0xf0);//发低四位数据
  57. delay(2);
  58. }
  59. void lcdinit()                         //LCD初始化
  60. {  
  61. delay(20000);                  //复位等待(内部自带上电复位电路),时间较长
  62. write_com(0x30);               //功能设定:基本指令集操作               
  63. delay(50);                     //延时等待
  64. write_com(0x0c);               //整体显示,关游标
  65. write_com(0x01);               //屏幕清零            
  66. delay(50);
  67. }
  68. void print_string(unsigned char *s)          //发送字符串
  69. {  
  70. while(*s > 0)                  //C语言里字符串末尾自动加“\0”(ASCII码值为0)
  71.     {
  72.   write_data(*s);        //发送字符对应的ASCII码,12864指针可设置自动指向下一个显示地址
  73.   s++;      
  74.   delay(50);
  75.     }
  76. }
  77. void Test()
  78. {       unsigned char dat1,dat2,dat3,dat4;
  79. dat1=1;dat2=2;dat3=3;dat4=4;//显示dat1—4的值,如果dat1=1不转换为ASCII码,则输出的应该是31而不是1
  80.         write_com(0x03);              //发指令,地址归位
  81. delay(50);                     //延时   
  82. write_com(0x80);               //第一行首地址0x80
  83. print_string("德州仪器MSP430"); //第一行显示。一行能显示8个字,一个中文顶2个字母或数字
  84.         write_com(0x94);               //第二行首地址0x90,从第四个开始显示
  85.         write_data(dat1+0x30);         //发送dat1的ASCII码,显示dat1的值
  86.         write_data(dat2+0x30);         //发送dat1的ASCII码,显示dat2的值
  87.         write_data(dat3+0x30);         //发送dat1的ASCII码,显示dat3的值
  88.         write_data(dat4+0x30);         //发送dat1的ASCII码,显示dat4的值
  89.         write_data('H');               //发送H的ASCII码,显示H
  90.         write_data('z');               //发送z的ASCII码,显示z
  91.         write_com(0x90);
  92.         print_string("频率:");
  93.         delay(200);                    //较长时间延时,保证下次操作前LCD完成上述功能处于非忙状态
  94. }
  95. void main()//正确结果:屏幕显示:德州仪器MSP430(第一行) 频率:  1234HZ(第二行)
  96. {
  97. WDTCTL=WDTPW+WDTHOLD;          //关闭看门狗
  98. int_port();                    //端口初始化
  99. lcdinit();                     //LCD初始化
  100. Test();                        //测试
  101. …………
  102. …………
  103. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
12864.rar (14.87 MB, 下载次数: 317)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:266106 发表于 2017-12-27 07:48 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

板凳
ID:30541 发表于 2019-1-2 13:56 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

地板
ID:485647 发表于 2019-3-6 16:04 | 只看该作者
谢谢 楼主分享
回复

使用道具 举报

5#
ID:592519 发表于 2019-7-30 15:36 | 只看该作者
感谢楼主分享
回复

使用道具 举报

6#
ID:631216 发表于 2019-10-28 09:47 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

7#
ID:647145 发表于 2019-12-8 21:01 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

8#
ID:632129 发表于 2020-1-17 17:26 | 只看该作者
十分感谢楼主的分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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