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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6981|回復: 2
打印 上一主題 下一主題
收起左側

STM32 128128液晶屏驅動 UC1617S 控制器

[復制鏈接]
跳轉到指定樓層
樓主
網上這個液晶驅動基本沒有,寫了幾天,實測基本功能都能實現,供大家參考


下載:
128128驅動.zip (6.67 KB, 下載次數: 106)

部分程序預覽:
  1. /************* 8080接口協議******************************/
  2. #include "128128driver.h"
  3. //#include "stm32f10x_gpio.h"
  4. //#include "stm32f10x_rcc.h"
  5. #include "ziku.h"
  6. #include "chziku.h"
  7. #include "systick.h"


  8. /************* 定義函數變量******************************/

  9. void lcd_busy(void);
  10. void SysTick_Init(void);
  11. void lcd_clear(void);
  12. extern const struct typFont16 Font16lib[];
  13.                                                                                                                                                                                                                                                                                                                                                                                                                                             
  14. /**********************************************************
  15. ****************** 配置LCD寫命令IO口**********************
  16. **********************************************************/
  17.   void lcd_writecmminit(void)
  18.   {       
  19.          GPIO_InitTypeDef GPIO_InitStructure;                                                                              //通用接口配置               
  20.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);                                              //使能PC引腳時鐘                          
  21.      GPIO_InitStructure.GPIO_Pin = WR|RD;                                                                             //使能讀寫控制引腳
  22.      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                                 
  23.      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                         //推挽輸出          
  24.          GPIO_Init(GPIOC, &GPIO_InitStructure);

  25.      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);                                                //使能PA引腳時鐘
  26.          GPIO_InitStructure.GPIO_Pin = RS|RST|GPIO_Pin_5|GPIO_Pin_4;                    //使能控制引腳
  27.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                                 
  28.      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                         //推挽輸出          
  29.          GPIO_Init(GPIOA, &GPIO_InitStructure);
  30.   }

  31. /**********************************************************
  32. ****************** 配置LCD寫IO口**************************
  33. **********************************************************/
  34. void lcd_writeinit(void)
  35. {
  36.          GPIO_InitTypeDef GPIO_InitStructure;                                                                              //通用接口配置
  37.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);                                                  //使能PE引腳時鐘                                           
  38.      GPIO_InitStructure.GPIO_Pin = D7|D6|D5|D4|D3|D2|D1|D0;                            //使能IO口     
  39.      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                                 
  40.      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                        //推挽輸出
  41.      GPIO_Init(GPIOE, &GPIO_InitStructure);  
  42.   }

  43. /**********************************************************
  44. ****************** 液晶寫數據函數**************************
  45. **********************************************************/
  46. void write_lcddat(uint16_t da)                                                               //sm命令還是數據,命令還是數據
  47. {  
  48.   lcd_writecmminit();
  49.   lcd_writeinit();
  50.   PS1_L();                                                                  //8080協議
  51.   CSB_L();                                                                                                                                        //片選
  52.   Delay_us(2);                                                                                                                            //延時20us
  53.   RS_H();                                                                                                                                    //數據有效
  54.   RD_H();                                                                                       
  55.   WR_L();                                                                                                                                        //寫控制命令
  56.   Delay_us(1);                                                                                                                               
  57.   GPIO_Write(GPIOE,(GPIOE->ODR&0x00ff)|(da<<8));
  58.   da=0;       
  59.   Delay_us(1);                                                                                                                                                  
  60.   WR_H();                                                                                 
  61.   Delay_us(1);
  62.   CSB_H();                                                                                                                                         
  63. }

  64. /**********************************************************
  65. ****************** 液晶寫命令函數**************************
  66. **********************************************************/
  67. void write_lcdcom(uint16_t cm)
  68. {
  69.   lcd_writecmminit();
  70.   lcd_writeinit();
  71.   PS1_L();                                                                  //8080協議
  72.   CSB_L();                                                                                                                                        //片選
  73.   Delay_us(2);                                                                                                                            
  74.   RS_L();                                                                                                                                        //命令有效
  75.   RD_H();
  76.   WR_L();                                                                                                                                        //寫控制命令
  77.   Delay_us(1);          
  78.   GPIO_Write(GPIOE,(GPIOE->ODR&0x00ff)|(cm<<8));                                                       
  79.   cm=0;                                                                                 
  80.   Delay_us(1);                                                                                                                                                                                                                                                                                                                                                        //_nop_();       
  81.   WR_H();
  82.   Delay_us(1);
  83.   CSB_H();
  84. }


  85. /**********************************************************
  86. ****************** LCD初始化函數**************************
  87. **********************************************************/
  88. void lcd_initial(void)
  89. {
  90.    
  91.     SysTick_Init();
  92.     PS1_L();
  93.         CSB_L();                           //片選有效
  94.         Delay_ms(30);          //延時20us
  95.     RST_L();                           //初始化使能
  96.         Delay_ms(30);          //延時20us               
  97.         RST_H();                           //初始化失能
  98.         Delay_ms(200);               //延時200ms

  99.     write_lcdcom(0xac);    //display off
  100.         write_lcdcom(0xc4);           //set LCD MAPPING CONTROL:MX=0,MY=1
  101.         write_lcdcom(0x80);           //disenable partial display
  102.         write_lcdcom(0xa2);                //set line rate:8.5Klps(line rate=frame*duty)
  103.         write_lcdcom(0xeb);     //set bias 1/11
  104.         write_lcdcom(0xf1);     //set com end
  105.     write_lcdcom(127);                //1/128 duty
  106.         write_lcdcom(0x8a);          //SET RAM ADDRESS CONTROL  AC1[1]模式
  107.         write_lcdcom(0xf9);     //SET WINDOW PROGRAM ENABLE
  108.         write_lcdcom(0xc8);         //nline           倒置命令
  109.         write_lcdcom(0x00);         //SET Page_C Address 初始化為0
  110.         write_lcdcom(0x81);     //SET Vbias potentiometer
  111.         write_lcdcom(65);                 //設置分辨率
  112.         write_lcdcom(0x2f);          //set pump control:internal VLCD  11b standard
  113.         write_lcdcom(0x2a);          //set PANEL LOADING
  114.         write_lcdcom(0x27);                //set temperature compensation -0.05%/c
  115.         lcd_clear();            //清屏
  116.         Delay_ms(20);
  117.         write_lcdcom(0xad);     //set Display Enable display on B/W MOwDE
  118.                
  119.         }
  120. /**********************************************************
  121. ***************** 清屏函數********************************                                                                                                                                                               
  122. **********************************************************/  
  123. void lcd_clear(void)
  124. {
  125.             uint16_t x,y;
  126.            for(x=0;x<32;x++)
  127.            {
  128.             write_lcdcom(0x60);                      //set row address RA[3:0]
  129.                   write_lcdcom(0x70);                         //set row address RA[6:4]
  130.             write_lcdcom(0x00+x);               //set page_c address
  131.                   for(y=0;y<128;y++)
  132.                   {
  133.                write_lcddat(0x00);                            //清屏
  134.                   }
  135.     }  
  136. }
  137.   /**********************************************************
  138. ********************** 位置函數*****************************
  139. **********************************************************/
  140. void Disp_Location(uint8_t x,uint8_t y)
  141. {
  142.             uint8_t yl,yh;
  143.          yl=(y<<4)>>4;
  144.      yh=y>>4;       
  145.          write_lcdcom(0x60|yl);                                                                           //set row address RA[3:0]
  146.          write_lcdcom(0x70|yh);                                                                                 //set row address RA[6:4]
  147.          write_lcdcom(0x00+x);                                          //set page_c address

  148. }
  149. /**********************************************************
  150. *****8*16**** 在特定位置顯示單個英文字符函數***************
  151. **********************************************************/                        
  152. void DispChar_EN(uint8_t x,uint8_t y,unsigned char cEChar)                                            //cEChar當前英文字符.x,y起始顯示位置
  153. {
  154.    uint8_t ii,jj;                                                                                                                                //定義字符個數,位個數,字符長度
  155.    uint8_t ucRelativePostion;                                                                                                          //定義字模相對位置函數
  156.    uint8_t temp;
  157.    uint8_t cytemp1,cytemp2;
  158.    uint8_t mm,newtemp1,newtemp2;
  159.    ucRelativePostion=cEChar-' ';                                                                   //去掉空字符                                                              
  160. /***********************************第一列****************************************************************/
  161.        Disp_Location(x,y);
  162.          for(ii=0;ii<16;ii++)
  163.          {
  164.            newtemp1=0;
  165.            temp=ucAscii_1608[ucRelativePostion][ii];
  166.            cytemp1=(temp<<4)>>4;                                               //取低四位轉八位
  167.            for(jj=0;jj<4;jj++)
  168.            {
  169.                  if((cytemp1>>jj)&0x01)
  170.                          mm=0x03;
  171.                  else
  172.                      mm=0x00;
  173.                   newtemp1|=mm<<(2*jj);
  174.            }
  175.                    write_lcddat(newtemp1);      
  176.          }
  177. /************************************第二列****************************************************************/
  178.      Disp_Location(x+1,y);
  179.             for(ii=0;ii<16;ii++)
  180.          {
  181.            newtemp2=0;
  182.            temp=ucAscii_1608[ucRelativePostion][ii];
  183.            cytemp2=temp>>4;                                                    //取高四位轉八位
  184.            for(jj=0;jj<4;jj++)
  185.            {
  186.                  if((cytemp2>>jj)&0x01)
  187.                          mm=0x03;
  188.                  else
  189.                      mm=0x00;
  190.                   newtemp2|=mm<<(2*jj);
  191.            }
  192.                    write_lcddat(newtemp2);      
  193.          }
  194.   }       
  195. /**********************************************************
  196. ***8*16*********在指定位置顯示英文字符串函數**************
  197. **********************************************************/
  198.   void DispString_EN(uint8_t x,uint8_t y,unsigned char *ptr)
  199.   {
  200.      while(*ptr!='\0')
  201.          {
  202.            if(x>30)                                                    //8*16字體 檢測字符長度
  203.            {
  204.               x=0;
  205.                   y=y+16;
  206.            }
  207.            if(y>127)                                                                                                          //8*16字體  檢測字符寬度
  208.            {
  209.               x=0;
  210.                   y=0;
  211.            }         
  212.           DispChar_EN(x,y,*ptr);
  213.           x+=2;                                                           //8*16字體  字符串依次右移
  214.           ptr++;
  215.           }
  216.   }

  217. /****************************************************************
  218. ***16*16*********在指定位置顯示中文字符函數*********************                //先弄個16*16的實驗,參數size先不定義
  219. ***************************************************************/

  220. void DispChar_CH(uint8_t x,uint8_t y, unsigned char font[2])                //cZChar當前英文字符.x,y起始顯示位置
  221. {
  222.          uint8_t nn;
  223.          uint8_t ii,jj;                                                        //nn字模字庫中字個數,kk字模0xXX,aa,bb轉換擴充位數個數
  224.              uint8_t temp1,temp2,cztemp1,cztemp2,cztemp3,cztemp4;       
  225.              uint8_t mm,newtemp1,newtemp2,newtemp3,newtemp4;                                                                                                          
  226.   for(nn=0;nn<sizeof(Font16lib)/sizeof(Font16lib[0]);nn++)         {               //遍歷字模庫,查找漢字
  227.      if( (font[0]==Font16lib[nn].Index[0])&&font[1]==Font16lib[nn].Index[1])
  228.          {        
  229. /***********************************第一列****************************************************************/
  230.             Disp_Location(x,y);                                          //擴展后第一列位置  
  231.                    for(ii=0;ii<16;ii++)
  232.                 {       
  233.                    newtemp1=0;                                                                                       
  234.                    temp2=Font16lib[nn].Msk[ii];
  235.                    cztemp1=(temp2<<4)>>4;                                     //第一列低四位
  236.                    for(jj=0;jj<4;jj++)
  237.                    {
  238.                    if((cztemp1>>jj)&0x01)                                                  //從高到低取數位
  239.                          mm=0x03;                                                                                          
  240.                         else
  241.                              mm=0x00;
  242.                         newtemp1|=mm<<(2*jj);                                     //第一列四位擴展到八位                    
  243.                     }
  244.                     write_lcddat(newtemp1);
  245.                         }
  246. /***********************************第二列****************************************************************/
  247.          Disp_Location(x+1,y);                                        //擴展后第二列位置
  248.                    for(ii=0;ii<16;ii++)
  249.                    {
  250.                     newtemp2=0;
  251.                     temp2=Font16lib[nn].Msk[ii];
  252.                         cztemp2=temp2>>4;                                                                                  //第一列高四位
  253.                         for(jj=0;jj<4;jj++)
  254.                         {
  255.                          if((cztemp2>>jj)&0x01)                                                   //從高到低取數位
  256.                          mm=0x03;
  257.                         else
  258.                              mm=0x00;
  259.                         newtemp2|=mm<<(2*jj);                                       //第二列四位擴展到八位       
  260.                         }
  261.                          write_lcddat(newtemp2);   
  262.                     }
  263. /***********************************第三列****************************************************************/
  264.           Disp_Location(x+2,y);                                          //擴展后第三列位置
  265.                         for(ii=0;ii<16;ii++)
  266.                         {
  267.                         newtemp3=0;
  268.                         temp1=Font16lib[nn].Msk[ii+16];
  269.                         cztemp3=(temp1<<4)>>4;
  270.                     for(jj=0;jj<4;jj++)
  271.                    {
  272.                    if((cztemp3>>jj)&0x01)                                                      //從高到低取數位
  273.                          mm=0x03;
  274.                         else
  275.                              mm=0x00;
  276.                         newtemp3|=mm<<(2*jj);                                         //第三列四位擴展到八位
  277.                }
  278.                   
  279.            write_lcddat(newtemp3);
  280.                    }
  281. /***********************************第四列****************************************************************/
  282.           Disp_Location(x+3,y);                                           //擴展后第四列位置
  283.                    for(ii=0;ii<16;ii++)
  284.                    {
  285.                    newtemp4=0;
  286.                     temp1=Font16lib[nn].Msk[ii+16];
  287.                     cztemp4=temp1>>4;                                               //第二列高四位
  288.                   
  289.                     for(jj=0;jj<4;jj++)
  290.                     {
  291.                     if((cztemp4>>jj)&0x01)                                                       //從高到低取數位
  292.                          mm=0x03;
  293.                          else
  294.                              mm=0x00;
  295.                         newtemp4|=mm<<(2*jj);                                          //第四列四位擴展到八位
  296.              }  
  297.                         write_lcddat(newtemp4);
  298.                         }
  299.                         }
  300.    }  
  301.    }                                                                                                                                                                                                                                                                                            
  302. /**********************************************************
  303. ***16*16************ 顯示中文英文數字字符串函數***********             
  304. **********************************************************/
  305. void DispString_CH(uint8_t x,uint8_t y,unsigned char *pztr)          
  306.   {
  307.         uint8_t hz=0;
  308.      while(*pztr!='\0')
  309.          {
  310.           if(*pztr<127)                                                                                             //ascii字符與漢字內碼的區別在于128做分界,大于界線的為漢字碼
  311.          {
  312.                     hz=0;                                                                                                          //顯示英文
  313.             if(x>30)                                                  //8*16字體 檢測字符長度
  314.            {
  315.               x=0;
  316.                   y=y+16;
  317.            }
  318.            if(y>127)                                                                                                    //8*16字體  檢測字符寬度
  319.            {
  320.               x=0;
  321.                   y=0;
  322.            }         
  323.           DispChar_EN(x,y,*pztr);
  324.             x+=2;                                                     //8*16字體  字符串依次右移
  325.             pztr++;                
  326.          }                                                                                                                          
  327.          else{                                                                                                             
  328.                   hz=1;                                                                                                        //漢字標識
  329.                 if(x>27)                                                  //16*16字體 檢測字符長度
  330.            {
  331.               x=0;
  332.                  y=y+16;
  333.            }
  334.             if(y>127)                                                                                                  //16*16字體  檢測字符寬度
  335.            {
  336.               x=0;
  337.                   y=0;
  338.            }
  339.             DispChar_CH(x,y,pztr);
  340.             x+=4;                                                     //16*16字體  字符串依次右移
  341.             pztr+=2;         
  342.            }
  343.          }                  
  344.   }

  345. /**********************************************************
  346. ****************** 點亮一橫線函數*************************
  347. **********************************************************/
  348. void Disp_Line(uint8_t sx,uint8_t sy,uint8_t ex,uint8_t ey)        //sx起始Page_C,ex結束Page_C,sy起始行,ey結束行
  349. {
  350.     uint8_t ii,jj;
  351.         for(ii=sx;ii<(ex+1);ii++)
  352.         {
  353.            for(jj=sy;jj<(ey+1);jj++)
  354.            {
  355.            Disp_Location(ii,jj);
  356.                    write_lcddat(0xff);       
  357.            }  
  358.         }  
  359. }

  360. /**********************************************************
  361. ****************** 點滅一橫線函數*************************
  362. **********************************************************/
  363. void Disp_Linem(uint8_t sx,uint8_t sy,uint8_t ex,uint8_t ey)        //sx起始Page_C,ex結束Page_C,sy起始行,ey結束行
  364. {
  365.     uint8_t ii,jj;
  366.         for(ii=sx;ii<(ex+1);ii++)
  367.         {
  368.            for(jj=sy;jj<(ey+1);jj++)
  369.            {
  370.            Disp_Location(ii,jj);
  371.                    write_lcddat(0x00);       
  372.            }  
  373.         }  
  374. }
  375. /**********************************************************
  376. ****************** 全像素函數*****************************
  377. **********************************************************/
  378. void ALL_PixOn(void)
  379. {
  380.     write_lcdcom(0xa5);                                                                                   //像素點全亮
  381. }  
  382. /**********************************************************
  383. ****************** 全部點亮********************************
  384. **********************************************************/
  385. void display_all(void)
  386. {
  387.        
  388.            unsigned char kk,jj;
  389.        
  390.            for(kk=0;kk<com/4;kk++)
  391.            {
  392.                   write_lcdcom(0x60);            //set row address RA[3:0]
  393.                   write_lcdcom(0x70);                //set row address RA[6:4]
  394.                   write_lcdcom(0x00+kk);   //set page_c address
  395.                   for(jj=0;jj<128;jj++)
  396.                   {
  397.              write_lcddat(0xff);
  398.                   }
  399.     }
  400. }
  401. /**********************************************************
  402. ****************** 空指令函數*****************************
  403. **********************************************************/
  404. void _nop(void)
  405. {
  406.    write_lcdcom(0xe3);          //空指令
  407. }
  408. /**********************************************************
  409. ****************** 系統軟重啟函數*************************
  410. **********************************************************/
  411. void Sys_Reset(void)
  412. {
  413.    write_lcdcom(0xe2);
  414. }

  415. /**********************************************************
  416. ****************** 光標函數*******************************
  417. **********************************************************/
  418. void Disp_Grid(uint8_t x,uint8_t y)
  419. {
  420.      while(1){
  421.            //Disp_Line(x,y,x,y+16);
  422.            DispChar_EN(x,y,'I');
  423.            Delay_s(1);
  424.            DispChar_EN(x,y,' ');
  425.            //Disp_Linem(x,y,x,y+16);
  426.            Delay_s(1);         
  427.     }
  428.                 
  429. }
  430. /**********************************************************
  431. ****************** 結束行指令******************************
  432. **********************************************************
  433. void End_Com(uint8_t y)
  434. {
  435.   write_lcdcom(0xf1);                //32位命令
  436.    write_lcdcom(0x00+y);             //具體設置
  437. }
  438. /**********************************************************
  439. ****************** 軟重啟函數*****************************
  440. **********************************************************
  441. void Soft_Reset(void)
  442. {
  443.     WR_H();
  444.     RST_L();
  445.     Delay_us(1);
  446.         RST_H();
  447.         Delay_ms(10);
  448.         WR_L();
  449. }

  450. /***********************************end of file*****************************************************/

