標(biāo)題: LCD12864串行顯示程序。只需要2根線 [打印本頁]

作者: 騰飛的龍    時間: 2015-7-29 12:45
標(biāo)題: LCD12864串行顯示程序。只需要2根線
  1. /*****************************************************
  2.        
  3.         功能:串行方式12864顯示程序。只需要2根線。
  4.                  5腳的SID(數(shù)據(jù))和6腳CLK(時鐘)。1腳接地,2腳接VCC
  5.                 3腳接可調(diào)電阻,15腳PSB接地,17腳RET接VCC,19腳
  6.                 接VCC,20腳接地。其他引腳懸空
  7.         單片機:STC12C5608AD
  8.         晶振 :12M
  9.        
  10. *****************************************************/
  11. #include<reg52.h>
  12. #define uchar unsigned char
  13. #define uint unsigned int
  14. sbit SID=P2^0;
  15. sbit SCLK=P2^1;
  16. void delay(uint z)
  17. {
  18.    uint x,y;
  19.    for(x=z;x>0;x--)
  20.    for(y=210;y>0;y--);
  21. }
  22. /****************************************************
  23.         功能 : 按照液晶的串口通信協(xié)議,發(fā)送一個字節(jié)數(shù)據(jù)
  24. *****************************************************/
  25. void sendbyte(uchar zdata)
  26. {  
  27.         uint i;  
  28.         for(i=0; i<8; i++)  
  29.         {
  30.             if((zdata << i) & 0x80)   
  31.                 {   
  32.                         SID = 1;   
  33.                 }   
  34.                 else   
  35.                  {     
  36.                         SID = 0;   
  37.                 }   
  38.                          SCLK = 0;
  39.                         delay(2);  
  40.                         SCLK = 1;  
  41.         }  
  42. }
  43. /******************************************************
  44.         功能 : 寫串口指令
  45. ***************************************************/
  46. void write_com(uchar cmdcode)
  47. {  
  48.    
  49.         sendbyte(0xf8);//寫串口指令   
  50.         sendbyte(cmdcode & 0xf0);
  51.         sendbyte((cmdcode << 4) & 0xf0);  
  52.         delay(2);
  53. }
  54. /*****************************************************
  55.         功能 : 寫串口數(shù)據(jù)
  56. **************************************************/
  57. void write_data(uchar Dispdata)
  58. {   
  59.         sendbyte(0xfa);//寫串口數(shù)據(jù)  
  60.         sendbyte(Dispdata & 0xf0);   
  61.         sendbyte((Dispdata << 4) & 0xf0);
  62.         delay(2);
  63. }


  64. /***************************************************
  65.         功能 : 初始化函數(shù)
  66. ******************************************************/
  67. void lcdinit()
  68. {      
  69.         delay(200);
  70.         write_com(0x30);  
  71.         delay(10);   
  72.         write_com(0x0c);  
  73.         write_com(0x01);
  74.         delay(10);  
  75. }
  76. /**************************************************
  77.         功能 : 顯示字符串
  78. ****************************************************/
  79. void hzkdis(uchar code *s)
  80. {     
  81.         while(*s>0)
  82.         {   
  83.                 write_data(*s);   
  84.                 s++;   
  85.                 delay(10);     
  86.         }  
  87. }
  88. /*************************************************
  89.         功能 : 顯示子函數(shù)
  90. ****************************************************/
  91. void Test()  
  92. {   
  93.         write_com(0x03);
  94.         delay(50);      
  95.         write_com(0x81);
  96.         hzkdis("   MCU-51");  
  97.         write_com(0x91);   
  98.         hzkdis("************");  
  99.         write_com(0x89);   
  100.         hzkdis("我愛單片機!");  
  101.         write_com(0x98);   
  102.         hzkdis("************");
  103. }

  104. /*************************************************
  105.         --任意位置顯示一個漢字---
  106. ***************************************************/
  107. void hz_disp(uchar line,uchar row,uchar hz1,uchar hz2)
  108. {  
  109.         //line行1-4,row列0-7,hz1漢字的高8位,hz2,漢字的低8位
  110.         write_com(0x01); // 清除顯示,并且設(shè)定地址指針為00H
  111.    switch(line)
  112.    {
  113.            case 1:{write_com(0x80+row);write_data(hz1);write_data(hz2);break;}
  114.            case 2:{write_com(0x90+row);write_data(hz1);write_data(hz2);break;}
  115.            case 3:{write_com(0x88+row);write_data(hz1);write_data(hz2);break;}
  116.            case 4:{write_com(0x98+row);write_data(hz1);write_data(hz2);break;}
  117.    }
  118. }
  119. /*************************************************
  120.         功能 : 主函數(shù)
  121. ******************************************************/
  122. void Main()
  123. {   
  124.         lcdinit();  
  125.         delay(10);  
  126.         while(1)   
  127.         {
  128.         //        hz_disp(4,6,32,8) ;
  129.                 write_com(0x98);
  130.                 hzkdis("****大愛無疆****  ");
  131.                 Test();  
  132.                 delay(5000);   
  133.         }  
  134. }
復(fù)制代碼



作者: xfy    時間: 2015-7-29 12:55
正學(xué)習(xí)中   




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1