久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6090|回復: 2
打印 上一主題 下一主題
收起左側(cè)

在stc15w單片機上的lcd12864顯示源程序(并口方式)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:342790 發(fā)表于 2018-7-8 09:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
基于在stc15w上的顯示
LCD12864實驗步驟:
1、將12864按照正確方向插到開發(fā)板J4上面;
1、MINI USB連接線給開發(fā)板通電下載程序,下載軟件中內(nèi)部IRC時鐘選擇11.0592MHZ;
2、下載程序后,撥動RP1調(diào)節(jié)顯示灰度,LCD12864顯示正常(若不行,則LCD12864上的可調(diào)電位器也要調(diào)節(jié))。


單片機源程序如下:
  1. /****************************************Copyright (c)息---------------------------------------------------------------------------------
  2. ** 文件名  :                main.c                                                         
  3. **--------------------------------------------------------------------------------------------------------
  4. ** 作    者:                三棱鏡
  5. ** 創(chuàng)建日期:                2016-4-25
  6. ** 初始版本:                V1.0
  7. ** 描    述:                LCD12864顯示實驗
  8. **--------------修改信息-----------------------------------------------------------------------------------
  9. ** 修改人  :                       
  10. ** 修改日期:               
  11. ** 當前版本:                               
  12. ** 修改記錄:                               
  13. **********************************************************************************************************/
  14. #include <15W4KxxS4.h>
  15. #include <stdint.h>
  16. #include "config.h"
  17. #include "lcd.h"
  18. #include "hal_delay.h"                       

  19. /***************************************************************************
  20. * 描  述 : 主函數(shù)
  21. * 參  數(shù) : 無
  22. * 返回值 : 無
  23. **************************************************************************/
  24. int main()
  25. {

  26. /////////////////////////////////////////////////
  27. //注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關的IO口均為
  28. //      高阻態(tài),需將這些口設置為準雙向口或強推挽模式方可正常使用
  29. //相關IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
  30. //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
  31. /////////////////////////////////////////////////
  32.         P0M1 = 0;        P0M0 = 0;        //設置P0.0~P0.7為準雙向口
  33.         P1M1 = 0;        P1M0 = 0;        //設置P1.0~P1.7為準雙向口
  34.         P3M1 = 0;        P3M0 = 0;        //設置P3.0~P3.7為準雙向口
  35.         P4M1 = 0;        P4M0 = 0;        //設置P4.0~P4.7為準雙向口
  36.         P5M1 = 0;        P5M0 = 0;        //設置P5.0~P5.7為準雙向口
  37.         P2M1 = 0; P2M0 = 0;
  38.                
  39.        
  40.         LCD_Init();        //LCD初始化
  41.         delay_ms(10);
  42.         Fill_GDRAM(0x00);  //清屏
  43.         delay_ms(10);

  44.   LCD_ShowString(1,2,8,"LCD12864");
  45.         LCD_ShowString(2,2,8,"液晶模塊");

  46.        
  47.         while(1);
  48. }
  49. /*********************************END FILE********************************************/       
