找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5902|回復: 2
收起左側

MSP430單片機驅動LCD1602液晶屏源程序

[復制鏈接]
ID:140725 發(fā)表于 2017-3-7 01:28 | 顯示全部樓層 |閱讀模式
MSP430單片機做的驅動常見的LCD1602液晶屏的源程序:
0.png
完整的程序下載:
MSP430單片機驅動LCD1602液晶屏源程序.rar (23.6 KB, 下載次數(shù): 333)




下面是部分源碼預覽:
  1. #include <msp430x22x4.h>    /*單片機寄存器頭文件*/
  2. #include "lcd1602.h"    /*LCD驅動頭文件*/
  3. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  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. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  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. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  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. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  59. /*- 名    稱:LCD_WriteData(unsigned char Dat)                         -*/
  60. /*- 功    能:LCD寫入數(shù)據(jù)                                              -*/
  61. /*- 輸入變量:unsigned char Dat(數(shù)據(jù))                               -*/
  62. /*- 輸出變量:無                                                      -*/
  63. /*-///////////////////////////////////////////////////////////////////-*/
  64. void LCD_WriteData(unsigned char Dat)
  65. {
  66.    RS_SET_H;        //數(shù)據(jù)   
  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. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  76. /*- 名    稱:LCD_SetXY(char x,char y)                                 -*/
  77. /*- 功    能:設定LCD寫入數(shù)據(jù)指針                                              -*/
  78. /*- 輸入變量:unsigned char Dat(數(shù)據(jù))                               -*/
  79. /*- 輸出變量:無                                                      -*/
  80. /*-///////////////////////////////////////////////////////////////////-*/
  81. void LCD_SetXY(char x,char y)
  82. {
  83.     switch(y)//數(shù)據(jù)指針=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. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  90. /*- 名    稱: LCD_DispStr(...)                                       -*/                          
  91. /*- 功    能:  LCD寫入字符                                              -*/
  92. /*- 輸入變量:x(列數(shù)),y(行數(shù)),*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);//數(shù)據(jù)有效重新設置位置
  101.     }
  102.     while(length!=0)
  103.     {
  104.        LCD_WriteData(*p);
  105.        p++;
  106.        length--;
  107.     }   
  108. }
  109. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  110. /*- 名    稱: LCD_DispStr(...)                                       -*/                          
  111. /*- 功    能:LCD寫入字符串,自動識別結束符號‘\0’                    -*/
  112. /*- 輸入變量:x(列數(shù)),y(行數(shù)),*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);//數(shù)據(jù)有效重新設置位置
  121.   }
  122.   while(*p!='\0')
  123.   {
  124.     LCD_WriteData(*p);
  125.     p++;
  126.   }
  127. }
  128. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  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. /*-////////////////////////////函數(shù)說明///////////////////////////////-*/
  152. /*- 名    稱:LCD_CLR()                                                -*/
  153. /*- 功    能:LCD清屏                                                  -*/
  154. /*- 輸入變量:無                                                      -*/
  155. /*- 輸出變量:無                                                      -*/
  156. /*-///////////////////////////////////////////////////////////////////-*/
  157. void LCD_CLR()
  158. {
  159.    LCD_WriteCommand(0x01); //清屏   
  160. }

復制代碼





評分

參與人數(shù) 2黑幣 +6 收起 理由
++___aa + 3 贊一個!
sssmmmnnn + 3 很給力!

查看全部評分

回復

使用道具 舉報

ID:324433 發(fā)表于 2018-5-8 16:37 | 顯示全部樓層
試試,感覺應該可以
回復

使用道具 舉報

ID:324433 發(fā)表于 2018-5-8 16:38 | 顯示全部樓層
試一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表