復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:524969 發表于 2019-10-15 08:17 | 只看該作者
參考了,感謝樓主的分享
回復

使用道具 舉報

板凳
ID:592807 發表于 2020-3-27 09:48 | 只看該作者
虛心請教這個0x80的指令我怎么找不到,是我的uc617s資料太久了嗎?

M.png (56.19 KB, 下載次數: 55)

M.png

S.png (116.91 KB, 下載次數: 58)

S.png
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产一区二区三区 | 亚洲不卡在线观看 | 国产精品1区2区 | 色综合天天综合网国产成人网 | 国产精品国产三级国产aⅴ入口 | 99国产精品视频免费观看一公开 | 18成人在线观看 | 毛片a级毛片免费播放100 | 亚洲人成在线观看 | 欧美精品一区二区三区蜜桃视频 | 成年人黄色一级毛片 | 91正在播放 | 精品国产1区2区3区 一区二区手机在线 | 免费a级毛片在线播放 | 天天搞夜夜操 | 国产精品69毛片高清亚洲 | 精品无码三级在线观看视频 | 成年人黄色免费视频 | 天堂色区| 国产一区二区在线视频 | 一级黄a视频 | 免费观看国产视频在线 | 久久亚洲视频网 | 成人av观看 | 欧美三级在线 | 日韩日b视频 | 欧美一a| 99精品热视频 | 国产羞羞视频在线观看 | 国产色在线 | 国产精品日韩一区二区 | 天堂精品 | 黄免费观看视频 | 亚洲一区二区三区四区五区中文 | 一级a性色生活片久久毛片波多野 | 国产乱码精品一品二品 | 久久久不卡网国产精品一区 | 日本在线一二 | 精品亚洲永久免费精品 | 看片地址 | 欧美精品日韩 |