復制代碼
  1. /****************************************Copyright (c)         
  2. **
  3. **--------------文件信息---------------------------------------------------------------------------------
  4. ** 文件名  :                lcd.c                                                         
  5. **--------------------------------------------------------------------------------------------------------
  6. ** 作    者:                三棱鏡
  7. ** 創(chuàng)建日期:                2016-9-10
  8. ** 初始版本:                V1.0
  9. ** 描    述:                LCD12864驅(qū)動程序
  10. **--------------修改信息-----------------------------------------------------------------------------------
  11. ** 修改人  :                       
  12. ** 修改日期:               
  13. ** 當前版本:                               
  14. ** 修改記錄:                               
  15. **********************************************************************************************************/
  16. #include <15W4KxxS4.h>
  17. #include <math.h>
  18. #include "config.h"
  19. #include "lcd.h"
  20. #include "hal_delay.h"


  21. /***************************************************************************
  22. * 描  述 : LCD12864液晶判忙程序。如LCD為“忙”狀態(tài),一直等待直到LCD空閑
  23. * 參  數(shù) : 無
  24. * 返回值 : 無
  25. **************************************************************************/
  26. void Busy(void)   
  27. {   
  28.         uchar busy;
  29.        
  30.         do  
  31.         {         
  32.                 RW = 1; RS = 0;   //讀                                          
  33.                 E = 1;            //使能液晶模塊.0=關閉使能端,1=打開使能端
  34.                 P0M0=0x00;
  35.                 P0M1=0x00;              //設置P2.0~P2.7為準雙向口
  36.                 busy=P0;          //讀取P2狀態(tài)      
  37.                 delay_5us(10);        
  38.                 E = 0;            //關閉液晶模塊使能端.0=關閉使能端,1=打開使能端     
  39.         }while(busy&0x80);  //判斷BUSY位是否工作:1=內(nèi)部在工作,0=空閑
  40. }  
  41. /***************************************************************************
  42. * 描  述 : LCD12864液晶模塊從當前地址讀RAM數(shù)據(jù)
  43. * 參  數(shù) : 無
  44. * 返回值 : Dat:讀取的數(shù)據(jù)
  45. **************************************************************************/
  46. uchar ReadDat(void)
  47. {
  48.   uchar Dat;
  49.   
  50.         P0 = 0xff;
  51.         Busy();         //判忙
  52.        
  53.         RW = 1;RS = 1;  //讀
  54.         E = 1;          //使能液晶模塊.0=關閉使能端,1=打開使能端
  55.   Dat=P0;         //保存讀取的數(shù)據(jù)
  56.         delay_5us(1);
  57.   E = 0;          //關閉液晶模塊使能端.0=關閉使能端,1=打開使能端      
  58.   delay_5us(1);
  59.   return Dat;
  60. }
  61. /***************************************************************************
  62. * 描  述 : LCD12864液晶命令寫入程序
  63. * 參  數(shù) : cmd[in]:寫入的命令
  64. * 返回值 : 無
  65. **************************************************************************/
  66. void Write_Cmd(uchar cmd)
  67. {      
  68.         Busy();       //判忙
  69.           
  70.         RW=0; RS=0;   //寫指令                     
  71.         P0M1 = 0;          
  72.         P0M0 = 0xff;        //設置P2.0~P2.7為推挽輸出
  73.         P0=cmd;       //寫入命令
  74.        
  75.         E=1;          //使能液晶模塊.0=關閉使能端,1=打開使能端
  76.         delay_5us(1);  
  77.         E=0;          //關閉液晶模塊使能端.0=關閉使能端,1=打開使能端  
  78.   delay_5us(1);        
  79. }
  80. /***************************************************************************
  81. * 描  述 : LCD12864液晶數(shù)據(jù)寫入程序
  82. * 參  數(shù) : dat[in]:寫入的數(shù)據(jù)
  83. * 返回值 : 無
  84. **************************************************************************/
  85. void Write_Data(uchar dat)
  86. {   
  87.         Busy();       //判忙                   
  88.         RW=0;RS=1;    //寫數(shù)據(jù)   
  89.                 
  90.         P0M1 = 0;       
  91.         P0M0 = 0xff;        //設置P2.0~P2.7為推挽輸出       
  92.         P0=dat;       //寫入數(shù)據(jù)
  93.   
  94.         E =1;         //使能液晶模塊
  95.         delay_5us(3);     
  96.         E =0;         //關閉液晶模塊使能端
  97. }  

  98. /**************************************************************************
  99. * 描  述 : 指定位置顯示單個字符
  100. * 參  數(shù) : row[in]:行,范圍1~4
  101. *        :column[in]:列,范圍0~7  
  102. *        :chr[in]:字符編碼
  103. * 返回值 : 無
  104. **************************************************************************/
  105. void LCD_ShowChar(uchar row,uchar column,uchar chr)
  106. {             
  107.         uchar Address;
  108.        
  109.         //row判斷第幾行,column判斷第幾列,0x80為液晶行初始地址   
  110.         if(row == 1)Address=0x80+column;   
  111.         if(row == 2){Address=0x90+column;}        
  112.         if(row == 3){Address=0x88+column;}   
  113.         if(row == 4){Address=0x98+column;}  
  114.         Write_Cmd(Address);  //寫入地址命令到LCD12864     
  115.         Write_Data(chr);     //寫入顯示數(shù)據(jù)到LCD12864   
  116. }

  117. /***************************************************************************
  118. * 描  述 : 字符串顯示
  119. * 參  數(shù) : row[in]:行,范圍1~4
  120. *        :column[in]:列,范圍0~7  
  121. *        :num[in]:字符個數(shù),注意一個漢字=2個字符
  122. *        :s[in]:指向待顯示的字符串
  123. * 返回值 : 無
  124. **************************************************************************/
  125. void LCD_ShowString(uchar row,uchar column,uchar num,uchar *s)   
  126. {     
  127.         uchar Address;   
  128.        
  129.         //row判斷第幾行,column判斷第幾列,0x80為液晶行初始地址   
  130.         if(row == 1)Address=0x80+column;   
  131.         if(row == 2){Address=0x90+column;}        
  132.         if(row == 3){Address=0x88+column;}   
  133.         if(row == 4){Address=0x98+column;}   
  134.         Write_Cmd(Address);    //寫入顯示起始地址
  135.         while(num)             //寫入顯示數(shù)據(jù)的大小  
  136.         {   
  137.                 Write_Data(*(s++));  //寫入顯示數(shù)據(jù)到LCD12864   
  138.                 num--;         
  139.         }   
  140. }

  141. /***************************************************************************
  142. * 描  述 : 填充,當如數(shù)數(shù)據(jù)為0的時候即可實現(xiàn)清屏
  143. * 參  數(shù) : dat[in]:填充的數(shù)據(jù)
  144. * 返回值 : 無
  145. **************************************************************************/
  146. void Fill_GDRAM(uchar dat)
  147. {
  148.   uchar i,j,k;

  149.   uchar GDRAM_X=0x80;
  150.   uchar GDRAM_Y=0x80;

  151.   for(i=0;i<2;i++)
  152.   {
  153.     for(j=0;j<32;j++)
  154.     {
  155.       for(k=0;k<8;k++)
  156.       {
  157.         Write_Cmd(0x34);
  158.         Write_Cmd(GDRAM_Y+j);
  159.         Write_Cmd(GDRAM_X+k);
  160.         Write_Data(dat);
  161.         Write_Data(dat);
  162.       }
  163.     }
  164.     GDRAM_X=0x88;
  165.   }

  166.   Write_Cmd(DRAM_ON);//開啟繪圖模式
  167.   Write_Cmd(0x30);   //恢復基本指令集,關閉繪圖模式
  168. }

  169. /***************************************************************************
  170. * 描  述 : LCD12864液晶初始化程序
  171. * 參  數(shù) : 無
  172. * 返回值 : 無
  173. **************************************************************************/
  174. void LCD_Init(void)     
  175. {     
  176.    E = 0;         

  177.          delay_ms(1);                  
  178.          Write_Cmd(0x30);   // 基本指令集     
  179.          delay_ms(1);      
  180.          Write_Cmd(0x02);   // 地址歸位     
  181.          delay_ms(1);      
  182.          Write_Cmd(0x0c);   // 整體顯示打開,游標關閉     
  183.          delay_ms(1);      
  184.          Write_Cmd(0x06);   // 游標右移     
  185.          delay_ms(1);      
  186.          Write_Cmd(0x80);   // 設定顯示的起始地址     
  187.          delay_ms(1);      
  188.          Write_Cmd(0x01);   // 清除顯示
  189.          delay_ms(10);      // 這個延時必須要有,否則可能會出現(xiàn)花屏
  190. }

  191. /*********************************END FILE********************************************/
