请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 682|回复: 0

[资料共享] MSP430单片机驱动LCD1602液晶屏源程序

[复制链接]

185

主题

6

回帖

585

E币

助理工程师

Rank: 3Rank: 3

积分
376
发表于 2017-5-2 15:27:26 | 显示全部楼层 |阅读模式
MSP430单片机做的驱动常见的LCD1602液晶屏的源程序:
捕获.PNG
完整的程序下载:
MSP430单片机驱动LCD1602液晶屏源程序.rar (23.6 KB, 下载次数: 0)

下面是部分源码预览:
  1. #include <msp430x22x4.h>    /*单片机寄存器头文件*/
  2. #include "lcd1602.h"    /*LCD驱动头文件*/
  3. /*-////////////////////////////函数说明///////////////////////////////-*/
  4. /*- 名    称:Serial_To_Parallel()                                              -*/
  5. /*- 功    能:输出通过74HC164由并行转为串行                            -*/
  6. /*- 输入变量:无                                                      -*/
  7. /*- 输出变量:无                                                      -*/
  8. /*-///////////////////////////////////////////////////////////////////-*/
  9. void Serial_To_Parallel(char dat)
  10. {
  11.    unsigned char i;
  12.    for(i=0;i<8;i++)
  13.    {   
  14.       if(dat&0x80)
  15.         Data_OUT_H;
  16.       else
  17.         Data_OUT_L;
  18.       CLK_H;
  19.       _NOP();//空延迟
  20.       _NOP();
  21.       _NOP();
  22.       CLK_L;
  23.       dat<<=1;
  24.     }
  25. }

  26. /*-////////////////////////////函数说明///////////////////////////////-*/
  27. /*- 名    称:Delay()                                         -*/
  28. /*- 功    能:延时                                                    -*/
  29. /*- 输入变量:无                                                      -*/
  30. /*- 输出变量:无                                                      -*/
  31. /*-///////////////////////////////////////////////////////////////////-*/
  32. void Delay(unsigned int count)
  33. {
  34.     unsigned int i=count;
  35.     while (i != 0)
  36.     {
  37.         i--;
  38.     }
  39. }
  40. /*-////////////////////////////函数说明///////////////////////////////-*/
  41. /*- 名    称:LCD_WriteCommand(unsigned char Com)                      -*/
  42. /*- 功    能:LCD写入命令                                              -*/
  43. /*- 输入变量:unsigned char Com(命令字)                             -*/
  44. /*- 输出变量:无                                                      -*/
  45. /*-///////////////////////////////////////////////////////////////////-*/
  46. void LCD_WriteCommand(unsigned char Com)
  47. {  
  48.   RS_SET_L; //命令
  49.   RW_SET_L; //写操作
  50.   _NOP();
  51.   Serial_To_Parallel(Com);  
  52.   _NOP();
  53.   E_SET_H;  
  54.   _NOP();
  55.   E_SET_L;//使能端下降沿沿写入
  56.   Delay(Delay_Count);
  57. }
  58. /*-////////////////////////////函数说明///////////////////////////////-*/
  59. /*- 名    称:LCD_WriteData(unsigned char Dat)                         -*/
  60. /*- 功    能:LCD写入数据                                              -*/
  61. /*- 输入变量:unsigned char Dat(数据)                               -*/
  62. /*- 输出变量:无                                                      -*/
  63. /*-///////////////////////////////////////////////////////////////////-*/
  64. void LCD_WriteData(unsigned char Dat)
  65. {
  66.    RS_SET_H;        //数据   
  67.    RW_SET_L;        //写操作
  68.    Serial_To_Parallel(Dat);
  69.    _NOP();
  70.    E_SET_H;
  71.    _NOP();
  72.    E_SET_L;//使能端下降沿沿写入
  73.    Delay(Delay_Count);
  74. }
  75. /*-////////////////////////////函数说明///////////////////////////////-*/
  76. /*- 名    称:LCD_SetXY(char x,char y)                                 -*/
  77. /*- 功    能:设定LCD写入数据指针                                              -*/
  78. /*- 输入变量:unsigned char Dat(数据)                               -*/
  79. /*- 输出变量:无                                                      -*/
  80. /*-///////////////////////////////////////////////////////////////////-*/
  81. void LCD_SetXY(char x,char y)
  82. {
  83.     switch(y)//数据指针=80+地址码(0-27H,40-67H)
  84.     {
  85.       case 1:LCD_WriteCommand(0x7f + x);break; //第1行   
  86.       case 2:LCD_WriteCommand(0xbf + x);break; //第2行
  87.     }
  88. }
  89. /*-////////////////////////////函数说明///////////////////////////////-*/
  90. /*- 名    称: LCD_DispStr(...)                                       -*/                          
  91. /*- 功    能:  LCD写入字符                                              -*/
  92. /*- 输入变量:x(列数),y(行数),*p字符串指针,length(长度)          -*/
  93. /*- 特殊说明:x或者y为0时候,液晶显示使用默认地址(不指定新地址)     -*/
  94. /*- 输出变量:无                                                      -*/
  95. /*-///////////////////////////////////////////////////////////////////-*/
  96. void LCD_DispCharArray(char x,char y,char *p,unsigned char length)
  97. {
  98.     if (x !=0x00 && y!=0x00)
  99.     {
  100.       LCD_SetXY(x,y);//数据有效重新设置位置
  101.     }
  102.     while(length!=0)
  103.     {
  104.        LCD_WriteData(*p);
  105.        p++;
  106.        length--;
  107.     }   
  108. }
  109. /*-////////////////////////////函数说明///////////////////////////////-*/
  110. /*- 名    称: LCD_DispStr(...)                                       -*/                          
  111. /*- 功    能:LCD写入字符串,自动识别结束符号‘\0’                    -*/
  112. /*- 输入变量:x(列数),y(行数),*p(字符串指针)                      -*/
  113. /*- 特殊说明:x或者y为0时候,液晶显示使用默认地址(不指定新地址)     -*/
  114. /*- 输出变量:无                                                      -*/
  115. /*-///////////////////////////////////////////////////////////////////-*/
  116. void LCD_DispStr(char x,char y,char *p)  //exp:LCD_DispStr(1,1,"LCD_Serial_test");
  117. {
  118.   if (x !=0x00 && y!=0x00)
  119.   {
  120.     LCD_SetXY(x,y);//数据有效重新设置位置
  121.   }
  122.   while(*p!='\0')
  123.   {
  124.     LCD_WriteData(*p);
  125.     p++;
  126.   }
  127. }
  128. /*-////////////////////////////函数说明///////////////////////////////-*/
  129. /*- 名    称:LCD_Init()                                               -*/
  130. /*- 功    能:LCD初始化                                                -*/
  131. /*- 输入变量:无                                                      -*/
  132. /*- 输出变量:无                                                      -*/
  133. /*-///////////////////////////////////////////////////////////////////-*/
  134. void LCD_Init()
  135. {
  136.    E_SET_OUT;                   //输出端口初始化部分
  137.    RW_SET_OUT;
  138.    RS_SET_OUT;
  139.    DataPort_SET_OUT;
  140.    E_SET_L;   //使能拉低
  141.    RW_SET_L;  //读写拉低
  142.    RS_SET_L;  //选择拉低
  143.    CLK_SET_OUT;
  144.    
  145.    LCD_WriteCommand(0x38);              //写命令部分
  146.    LCD_WriteCommand(0x01); //清屏
  147.    LCD_WriteCommand(0x06);
  148.    LCD_WriteCommand(0x0c); //开显示,不显示光标
  149.    LCD_WriteCommand(0x00);
  150. }
  151. /*-////////////////////////////函数说明///////////////////////////////-*/
  152. /*- 名    称:LCD_CLR()                                                -*/
  153. /*- 功    能:LCD清屏                                                  -*/
  154. /*- 输入变量:无                                                      -*/
  155. /*- 输出变量:无                                                      -*/
  156. /*-///////////////////////////////////////////////////////////////////-*/
  157. void LCD_CLR()
  158. {
  159.    LCD_WriteCommand(0x01); //清屏   
  160. }
复制代码


积分规则
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-18 15:11 , Processed in 0.046161 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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