找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3010|回复: 4
打印 上一主题 下一主题
收起左侧

proteus8.9 stm32 lcd12864无显示

[复制链接]
跳转到指定楼层
楼主
我在程序里已经定义了E RW RS CS1 CS2等管脚,也都说明了,为什么在我自己画的这个图上面,这几个管脚都没有定义啊,但是在我参考的那个是可以显示的,下面是程序,请问一下大佬们问题在哪

lcd.h:
  1. #ifndef __LCD_H
  2. #define        __LCD_H

  3. #include "stm32f10x.h"
  4. #include "word.h"
  5. #include "sys.h"

  6. #define LCD12864_GPIO     GPIOC
  7. #define LCD12864_Periph   RCC_APB2Periph_GPIOC
  8. #define LCD12864_E_GPIO   GPIO_Pin_8
  9. #define LCD12864_RW_GPIO  GPIO_Pin_9
  10. #define LCD12864_RS_GPIO  GPIO_Pin_10
  11. #define LCD12864_CS2_GPIO GPIO_Pin_11
  12. #define LCD12864_CS1_GPIO GPIO_Pin_12
  13. #define LCD12864_RES_GPIO GPIO_Pin_13
  14. #define LCD12864_DATA_GPIO     GPIO_Pin_0|GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6|GPIO_Pin_7

  15. #define LCD12864_RES_0  GPIO_ResetBits(LCD12864_GPIO,LCD12864_RES_GPIO)
  16. #define LCD12864_RES_1  GPIO_SetBits(LCD12864_GPIO,LCD12864_RES_GPIO)

  17. #define LCD12864_E_0    GPIO_ResetBits(LCD12864_GPIO,LCD12864_E_GPIO)
  18. #define LCD12864_E_1    GPIO_SetBits(LCD12864_GPIO,LCD12864_E_GPIO)

  19. #define LCD12864_RW_W   GPIO_ResetBits(LCD12864_GPIO,LCD12864_RW_GPIO)
  20. #define LCD12864_RW_R   GPIO_SetBits(LCD12864_GPIO,LCD12864_RW_GPIO)

  21. #define LCD12864_RS_CMD  GPIO_ResetBits(LCD12864_GPIO,LCD12864_RS_GPIO)
  22. #define LCD12864_RS_DATA GPIO_SetBits(LCD12864_GPIO,LCD12864_RS_GPIO)

  23. #define LCD12864_CS1_ON   GPIO_ResetBits(LCD12864_GPIO,LCD12864_CS1_GPIO)
  24. #define LCD12864_CS1_OFF  GPIO_SetBits(LCD12864_GPIO,LCD12864_CS1_GPIO)

  25. #define LCD12864_CS2_ON  GPIO_ResetBits(LCD12864_GPIO,LCD12864_CS2_GPIO)
  26. #define LCD12864_CS2_OFF GPIO_SetBits(LCD12864_GPIO,LCD12864_CS2_GPIO)

  27. //开启或关闭
  28. #define ON  1
  29. #define OFF 0

  30. //LCD命令
  31. #define CMD_DIS_ON   0X3F
  32. #define CMD_DIS_OFF  0X3E
  33. #define CMD_BUSY     0X80
  34. #define CMD_COLUNM   0XC0
  35. #define CMD_LINE     0X40
  36. #define CMD_PAGE     0XB8

  37. //显示屏幕选择
  38. #define DIS_NONE  0
  39. #define DIS_LEFT  1
  40. #define DIS_RIGHT 2
  41. #define DIS_ALL   3

  42. //尺寸
  43. #define SMALL  1
  44. #define MIDDLE 2
  45. #define LONG   3

  46. //方向选择
  47. #define UP   1
  48. #define DOWN 2


  49. //内部处理函数
  50. void LCD_CMD_DIS(u8 Switch);   //开关函数
  51. void LCD_CMD_COLUNM(u8 Colunm);//指定初始行
  52. void LCD_CMD_Line(u8 Line);    //写入列
  53. void LCD_CMD_COLUNM(u8 Colunm); //写入页
  54. void LCD_INITIAL_COLUNM(u8 Colunm);//初始行
  55. void LCD_DATA_WRIRE(u8 data);  //写一位数据
  56. void LCD_CMD_PAGE(u8 Page);    //初始页

  57. //外部调用函数
  58. void LCD_Init(void);           //初始化
  59. void LCD_DIS_Char(u8 row,u8 col,u8* data,int size);//显示字符
  60. void LCD_MODE_ROLL(u8 path,u8 step,u8 direction,u16 delay);//滚动模式
  61. void LCD_DIS_Number(u8 row,u8 col,float num,int size);//显示数字
  62. void LCD_CLEAR_COL(u8 row);//清零一行
  63. void LCD_CLEAR_ALL(void);//清屏
  64. void LCD_DIS_WORD(u8 row,u8 col,u8* data,int size);//写字
  65. #endif  



  66. main.h:

  67. #include "stm32f10x.h"
  68. #include "delay.h"
  69. #include "sys.h"
  70. #include "lcd.h"
  71. #include "adc.h"
  72. #include "bsp_key.h"

  73. void display_20200505()
  74. {
  75.         u8 xym[5]={11,12,1,2,3};
  76.         u8 time[2] = {13,14};
  77.         u8 company[2]={17,18};
  78.         LCD_DIS_PICTURE();        
  79.         LCD_CLEAR_ALL();
  80.         LCD_DIS_WORD(2,25,xym,LONG);
  81.         LCD_DIS_WORD(5,20,time,LONG);
  82.   LCD_DIS_Char(5,50,"20200505",MIDDLE);
  83.         LCD_CLEAR_ALL();
  84.         LCD_DIS_WORD(1,20,company,LONG);
  85.         LCD_DIS_Char(1,60,"g",MIDDLE);
  86. }

  87. int main(void)
  88. {
  89.         u32 adc_data=1;
  90.         u8 display_flage=0;
  91.         u8 flage=0;
  92.         u8* mode="g";
  93.         u8 clean=0;
  94.         LCD_Init();
  95.         Key_GPIO_Config();
  96.         ADC_GPIO_Config();
  97.         display_20200505();
  98.         while(1)
  99.         {
  100.                
  101. }


  102. lcd.c:
  103. #include "lcd.h"
  104. #include "delay.h"

  105. static        u8 INITIAL_COLUNM=0;

  106. void LCD_FUNCTION_Config(void)
  107. {
  108.                 GPIO_InitTypeDef LCD_Struct;
  109.                 RCC_APB2PeriphClockCmd(LCD12864_Periph,ENABLE);
  110.                 LCD_Struct.GPIO_Mode = GPIO_Mode_Out_PP;
  111.                 LCD_Struct.GPIO_Speed = GPIO_Speed_50MHz;
  112.         
  113.                 LCD_Struct.GPIO_Pin = LCD12864_RES_GPIO;
  114.                 GPIO_Init(LCD12864_GPIO,&LCD_Struct);
  115.         
  116.                 LCD_Struct.GPIO_Pin = LCD12864_E_GPIO;
  117.                 GPIO_Init(LCD12864_GPIO,&LCD_Struct);
  118.         
  119.           LCD_Struct.GPIO_Pin = LCD12864_RS_GPIO;
  120.                 GPIO_Init(LCD12864_GPIO,&LCD_Struct);
  121.         
  122.                 LCD_Struct.GPIO_Pin = LCD12864_RW_GPIO;
  123.                 GPIO_Init(LCD12864_GPIO,&LCD_Struct);
  124.         
  125.                 LCD_Struct.GPIO_Pin = LCD12864_CS1_GPIO;
  126.                 GPIO_Init(LCD12864_GPIO,&LCD_Struct);
  127.         
  128.                 LCD_Struct.GPIO_Pin = LCD12864_CS2_GPIO;
  129.                 GPIO_Init(LCD12864_GPIO,&LCD_Struct);
  130. }  

  131. void LCD_GPIO_Config(void)
  132. {
  133.           GPIO_InitTypeDef LCD_Struct;
  134.                 RCC_APB2PeriphClockCmd(LCD12864_Periph,ENABLE);
  135.                 LCD_Struct.GPIO_Mode = GPIO_Mode_Out_OD;
  136.                 LCD_Struct.GPIO_Speed = GPIO_Speed_50MHz;
  137.           LCD_Struct.GPIO_Pin = LCD12864_DATA_GPIO;
  138.                 GPIO_Init(LCD12864_GPIO,&LCD_Struct);        
  139. }

  140. void LCD_Init(void)        //lcd初始化
  141. {
  142.         LCD_GPIO_Config();
  143.         LCD_FUNCTION_Config();
  144.         LCD12864_RES_0;
  145.         delay_ms(10);
  146.         LCD12864_RES_1;
  147.         delay_ms(50);
  148.         LCD_CMD_DIS(ON);
  149.         LCD_INITIAL_COLUNM(INITIAL_COLUNM);
  150.         
  151. }

  152. void LCD_GPIO_MASK(u8 data)       //数据掩码包装
  153. {
  154.         u16 mask;
  155.         mask = GPIO_ReadOutputData(LCD12864_GPIO) & 0XFF00 ;
  156.         
  157.         mask = mask | data ;
  158.         GPIO_Write(LCD12864_GPIO,mask);
  159. }

  160. void LCD_CMD_BUSY(void)    //忙检测
  161. {
  162.         LCD12864_RS_CMD;
  163.         LCD12864_RW_R;
  164.         LCD12864_E_1;
  165.         LCD_GPIO_MASK(0xFF);
  166.         while(1)
  167.         {
  168.                 LCD12864_E_0;
  169.                 delay_us(2);
  170.                 LCD12864_E_1;
  171.                 if(!(GPIO_ReadInputData(LCD12864_GPIO)&CMD_BUSY))
  172.                         break;
  173.         }
  174.         LCD12864_E_0;
  175. }

  176. //parameter: ON/OFF
  177. void LCD_CMD_DIS(u8 Switch)
  178. {
  179.         LCD_CMD_BUSY();
  180.         LCD12864_RS_CMD;
  181.         LCD12864_RW_W;
  182.         LCD12864_E_1;
  183.         if(Switch)
  184.                 LCD_GPIO_MASK(CMD_DIS_ON);
  185.         else
  186.                 LCD_GPIO_MASK(CMD_DIS_OFF);
  187.         delay_us(2);
  188.         LCD12864_E_0;
  189. }


  190. void LCD_DIS_SELECT(u8 select)   //0全灭 1左屏 2右屏 3全屏
  191. {
  192.         select%=4;
  193.         switch(select)
  194.         {
  195.                 case DIS_RIGHT:
  196.                         LCD12864_CS2_ON;
  197.                         LCD12864_CS1_OFF;
  198.                         break;
  199.                 case DIS_LEFT:
  200.                         LCD12864_CS2_OFF;
  201.                         LCD12864_CS1_ON;
  202.                         break;
  203.                 case DIS_ALL:
  204.                         LCD12864_CS2_ON;
  205.                         LCD12864_CS1_ON;
  206.                         break;
  207.                 case DIS_NONE:
  208.                         LCD12864_CS2_OFF;
  209.                         LCD12864_CS1_OFF;
  210.                         break;
  211.         }
  212. }

  213. //指令起始行
  214. //parameter: 0-63
  215. void LCD_INITIAL_COLUNM(u8 Colunm)
  216. {
  217.         Colunm%=64;
  218.         Colunm = 64 - Colunm;
  219.         LCD_CMD_BUSY();
  220.         LCD12864_RS_CMD;
  221.         LCD12864_RW_W;
  222.         LCD12864_E_1;
  223.         Colunm = CMD_COLUNM|Colunm;
  224.         LCD_GPIO_MASK(Colunm);
  225.         delay_us(2);
  226.         LCD12864_E_0;
  227. }

  228. //指令写入数据显示列
  229. //parameter: 0-128
  230. void LCD_CMD_Line(u8 Line)
  231. {
  232.         Line %= 128;
  233.         if(Line<64)
  234.         {
  235.                 LCD_DIS_SELECT(DIS_LEFT);
  236.         }
  237.         else
  238.         {
  239.                 LCD_DIS_SELECT(DIS_RIGHT);
  240.         }
  241.         LCD_CMD_BUSY();
  242.         LCD12864_RS_CMD;
  243.         LCD12864_RW_W;
  244.         LCD12864_E_1;
  245.         Line = CMD_LINE|Line;
  246.         LCD_GPIO_MASK(Line);
  247.         delay_us(2);
  248.         LCD12864_E_0;
  249. }

  250. //指令写入数据显示页
  251. //parameter: 0-7
  252. void LCD_CMD_PAGE(u8 Page)
  253. {
  254.         Page%=8;
  255.         LCD_CMD_BUSY();
  256.         LCD12864_RS_CMD;
  257.         LCD12864_RW_W;
  258.         LCD12864_E_1;
  259.         Page = CMD_PAGE|Page;
  260.         LCD_GPIO_MASK(Page);
  261.         delay_us(2);
  262.         LCD12864_E_0;
  263. }

  264. //写入数据0-7行
  265. void LCD_CMD_COLUNM(u8 Colunm)
  266. {
  267.         Colunm%=8;
  268.         Colunm=Colunm-INITIAL_COLUNM/8;
  269.         LCD_CMD_PAGE(Colunm);
  270. }

  271. //计算数据长度
  272. u8 LCD_NUMS_SIZE(int num)
  273. {
  274.         u8 size=0;
  275.         if(num==0)
  276.         {
  277.                 size=1;
  278.         }else
  279.         {
  280.                 while(num)
  281.                 {
  282.                         size++;
  283.                         num=num/10;
  284.                 }
  285.         }
  286.         return size;
  287. }

  288. int LCD_POW(u8 mi)  //计算10的次方
  289. {
  290.         int di=1;
  291.         while(mi--)
  292.         {
  293.                 di=di*10;
  294.         }
  295.         return di;
  296. }

  297. void LCD_DATA_WRIRE(u8 data)   //写一位数据
  298. {
  299.         LCD_CMD_BUSY();
  300.         LCD12864_RS_DATA;
  301.         LCD12864_RW_W;
  302.         LCD12864_E_1;
  303.         LCD_GPIO_MASK(data);
  304.         delay_us(2);
  305.         LCD12864_E_0;
  306. }

  307. //显示一个字符 支持小、中尺寸  反侧显示
  308. //parameter: 行0-7 列0-127 data数据 size尺寸SMALL MIDDLE
  309. void LCD_DIS_Char(u8 row,u8 col,u8* data,int size)
  310. {
  311.         u8 length=0;
  312.         u8 line;
  313.         u8 i;
  314.         row%=8;
  315.         col%=128;
  316.         LCD_CMD_Line(col);
  317.         line=col-1;
  318.         if(size==SMALL)
  319.         {
  320.                 LCD_CMD_COLUNM(row);
  321.                 while(data[length])
  322.                 {
  323.                         for(i=0;i<6;i++)
  324.                         {
  325.                                 line+=1;
  326.                                 if(line==64)
  327.                                 {
  328.                                         LCD_CMD_Line(line);
  329.                                         LCD_CMD_COLUNM(row);
  330.                                 }else if(line==128)
  331.                                 {
  332.                                         line=0;
  333.                                         LCD_CMD_Line(line);
  334.                                         LCD_CMD_COLUNM(row);
  335.                                 }
  336.                                 LCD_DATA_WRIRE(CHAR_SMALL[data[length]-32][i]);
  337.                         }        
  338.                         length++;
  339.                 }
  340.         }else if(size==MIDDLE)
  341.         {
  342.                 while(data[length])
  343.                 {
  344.                         LCD_CMD_COLUNM(row);
  345.                         for(i=0;i<16;i++)
  346.                         {
  347.                                 line+=1;
  348.                                 if(i==8)
  349.                                 {
  350.                                         if(line<8)
  351.                                                 line=128-(8-line);
  352.                                         else
  353.                                                 line-=8;
  354.                                         LCD_CMD_Line(line);
  355.                                         LCD_CMD_COLUNM(row+1);
  356.                                 }
  357.                                 else if(line==64)
  358.                                 {
  359.                                         LCD_CMD_Line(line);
  360.                                         if(i<8)
  361.                                         {
  362.                                                 LCD_CMD_COLUNM(row);
  363.                                         }else if(i>=8)
  364.                                         {
  365.                                                 LCD_CMD_COLUNM(row+1);
  366.                                         }
  367.                                 }else if(line==128)
  368.                                 {
  369.                                         line=0;
  370.                                         LCD_CMD_Line(line);
  371.                                         if(i<8)
  372.                                         {
  373.                                                 LCD_CMD_COLUNM(row);
  374.                                         }else if(i>=8)
  375.                                         {
  376.                                                 LCD_CMD_COLUNM(row+1);
  377.                                         }        
  378.                                 }
  379.                                 LCD_DATA_WRIRE(CHAR_MIDDLE[data[length]-32][i]);
  380.                         }
  381.                         length++;
  382.                 }
  383.         }
  384. }

  385. //写数字 支持小、中尺寸 数字可支持小数  小数位数只包括2位  反侧显示
  386. //parameter: 行0-7 列0-127 data数据 size尺寸SMALL MIDDLE
  387. void LCD_DIS_Number(u8 row,u8 col,float num,int size)
  388. {
  389.         u8 line;
  390.         u8 length;
  391.         u8 i;
  392.         u8 flag=0;
  393.         float number=0;
  394.         row%=8;
  395.         col%=128;
  396.         length=LCD_NUMS_SIZE((int)num);
  397.         LCD_CMD_Line(col);
  398.         line=col-1;
  399.         if(num-(int)num>0)
  400.         {
  401.                 flag=1;
  402.                 number=num;
  403.         }
  404.         if(size==SMALL)
  405.         {
  406.                 LCD_CMD_COLUNM(row);//1行
  407.                 while(length--)//6位
  408.                 {
  409.                         for(i=0;i<6;i++)
  410.                         {
  411.                                 line+=1;
  412.                                 if(line==64)
  413.                                 {
  414.                                         LCD_CMD_Line(line);
  415.                                         LCD_CMD_COLUNM(row);
  416.                                 }else if(line==128)
  417.                                 {
  418.                                         line=0;
  419.                                         LCD_CMD_Line(line);
  420.                                 }
  421.                                 if(flag==2)
  422.                                 {
  423.                                         LCD_DATA_WRIRE(CHAR_SMALL[14][i]);
  424.                                 }else
  425.                                         LCD_DATA_WRIRE(CHAR_SMALL[(int)num/LCD_POW(length)+16][i]);        
  426.                         }
  427.                         if(flag==2)
  428.                         {
  429.                                 flag=0;
  430.                                 continue;
  431.                         }
  432.                         num=(int)num%LCD_POW(length);        
  433.                         if(flag==1&&length==0)
  434.                         {
  435.                                 flag=2;
  436.                                 length=3;
  437.                                 num=(int)((number- (int)number)*100);
  438.                         }
  439.                 }
  440.         }else if(size==MIDDLE)//中尺寸
  441.         {
  442.                 while(length--)
  443.                 {
  444.                         LCD_CMD_COLUNM(row);
  445.                         for(i=0;i<16;i++)
  446.                         {
  447.                                 line+=1;
  448.                                 if(i==8)
  449.                                 {
  450.                                         if(line<8)
  451.                                                 line=128-(8-line);
  452.                                         else
  453.                                                 line-=8;
  454.                                         LCD_CMD_Line(line);
  455.                                         LCD_CMD_COLUNM(row+1);
  456.                                 }
  457.                                 else if(line==64)
  458.                                 {
  459.                                         LCD_CMD_Line(line);
  460.                                         if(i<8)
  461.                                         {
  462.                                                 LCD_CMD_COLUNM(row);
  463.                                         }else if(i>=8)
  464.                                         {
  465.                                                 LCD_CMD_COLUNM(row+1);
  466.                                         }
  467.                                 }else if(line==128)
  468.                                 {
  469.                                         line=0;
  470.                                         LCD_CMD_Line(line);
  471.                                         if(i<8)
  472.                                         {
  473.                                                 LCD_CMD_COLUNM(row);
  474.                                         }else if(i>=8)
  475.                                         {
  476.                                                 LCD_CMD_COLUNM(row+1);
  477.                                         }
  478.                                 }
  479.                                 if(flag==2)
  480.                                 {
  481.                                         LCD_DATA_WRIRE(CHAR_MIDDLE[14][i]);
  482.                                 }else                                
  483.                                         LCD_DATA_WRIRE(CHAR_MIDDLE[(int)num/LCD_POW(length)+16][i]);
  484.                         }
  485.                         if(flag==2)
  486.                         {
  487.                                 flag=0;
  488.                                 continue;
  489.                         }
  490.                         num=(int)num%LCD_POW(length);
  491.                         if(flag==1&&length==0)
  492.                         {
  493.                                 flag=2;
  494.                                 length=3;
  495.                                 num=(int)((number-(int)number)*100);
  496.                         }
  497.                 }
  498.         }else if(size==LONG)//大尺寸
  499.         {
  500.                 while(length--)
  501.                 {
  502.                         LCD_CMD_COLUNM(row);
  503.                         for(i=0;i<36;i++)
  504.                         {
  505.                                 line+=1;
  506.                                 if(i==12)
  507.                                 {
  508.                                         if(line<12)
  509.                                                 line=128-(12-line);
  510.                                         else
  511.                                                 line-=12;
  512.                                         LCD_CMD_Line(line);
  513.                                         LCD_CMD_COLUNM(row+1);
  514.                                 }else if(i==24)
  515.                                 {
  516.                                         if(line<12)
  517.                                                 line=128-(12-line);
  518.                                         else
  519.                                                 line-=12;
  520.                                         LCD_CMD_Line(line);
  521.                                         LCD_CMD_COLUNM(row+2);
  522.                                 }
  523.                                 else if(line==64)
  524.                                 {
  525.                                         LCD_CMD_Line(line);
  526.                                         if(i<12)
  527.                                         {
  528.                                                 LCD_CMD_COLUNM(row);
  529.                                         }else if(i>=12&&i<24)
  530.                                         {
  531.                                                 LCD_CMD_COLUNM(row+1);
  532.                                         }else if(i>=24)
  533.                                         {
  534.                                                 LCD_CMD_COLUNM(row+2);
  535.                                         }
  536.                                 }else if(line==128)
  537.                                 {
  538.                                         line=0;
  539.                                         LCD_CMD_Line(line);
  540.                                         if(i<12)
  541.                                         {
  542.                                                 LCD_CMD_COLUNM(row);
  543.                                         }else if(i>=12&&i<24)
  544.                                         {
  545.                                                 LCD_CMD_COLUNM(row+1);
  546.                                         }else if(i>=24)
  547.                                         {
  548.                                                 LCD_CMD_COLUNM(row+2);
  549.                                         }
  550.                                 }        
  551.                                 if(flag==2)
  552.                                 {
  553.                                         LCD_DATA_WRIRE(NUMBER_LONG[10][i]);
  554.                                 }else
  555.                                         LCD_DATA_WRIRE(NUMBER_LONG[(int)num/LCD_POW(length)][i]);
  556.                         }
  557.                         if(flag==2)
  558.                         {
  559.                                 flag=0;
  560.                                 continue;
  561.                         }
  562.                         num=(int)num%LCD_POW(length);
  563.                         if(flag==1&&length==0)
  564.                         {
  565.                                 flag=2;
  566.                                 length=3;
  567.                                 num=(int)((number-(int)number)*100);
  568.                         }
  569.                 }
  570.         }
  571. }

  572. //写汉字   支持中、大尺寸  data为库
  573. void LCD_DIS_WORD(u8 row,u8 col,u8* data,int size)
  574. {
  575.         u8 length=0;
  576.         u8 i;
  577.         u8 line;
  578.         row%=8;
  579.         col%=128;
  580.         LCD_CMD_Line(col);
  581.         line=col-1;
  582.         if(size==MIDDLE)
  583.         {
  584.                 while(data[length]!=0)
  585.                 {
  586.                         LCD_CMD_COLUNM(row);
  587.                         for(i=0;i<20;i++)
  588.                         {
  589.                                 line+=1;
  590.                                 if(i==10)
  591.                                 {
  592.                                         if(line<10)
  593.                                                 line=128-(10-line);
  594.                                         else
  595.                                                 line-=10;
  596.                                         LCD_CMD_Line(line);
  597.                                         LCD_CMD_COLUNM(row+1);
  598.                                 }
  599.                                 else if(line==64)
  600.                                 {
  601.                                         LCD_CMD_Line(line);
  602.                                         if(i<10)
  603.                                         {
  604.                                                 LCD_CMD_COLUNM(row);
  605.                                         }else if(i>=10)
  606.                                         {
  607.                                                 LCD_CMD_COLUNM(row+1);
  608.                                         }
  609.                                 }else if(line==128)
  610.                                 {
  611.                                         line=0;
  612.                                         LCD_CMD_Line(line);
  613.                                         if(i<10)
  614.                                         {
  615.                                                 LCD_CMD_COLUNM(row);
  616.                                         }else if(i>=10)
  617.                                         {
  618.                                                 LCD_CMD_COLUNM(row+1);
  619.                                         }
  620.                                 }
  621.                                 LCD_DATA_WRIRE(WORD_MIDDLE[data[length]-1][i]);
  622.                         }
  623.                         length++;
  624.                 }
  625.         }else if(size==LONG)
  626.         {
  627.                 while(data[length]!=0)
  628.                 {
  629.                         LCD_CMD_COLUNM(row);
  630.                         for(i=0;i<32;i++)
  631.                         {
  632.                                 line+=1;
  633.                                 if(i==16)
  634.                                 {
  635.                                         if(line<16)
  636.                                                 line=128-(16-line);
  637.                                         else
  638.                                                 line-=16;
  639.                                         LCD_CMD_Line(line);
  640.                                         LCD_CMD_COLUNM(row+1);
  641.                                 }
  642.                                 else if(line==64)
  643.                                 {
  644.                                         LCD_CMD_Line(line);
  645.                                         if(i<16)
  646.                                         {
  647.                                                 LCD_CMD_COLUNM(row);
  648.                                         }else if(i>=16)
  649.                                         {
  650.                                                 LCD_CMD_COLUNM(row+1);
  651.                                         }
  652.                                 }else if(line==128)
  653.                                 {
  654.                                         line=0;
  655.                                         LCD_CMD_Line(line);
  656.                                         if(i<16)
  657.                                         {
  658.                                                 LCD_CMD_COLUNM(row);
  659.                                         }else if(i>=16)
  660.                                         {
  661.                                                 LCD_CMD_COLUNM(row+1);
  662.                                         }
  663.                                 }
  664.                                 LCD_DATA_WRIRE(WORD_LONG[data[length]-1][i]);
  665.                         }
  666.                         length++;
  667.                 }
  668.         }
  669. }

  670. //清除屏幕单独一行
  671. void LCD_CLEAR_COL(u8 row)
  672. {
  673.         u8 j;
  674.         LCD_DIS_SELECT(DIS_ALL);
  675.         LCD_CMD_COLUNM(row);
  676.         for(j=0;j<128;j++)
  677.         {
  678.                 LCD_DATA_WRIRE(0xFF);
  679.         }
  680. }
  681. //清除全屏
  682. void LCD_CLEAR_ALL(void)
  683. {
  684.         u8 i;
  685.         u8 j;
  686.         LCD_DIS_SELECT(DIS_ALL);
  687.         for(i=0;i<8;i++)
  688.         {
  689.                 LCD_CMD_COLUNM(i);
  690.                 for(j=0;j<128;j++)
  691.                 {
  692.                         LCD_DATA_WRIRE(0xFF);
  693.                 }
  694.         }
  695. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:473186 发表于 2020-7-9 16:16 | 只看该作者
不是你程序有问题,而是stm32仿真元件没有做到很彻底,不同版本的proteus相同元件仿真都会出问题
回复

使用道具 举报

板凳
ID:682846 发表于 2020-7-9 21:00 | 只看该作者
zhengchong60 发表于 2020-7-9 16:16
不是你程序有问题,而是stm32仿真元件没有做到很彻底,不同版本的proteus相同元件仿真都会出问题

是这样吗,我太难了
回复

使用道具 举报

地板
ID:800037 发表于 2020-7-9 22:40 | 只看该作者
最好不要用proteus去仿真stm32,时钟都很难仿准,你要是控个io口拉个高低电平倒无所谓
回复

使用道具 举报

5#
ID:783844 发表于 2020-7-10 10:38 | 只看该作者
可以试一下用示波器观察一下波形先
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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