OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2948|回复: 4

有谁用过金鹏的OCM12864-5这个LCD吖

[复制链接]

34

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1088
金钱
1088
注册时间
2017-3-10
在线时间
172 小时
发表于 2020-5-18 12:35:49 | 显示全部楼层 |阅读模式
16金钱
我驱动在网上找的,按步骤对照过手册,就是最后运行的时候LCD不显示,背光没问题,我怀疑是发送给LCD命令的时候没成功,所以像写0,开启显示这些都没反应。但写命令是按照手册写的。不知道问题出在哪里
  1. #include        "includes.h"
  2. #include "ziku.h"

  3. LL_GPIO_InitTypeDef GPIO_InitStruct = {0};    //定义用于定义所以引脚为输出的变量。

  4. /*--------------------------------------------------------------*/
  5. //函数名称: delay
  6. //输入参数: 时间参数t
  7. //输出参数: 无
  8. //函数功能: 延时子程序
  9. //其他说明:
  10. //编写日期:
  11. //编写人:
  12. /*--------------------------------------------------------------*/
  13. void delay (uint us)
  14. {
  15.     while(us--);
  16. }

  17. /*--------------------------------------------------------------*/
  18. //函数名称: IOInitOut
  19. //输入参数: 无
  20. //输出参数: 无
  21. //函数功能: 把所有端口初始化为推挽输出模式的函数。
  22. //其他说明:
  23. //编写日期:
  24. //编写人:
  25. /*--------------------------------------------------------------*/
  26. void IOInitOut(void)           
  27. {
  28.         LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
  29.         LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
  30.         LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
  31.         LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOH);
  32.        
  33.         GPIO_InitStruct.Pin = Data_Ora;
  34.         GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  35.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  36.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
  37.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  38.        
  39.         GPIO_InitStruct.Pin = RST|EN_LED;
  40.         GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  41.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  42.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
  43.         LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  44.        
  45.         GPIO_InitStruct.Pin = RS|RW|EN;
  46.         GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  47.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  48.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
  49.         LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  50.        
  51.         GPIO_InitStruct.Pin = CS1|CS2;
  52.         GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  53.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  54.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
  55.         LL_GPIO_Init(GPIOH, &GPIO_InitStruct);
  56.        
  57.        
  58. }
  59. /*--------------------------------------------------------------*/
  60. //函数名称: IOInitIn
  61. //输入参数: 无
  62. //输出参数: 无
  63. //函数功能: 把数据引脚初始化为浮空输入的函数。
  64. //其他说明:
  65. //编写日期:
  66. //编写人:
  67. /*--------------------------------------------------------------*/
  68. void IOInitIn(void)           
  69. {
  70.   GPIO_InitStruct.Pin = Data_Ora;
  71.         GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
  72.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
  73.         LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
  74.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  75.            
  76. }
  77. /*--------------------------------------------------------------*/
  78. //函数名称: LCD_Busy_Check
  79. //输入参数: 无
  80. //输出参数: 无
  81. //函数功能: 判忙函数。
  82. //其他说明:
  83. //编写日期:
  84. //编写人:
  85. /*--------------------------------------------------------------*/
  86. void LCD_Busy_Check (void)
  87. {
  88. //        LOG_INFO("LCD_Busy_Check");
  89.         u16 temp;
  90.         IOInitIn();        //把数据引脚定义为浮空输入;
  91.     LL_GPIO_ResetOutputPin(GPIOC,RS);  //RS = 0.
  92.     LL_GPIO_SetOutputPin(GPIOC, RW);    //RW = 1.
  93.         do{
  94.             LL_GPIO_SetOutputPin(GPIOC, EN);    //EN = 1.
  95.             temp = LL_GPIO_ReadInputPort(GPIOA);//只要位7的值,位7是忙标志位。
  96.                 delay(2500);
  97.             LL_GPIO_ResetOutputPin(GPIOC,EN);  //EN = 0;
  98. //                temp=0x80&temp;
  99.         }while(temp&0x0001);
  100. //LOG_INFO("LCD_Busy_Check_end");
  101.     IOInitOut();      //把所有引脚定义为输出。

  102. }
  103. /*--------------------------------------------------------------*/
  104. //函数名称: LCD_Write_DatorCmd
  105. //输入参数: 数据或命令   内容
  106. //输出参数: 无
  107. //函数功能: 写入数据或命令函数
  108. //其他说明:
  109. //编写日期:
  110. //编写人:
  111. /*--------------------------------------------------------------*/
  112. void LCD_Write_DatorCmd (uchar dat_comm,uchar content)
  113. {
  114.     LCD_Busy_Check();
  115.         if(dat_comm)
  116.                 LL_GPIO_SetOutputPin(GPIOC,RS);    //RS = 1.
  117.         if(dat_comm == 0)
  118.     LL_GPIO_ResetOutputPin(GPIOC,RS);  //RS = 0.
  119.         LL_GPIO_ResetOutputPin(GPIOC, EN);  //EN = 0;
  120.     LL_GPIO_ResetOutputPin(GPIOC, RW);  //RW = 0.
  121.         delay(50);
  122. //         LL_GPIO_SetOutputPin(GPIOC,EN);    //EN = 1.
  123.     GPIOA->ODR=((GPIOA->ODR & 0xff00) | content);
  124.          delay(50);
  125.     LL_GPIO_SetOutputPin(GPIOC,EN);    //EN = 1.
  126.     LL_GPIO_ResetOutputPin(GPIOC,EN);  //EN = 0;
  127.        
  128. }
  129. /*--------------------------------------------------------------*/
  130. //函数名称:LCD_read_dat
  131. //输入参数: 无
  132. //输出参数: 数据
  133. //函数功能: 读出数据
  134. //其他说明: 1、先只须空读一次, 以后接着就无须空读;2、空读之后读出的数据都是有效的!!!
  135. //编写日期:
  136. //编写人:
  137. /*--------------------------------------------------------------*/
  138. unsigned char LCD_read_dat(void)
  139. {
  140.     uchar Read_Dat;
  141.     LCD_Busy_Check ();
  142.         IOInitIn();        //把数据引脚定义为浮空输入;
  143.                 LL_GPIO_ResetOutputPin(GPIOC, EN);
  144.     LL_GPIO_SetOutputPin(GPIOC, RS);
  145.     LL_GPIO_SetOutputPin(GPIOC, RW);
  146.                 LL_GPIO_SetOutputPin(GPIOH, CS1);   
  147.                 LL_GPIO_SetOutputPin(GPIOH, CS2);
  148.                 LL_GPIO_SetOutputPin(GPIOC, EN);
  149.     Read_Dat = (u8)(LL_GPIO_ReadInputPort(GPIOA) & 0x00ff);
  150.         delay(50);
  151.     LL_GPIO_ResetOutputPin(GPIOC, EN);
  152.         IOInitOut();      //把所有引脚定义为输出。
  153.     return Read_Dat;
  154. }
  155. //*--------------------------------------------------------------*/
  156. //函数名称: LCD_write_dat
  157. //输入参数: 数据
  158. //输出参数: 无
  159. //函数功能: 写点阵函数
  160. //其他说明:
  161. //编写日期:
  162. //编写人:
  163. /*--------------------------------------------------------------*/
  164. void LCD_write_dat (uchar data1, uchar data2)
  165. {
  166.     uchar i,j;
  167.         LL_GPIO_SetOutputPin(GPIOH, CS1);   
  168.         LL_GPIO_SetOutputPin(GPIOH, CS2);   
  169.     LCD_Write_DatorCmd(comm, Display_On);
  170.     for(j = 0; j < 1; j++)
  171.     {
  172.         LCD_Write_DatorCmd (comm, X_Page_Addr+j);
  173.         LCD_Write_DatorCmd (comm, Start_Line);
  174.         LCD_Write_DatorCmd (comm, Y_Col_Addr);
  175.         for(i = 0; i < 1; i++)
  176.         {
  177.           LCD_Write_DatorCmd (dat, data1);
  178.           LCD_Write_DatorCmd (dat, data2);
  179.         }
  180.     }
  181. }
  182. /*--------------------------------------------------------------*/
  183. //函数名称: LCD_byte_pos
  184. //输入参数: x: 0 - 7        (行);y: 0 -127        (列)
  185. //输出参数: 无
  186. //函数功能: 液晶字节定位(8*1)
  187. //其他说明:
  188. //编写日期:
  189. //编写人:
  190. /*--------------------------------------------------------------*/
  191. void LCD_byte_pos(unsigned char x, unsigned char y)
  192. {
  193.         if(y < 64)           LCD_sel_left                //左半屏
  194.         else {y -= 64; LCD_sel_right}        //右半屏
  195.         LCD_Write_DatorCmd(comm, X_Page_Addr + x);        //页地址0-7
  196.         LCD_Write_DatorCmd(comm, Y_Col_Addr + y);        //列地址0-63
  197. }
  198. /*--------------------------------------------------------------*/
  199. //函数名称: LCD_char_pos
  200. //输入参数: x: 0 - 7        (行);y: 0 -15        (列)
  201. //输出参数: 无
  202. //函数功能: 液晶字符定位(8*8)
  203. //其他说明:
  204. //编写日期:
  205. //编写人:
  206. /*--------------------------------------------------------------*/

  207. void LCD_char_pos(unsigned char x, unsigned char y)
  208. {
  209.         y <<= 3;//16*8=128,左移三位相当于乘以8
  210.         LCD_byte_pos(x, y);//字节定位函数
  211. }

  212. /*--------------------------------------------------------------*/
  213. //函数名称: LCD_Write_HanZ
  214. //输入参数: 位置(x,y) 大小8xl*yl   row_xl行(每行row_yl个
  215. //输出参数: 无
  216. //函数功能: /*---指定位置(x,y)显示row_xl行(每行row_yl个)汉字(大小8xl*yl)---*/
  217. //其他说明:
  218. //编写日期:
  219. //编写人:
  220. /*--------------------------------------------------------------*/

  221. void LCD_Write_HanZ (uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,const uchar *chn)
  222. {
  223.   uchar i,j,k,l,a;
  224.   LCD_Write_DatorCmd (comm, Display_On);
  225.   for(l = 0; l < row_xl; l++)     
  226.   {
  227.     for(k = 0; k < row_yl; k++)
  228.     {
  229.       for(j = 0;j < xl; j++)
  230.       {
  231.         LCD_Write_DatorCmd (comm,X_Page_Addr + x + l*xl + j);
  232.         LCD_Write_DatorCmd (comm,Start_Line);
  233.         LCD_Write_DatorCmd (comm,Y_Col_Addr + y + k*yl);
  234.         a = l*xl*yl*row_yl + k*xl*yl + j*yl;
  235.         for(i = 0; i < yl; i++)
  236.           LCD_Write_DatorCmd(dat, chn[a+i]);
  237.       }
  238.     }
  239.   }
  240. }
  241. /*--------------------------------------------------------------*/
  242. //函数名称: LCD_printNumandChar
  243. //输入参数: x: 0 - 3        (行);y: 0 -15        (列)
  244. //输出参数: 无
  245. //函数功能: 液晶字符输出(8*16字体)
  246. //其他说明:
  247. //编写日期:
  248. //编写人:
  249. /*--------------------------------------------------------------*/
  250. void LCD_printNumandChar (unsigned char x, unsigned char y, const uchar *h_dat)
  251. {
  252.         unsigned char i, j;

  253.         for(j = 0; j < 2; j++)
  254.         {
  255.                 LCD_char_pos((x * 2 + j), y);//LCD_char_pos是0-7的行显示(x * 2 + j)为此范围
  256.                 for(i = 0; i < 8; i++) LCD_Write_DatorCmd(dat, (h_dat[8 * j + i]));               
  257.         }
  258. }
  259. ///*--------------------------------------------------------------*/
  260. ////函数名称: LCD_printstring
  261. ////输入参数: x: 0 - 3        (行);y: 0 -15        (列);字符串,字符串长度num
  262. ////输出参数: 无
  263. ////函数功能: 液晶字符串输出(8*16字体)
  264. ////其他说明:
  265. ////编写日期:
  266. ////编写人:
  267. ///*--------------------------------------------------------------*/
  268. //
  269. void LCD_printstring(unsigned char x, unsigned char y, const uchar  *h_dat, unsigned char num)
  270. {
  271.         unsigned char i;
  272.     for(i = 0; i < num; i++)
  273.     {
  274.         LCD_printNumandChar(x, y++, h_dat); //y++会变换左右屏显示不用认为指定
  275.         h_dat += 16;
  276.     }
  277. }
  278. /*--------------------------------------------------------------*/
  279. //函数名称: LCD_Show_Num8and16Char
  280. //输入参数: x: 0 - 3        (行);y: 0 -15        (列);字符串
  281. //输出参数: 无
  282. //函数功能: 查表显示8*16单个字体
  283. //其他说明:
  284. //编写日期:
  285. //编写人:   
  286. /*--------------------------------------------------------------*/
  287. void LCD_Show_Num8and16Char(uchar x, uchar y, const uchar *character)
  288. {
  289.     uchar i;
  290.     for(i = 0; i < GB_8_num; i++)
  291.     {
  292.           if( (GB_8[i].Index == character[0]) )
  293.             break;
  294.     }
  295.     LCD_printNumandChar(x, y, GB_8[i].Msk);
  296. }
  297. /*--------------------------------------------------------------*/
  298. //函数名称: LCD_Show_Num8and16CharStrings
  299. //输入参数: x: 0 - 3        (行);y: 0 -15        (列);字符串
  300. //输出参数: 无
  301. //函数功能: 查表显示8*16字符串
  302. //其他说明:
  303. //编写日期:
  304. //编写人:   
  305. /*--------------------------------------------------------------*/
  306. void LCD_Show_Num8and16CharStrings(uchar x, uchar y, const uchar *characters)
  307. {
  308. //    while(*characters)
  309. //    {
  310. //        if((*characters) > '9' || (*characters) < '0')
  311. //            break;
  312. //        LCD_Show_Num8and16Char(x, y++, characters);
  313. //        characters = characters + 1;
  314. //        if((*characters) > '9' || (*characters) < '0')
  315. //            continue;
  316. //        
  317. //    } continue 用于while循环没有效果!
  318.     for(; *characters != '\0'; *characters++)
  319.     {
  320.         
  321.         if((*characters) > 128)// 显示除汉字以外的任何字符
  322.         {   
  323.             y ++;
  324.             continue;
  325.         }  
  326.         LCD_Show_Num8and16Char(x, y++, characters);      
  327.     }
  328. }
  329. /*--------------------------------------------------------------*/
  330. //函数名称:LCD_printch
  331. //输入参数: x: 0 - 3(行) y: 0 -7        (列) 汉字字符
  332. //输出参数: 无
  333. //函数功能: 液晶汉字输出(16*16字体)
  334. //其他说明:取码规则:        低位在前, 列行扫描, 阴码(1-亮, 0-灭)
  335. //编写日期:
  336. //编写人:
  337. /*--------------------------------------------------------------*/
  338. void LCD_printch(uchar x,uchar y, const uchar *h_dat)
  339. {
  340.         unsigned char i, j;

  341.         x <<= 1;
  342.     y <<= 1;
  343.         for(j = 0; j < 2; j++)
  344.         {
  345.                 LCD_char_pos((x + j), y);
  346.                 for(i = 0; i < 16; i++) LCD_Write_DatorCmd(dat, (h_dat[16 * j + i]));               
  347.         }
  348. }
  349. /*--------------------------------------------------------------*/
  350. //函数名称:LCD_printsh
  351. //输入参数: x: 0 - 3(行) y: 0 -7        (列) 汉字词组  num: num < 8 - y
  352. //输出参数: 无
  353. //函数功能: 液晶汉字输出(16*16字体)
  354. //其他说明:取码规则:        低位在前, 列行扫描, 阴码(1-亮, 0-灭) 一次最多显示八个汉字!
  355. //编写日期:
  356. //编写人:  
  357. /*--------------------------------------------------------------*/
  358. void LCD_printsh(unsigned char x, unsigned char y, const uchar  *h_dat, unsigned char num)
  359. {
  360.         unsigned char i;
  361.        
  362.         for(i = 0; i < num; i++)
  363.     {
  364.         LCD_printch(x, y++, h_dat); //y++会变换左右屏显示不用人为指定
  365.         h_dat += 32;
  366.     }
  367. }


  368. /*--------------------------------------------------------------*/
  369. //函数名称:LCD_Show_HanZ
  370. //输入参数: x: 0 - 3(行) y: 0 -7        (列) 汉字字符
  371. //输出参数: 无
  372. //函数功能: 液晶汉字查表显示输出(16*16字体)
  373. //其他说明:取码规则:        低位在前, 列行扫描, 阴码(1-亮, 0-灭)
  374. //编写日期:
  375. //编写人:   
  376. /*--------------------------------------------------------------*/
  377. void LCD_Show_HanZ(uchar x, uchar y, const uchar *character)
  378. {
  379.     uchar i;
  380.     for(i = 0; i < GB_16_num; i++)
  381.     {
  382.         if( (GB_16[i].Index[0] == character[0]) && (GB_16[i].Index[1] == character[1]) )
  383.             break;
  384.     }
  385.     LCD_printch(x, y, GB_16[i].Msk);
  386. }
  387. /*--------------------------------------------------------------*/
  388. //函数名称:LCD_Show_HanZiShuZu
  389. //输入参数: x: 0 - 3(行) y: 0 -7        (列) 汉字字符
  390. //输出参数: 无
  391. //函数功能: 液晶汉字词组查表显示输出(16*16字体)
  392. //其他说明:取码规则:        低位在前, 列行扫描, 阴码(1-亮, 0-灭)
  393. //编写日期:
  394. //编写人:   
  395. /*--------------------------------------------------------------*/
  396. void LCD_Show_HanZiShuZu(uchar x, uchar y, const uchar *characters)
  397. {
  398.       for(; *characters != '\0'; characters += 2 )
  399.       {
  400.           if((*characters) <= 128)// 只显示汉字
  401.           {  
  402.               y++;
  403.               continue;
  404.           }
  405.           LCD_Show_HanZ(x, y++, characters);
  406.                
  407.       }
  408. }
  409. /*--------------------------------------------------------------*/
  410. //函数名称:LCD_Show_Content
  411. //输入参数: x: 0 - 3(行) y: 0 -7        (列) 汉字字符
  412. //输出参数: 无
  413. //函数功能: 液晶显示指定内容
  414. //其他说明:取码规则:        低位在前, 列行扫描, 阴码(1-亮, 0-灭)
  415. /*--------------------------------------------------------------*/
  416. void LCD_Show_Content (uchar x, uchar y, const uchar *characters)
  417. {
  418.     LCD_Show_Num8and16CharStrings(x, y, characters);
  419.     LCD_Show_HanZiShuZu( x, y, characters);
  420. }
  421. /*--------------------------------------------------------------*/
  422. //函数名称: LCD_read_8bytes
  423. //输入参数: x: 0 - 7        (行);y: 0 -15        (列)
  424. //输出参数: 无
  425. //函数功能: 读出8bytes数据
  426. //其他说明:
  427. //编写日期:
  428. //编写人:
  429. /*--------------------------------------------------------------*/
  430. void LCD_read_8bytes(unsigned char x, unsigned char y, unsigned char *read_dat)
  431. {
  432.         unsigned char i;
  433.         LCD_char_pos(x, y);
  434.     LCD_read_dat();        //空读一次!!!
  435.         for(i = 0; i < 8; i++)
  436.         {
  437.                 *read_dat = LCD_read_dat();
  438.                 read_dat++;       
  439.         }
  440. }
  441. /*--------------------------------------------------------------*/
  442. //函数名称: LCD_inverse
  443. //输入参数: x: 0 - 7        (行);y: 0 -15        (列);字符串
  444. //输出参数: 无
  445. //函数功能: 液晶字符反色区域(8*8字体),反显指定位置的字符
  446. //其他说明:
  447. //编写日期:
  448. //编写人:
  449. /*--------------------------------------------------------------*/
  450. void LCD_inverse(unsigned char x, unsigned char y)
  451. {
  452.         unsigned char i;
  453.         unsigned char read_buffer[8];
  454.         LCD_read_8bytes(x, y, read_buffer);
  455.         LCD_char_pos(x, y);
  456.         for(i = 0; i < 8; i++)
  457.         LCD_Write_DatorCmd(dat,~read_buffer[i]);
  458. }
  459. /*--------------------------------------------------------------*/
  460. //函数名称:LCD_scr_inverse
  461. //输入参数: 无
  462. //输出参数: 无
  463. //函数功能: 液晶全屏反色显示
  464. //其他说明:
  465. //编写日期:
  466. //编写人:
  467. /*--------------------------------------------------------------*/
  468. void LCD_scr_inverse(void)
  469. {
  470.         unsigned char i, j;

  471.         for(j = 0; j < 8; j++)
  472.         {
  473.                 for(i = 0; i < 16; i++)
  474.             LCD_inverse(j, i);
  475.         }
  476. }

  477. /*--------------------------------------------------------------*/
  478. //函数名称:LCD_inversec816
  479. //输入参数: x: 0 - 3        (行) y: 0 -15        (列)
  480. //输出参数: 无
  481. //函数功能: 液晶字符反色输出(8*16字体)
  482. //其他说明:
  483. //编写日期:
  484. //编写人:
  485. /*--------------------------------------------------------------*/
  486. void LCD_inversec816(unsigned char x, unsigned char y)
  487. {
  488.         x <<= 1;//横坐标乘以2
  489.         LCD_inverse(x, y);
  490.         LCD_inverse(x+1, y);
  491. }

  492. /*--------------------------------------------------------------*/
  493. //函数名称:LCD_inverses
  494. //输入参数: x: 0 - 3/7        (行) y: 0 -15        (列) num: num < 16 - y
  495. //输出参数: 无
  496. //函数功能: 液晶字符串反色输出
  497. //其他说明:
  498. //编写日期:
  499. //编写人:
  500. /*--------------------------------------------------------------*/
  501. void LCD_inverse816s(unsigned char x, unsigned char y, unsigned char num)
  502. {
  503.         while(num--) LCD_inversec816(x, y++);
  504. }

  505. /*--------------------------------------------------------------*/
  506. //函数名称:LCD_inversech
  507. //输入参数: x: 0 - 3(行) y: 0 -7        (列)
  508. //输出参数: 无
  509. //函数功能: 液晶汉字反色区域(16*16字体)
  510. //其他说明:
  511. //编写日期:
  512. //编写人:
  513. /*--------------------------------------------------------------*/
  514. void LCD_inversech(unsigned char x, unsigned char y)
  515. {
  516.         x <<= 1;
  517.         y <<= 1;
  518.         LCD_inverse(x, y);
  519.         LCD_inverse(x, y+1);
  520.         LCD_inverse(x+1, y);
  521.         LCD_inverse(x+1, y+1);
  522. }


  523. /*--------------------------------------------------------------*/
  524. //函数名称:LCD_inversech
  525. //输入参数: x: 0 - 3(行) y: 0 -7        (列) num: num < 8 - y        汉字个数
  526. //输出参数: 无
  527. //函数功能: 液晶汉字词组反色区域(16*16字体)
  528. //其他说明:
  529. //编写日期:
  530. //编写人:
  531. /*--------------------------------------------------------------*/

  532. void LCD_inversesh(unsigned char x, unsigned char y, unsigned char num)
  533. {
  534.         while(num--)
  535.         LCD_inversech(x, y++);
  536. }
  537. /*--------------------------------------------------------------*/
  538. //函数名称: LCD_init_12864
  539. //输入参数: 无
  540. //输出参数: 无
  541. //函数功能:初始化函数
  542. //其他说明:
  543. //编写日期:
  544. //编写人:
  545. /*--------------------------------------------------------------*/
  546. void LCD_init_12864(void)
  547. {
  548.         LOG_INFO("LCD_init_12864");
  549.         LL_GPIO_ResetOutputPin(GPIOB, RST);
  550.     delay(150);
  551.     LL_GPIO_SetOutputPin(GPIOB, RST);
  552.          LL_GPIO_SetOutputPin(GPIOH, CS1);   
  553.          LL_GPIO_SetOutputPin(GPIOH, CS2);
  554.     LCD_Write_DatorCmd (comm, Display_Off);
  555.     LCD_Write_DatorCmd (comm, Display_On);
  556.           LCD_Write_DatorCmd (comm, Start_Line);       
  557. }
  558. /*---------------显示1-----------------*/
  559. void disp1 (void)
  560. {
  561.         LOG_INFO("disp1");
  562.         LL_GPIO_SetOutputPin(GPIOB, EN_LED);
  563.          LL_GPIO_SetOutputPin(GPIOH, CS1);   
  564.         LL_GPIO_SetOutputPin(GPIOH, CS2);
  565.     LCD_write_dat(0x00,0x00);             //清0
  566.     LCD_Show_Content (0, 0, "3-1     G=15  ");
  567.     LCD_Show_Content (1, 0, "3-1     G=15  ");
  568.     LCD_Show_Content (2, 0, "3-1     G=15  ");
  569.     LCD_Show_Content (3, 0, "3-1     G=15  ");
  570.     delay(500);
  571. //        LCD_write_dat(0x00,0xFF);
  572. //        LL_GPIO_ResetOutputPin(GPIOB, EN_LED);
  573. //    LCD_Show_Content (0, 0, "1.1 当前温度");
  574. //    LCD_Show_Content (1, 0, "1.2.2 时间设置 ");
  575. //    LCD_Show_Content (2, 0, "1.3.3 输入数据 ");
  576. //    LCD_Show_Content (3, 0, "1.4.4 请继续确定");
  577. //    LCD_inversesh(0, 0, 8);
  578. }


复制代码


最佳答案

查看完整内容[请看2#楼]

找到原因了,屏幕写的3.3,我就用的MCU3.3供电,我接5V对比度就能调节出来。可能是屏给我拿错了,3.3过它自己内部那个DCDC,最终供不足电压。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-18 12:35:49 | 显示全部楼层
回复

使用道具 举报

34

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1088
金钱
1088
注册时间
2017-3-10
在线时间
172 小时
 楼主| 发表于 2020-5-18 12:35:50 | 显示全部楼层
找到原因了,屏幕写的3.3,我就用的MCU3.3供电,我接5V对比度就能调节出来。可能是屏给我拿错了,3.3过它自己内部那个DCDC,最终供不足电压。
回复

使用道具 举报

34

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1088
金钱
1088
注册时间
2017-3-10
在线时间
172 小时
 楼主| 发表于 2020-5-18 12:36:54 | 显示全部楼层
用的是低功耗芯片用的LL库编写。大家看看我有没啥地方写错了
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-5-18 15:13:20 | 显示全部楼层
自己一步一步调试看看
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-2 20:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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