復制代碼

所有資料51hei提供下載:

實驗52 - LCD12864顯示字符漢字.rar (90.61 KB, 下載次數(shù): 135)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:370415 發(fā)表于 2018-7-12 18:28 | 只看該作者
感覺好高科技,能不能教我兩招?
回復

使用道具 舉報

板凳
ID:60656 發(fā)表于 2018-7-16 09:49 | 只看該作者
無法下載,扣了10幣
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区精品 | 成人免费毛片在线观看 | 伊人欧美视频 | 亚洲一区国产 | 91麻豆精品国产91久久久久久久久 | 国色天香综合网 | аⅴ资源新版在线天堂 | 国产成人精品一区二区三区四区 | 在线观看国产h | 精品国模一区二区三区欧美 | 综合国产在线 | 国产精品久久久久久久久久三级 | 精品视频在线观看 | 久久久久久久一级 | 免费观看www| 夜夜操天天艹 | 欧美成人激情 | 国产精品日女人 | 在线视频 亚洲 | 中文字幕在线一区二区三区 | 国产情侣啪啪 | 一区二区在线 | 一区二区三区日 | 成人精品国产一区二区4080 | 亚洲啊v在线| 91精品一区二区三区久久久久 | 69热视频在线观看 | 久久天天躁狠狠躁夜夜躁2014 | 免费福利视频一区二区三区 | 欧美久久久久久久久 | 91视频免费观看 | 欧美视频在线播放 | 欧美日韩中文在线 | 黄色香蕉视频在线观看 | 亚洲欧美日韩精品久久亚洲区 | 日韩免费福利视频 | 久久综合国产 | 国产精品久久久久久久免费大片 | 亚洲第一在线 | 日韩在线视频免费观看 | 亚洲综合首页 |