找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3770|回复: 1
收起左侧

LCD12864画点画直线,画矩形的单片机源程序

[复制链接]
ID:297232 发表于 2018-8-28 15:25 | 显示全部楼层 |阅读模式
可以画点,画直线,画矩形

单片机源程序如下:
  1. /*系统 includes */
  2. #include <stdint.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>

  6. //单片机头文件
  7. #include "stm32f10x.h"

  8. //硬件驱动
  9. #include "delay.h"
  10. #include "lcd12864.h"
  11. #include "lv_conf.h"
  12. #include "lv_vdb.h"
  13. #include "lv_hal.h"

  14. //接口配置(串行通信)
  15. #define SET_CS_H                 GPIO_SetBits(GPIOA,GPIO_Pin_0);
  16. #define SET_CS_L                 GPIO_ResetBits(GPIOA,GPIO_Pin_0);
  17. #define SET_SID_H                 GPIO_SetBits(GPIOA,GPIO_Pin_1);
  18. #define SET_SID_L                 GPIO_ResetBits(GPIOA,GPIO_Pin_1);
  19. #define SET_CLK_H                 GPIO_SetBits(GPIOA,GPIO_Pin_2);
  20. #define SET_CLK_L                 GPIO_ResetBits(GPIOA,GPIO_Pin_2);
  21. #define SET_PSB_H                 GPIO_SetBits(GPIOA,GPIO_Pin_3);
  22. #define SET_PSB_L                 GPIO_ResetBits(GPIOA,GPIO_Pin_3);
  23. #define SET_RESET_H         GPIO_SetBits(GPIOA,GPIO_Pin_4);
  24. #define SET_RESET_L         GPIO_ResetBits(GPIOA,GPIO_Pin_4);

  25. char full_screen[1024] ={0x00};                                                                                //保存的数据
  26. char clear_buff[1024] ={0x00};                                                                                //全部清空或者清黑
  27. char colour[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};                        //画点数据
  28. char table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};        //数字
  29. //       

  30. const char pic2[1024]=
  31. {
  32. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  33. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  34. …………
  35. …………
  36. …………限于本文篇幅 余下代码请从51黑下载附件…………
  37. 0x00,0x07,0xF8,0x00,0x00,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  38. };
  39. void Send(unsigned char type,unsigned char transdata);

  40. void delay_nus(unsigned int num)
  41. {
  42.         DelayUs(num);
  43. }

  44. void delay_nms(unsigned int num)
  45. {
  46.     DelayXms(num);
  47. }

  48. void LcdGpioInit(void)
  49. {
  50.         GPIO_InitTypeDef gpio_initstruct;
  51.        
  52.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  53.        
  54.         gpio_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;
  55.         gpio_initstruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_3;
  56.         gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
  57.         GPIO_Init(GPIOA, &gpio_initstruct);
  58. }

  59. /*
  60. ************************************************************
  61. *        函数名称:        Expansion_init
  62. *
  63. *        函数功能:        扩展指令集初始化
  64. *
  65. *        入口参数:        无
  66. *
  67. *        返回参数:        无
  68. *
  69. *        说明:               
  70. ************************************************************
  71. */
  72. void Expansion_init(void)         //扩展指令集初始化
  73. {
  74.         delay_nms(1);     
  75.         Send(0,0x36);                 /*扩展功能集RE = 1:扩展指令*/
  76.         delay_nms(1);            
  77.         Send(0,0x36);                 /*扩展功能集RE = 1:扩展指令*/
  78.         delay_nms(1);            
  79.         Send(0,0x3E);                  /*绘制打开(DL=8BITS,RE=1,G=1)*/
  80.         delay_nms(1);            
  81. }

  82. /*
  83. ************************************************************
  84. *        函数名称:        Basic_init
  85. *
  86. *        函数功能:        基本指令集初始化
  87. *
  88. *        入口参数:        无
  89. *
  90. *        返回参数:        无
  91. *
  92. *        说明:               
  93. ************************************************************
  94. */
  95. void Basic_init(void)                //基本指令集初始化
  96. {      
  97.         delay_nms(1);
  98.         Send(0,0x30);                  /*功能设置:一次送8位数据,基本指令集*/
  99.         delay_nms(1);      
  100.         Send(0,0x30);                  /*功能设置:一次送8位数据,基本指令集*/
  101.         delay_nms(1);      
  102.         Send(0,0x08);                  /*在控制上显示*/
  103.         delay_nms(1);
  104.         Send(0,0x10);                  /*光标显示控制*/
  105.         delay_nms(1);      
  106.         Send(0,0x02);                  /*DDRAM地址归位*/       
  107.         delay_nms(1);
  108.         Send(0,0x0C);                  /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/
  109.         delay_nms(1);         
  110.         Send(0,0x06);                  /*功能设置,点设定:显示字符/光标从右向左移位,DDRAM地址加1*/
  111.         delay_nms(1);
  112. }

  113. /*
  114. ************************************************************
  115. *        函数名称:        Lcd_Init
  116. *
  117. *        函数功能:        初始化
  118. *
  119. *        入口参数:        无
  120. *
  121. *        返回参数:        无
  122. *
  123. *        说明:               
  124. ************************************************************
  125. */
  126. void Lcd12864_Init(void)
  127. {       
  128.         LcdGpioInit();
  129.         delay_nms(10);             /*延时等待电源稳定*/
  130.          
  131.     SET_PSB_L;            
  132.         delay_nms(10);         
  133.         SET_RESET_L;              
  134.         delay_nms(10);         
  135.         SET_RESET_H;            
  136.         delay_nms(10);  
  137.         ClearLcd();                                /*清屏*/
  138. //        Expansion_init();                /*扩展指令集初始化*/
  139. //        Basic_init();                        /*基本指令集初始化*/
  140. }

  141. /*
  142. ************************************************************
  143. *        函数名称:        ClearLcd
  144. *
  145. *        函数功能:        清屏
  146. *
  147. *        入口参数:        无
  148. *
  149. *        返回参数:        无
  150. *
  151. *        说明:               
  152. ************************************************************
  153. */
  154. void ClearLcd(void)                //清屏
  155. {
  156.         Send(0,0x34);                /*扩展功能集RE = 1:扩展指令*/
  157.         delay_nms(10);
  158.         Send(0,0x30);                /*功能设置:一次送8位数据,基本指令集*/
  159.         delay_nms(10);
  160.         Send(0,0x01);                /*清屏,将DDRAM的位址计数器调整为“00H”*/
  161.         delay_nms(10);
  162.         Send(0,0x34);                 /*扩展功能集RE = 1:扩展指令*/
  163.         delay_nms(10);            
  164.         Send(0,0x34);                 /*扩展功能集RE = 1:扩展指令*/
  165.         delay_nms(10);            
  166.         Send(0,0x3C);                  /*绘制打开(DL=8BITS,RE=1,G=1)*/
  167.         delay_nms(10);           
  168.         Send(0,0x01);                 /*清屏,将DDRAM的位址计数器调整为“00H”*/
  169.         delay_nms(10);
  170.         memset(clear_buff,0x00,sizeof(full_screen));
  171.         Disp_TP_mcu(0,0,128,64,clear_buff,sizeof(clear_buff));
  172. }

  173. /*
  174. ************************************************************
  175. *        函数名称:        Send
  176. *
  177. *        函数功能:        发送数据
  178. *
  179. *        入口参数:        type:类型(0:发送命令,1:发送数据),transdata:数据
  180. *
  181. *        返回参数:        无
  182. *
  183. *        说明:               
  184. ************************************************************
  185. */
  186. void Send(unsigned char type,unsigned char transdata)        //0-写控制命令,1-写数据
  187. {
  188.         unsigned char firstbyte = 0xf8;
  189.         unsigned char temp;
  190.         unsigned char i,j = 3;

  191.         if(type)                                //0-写控制命令,1-写数据
  192.                 firstbyte |= 0x02;
  193.         delay_nus(1);
  194.         SET_CS_H;
  195.         delay_nus(1);
  196.         SET_CLK_L;
  197.         delay_nus(1);
  198.         while(j > 0)
  199.         {
  200.                 if(j == 3)
  201.                 {
  202.                         temp = firstbyte;
  203. //                        delay_nus(1);
  204.                 }
  205.                 else
  206.                 {
  207.                         if(j == 2)
  208.                         {
  209.                                 temp = transdata&0xf0;
  210. //                                delay_nus(1);
  211.                         }
  212.                         else
  213.                         {
  214.                                 temp = (transdata << 4) & 0xf0;
  215. //                                delay_nus(1);
  216.                         }
  217.                 }
  218.                 for(i = 8;i > 0;i--)
  219.                 {
  220.                         if(temp & 0x80)
  221.                         {
  222.                                 SET_SID_H;
  223.                                 delay_nus(1);
  224.                         }
  225.                         else
  226.                         {
  227.                                 SET_SID_L;
  228.                                 delay_nus(1);
  229.                         }
  230.                         SET_CLK_H;
  231.                         delay_nus(1);
  232.                         temp <<= 1;
  233.                         delay_nus(1);
  234.                         SET_CLK_L;
  235.                         delay_nus(1);
  236.                 }
  237.                 delay_nus(1);//三个字节之间一定要有足够的延时,否则易出现时序问题
  238.                 j--;
  239.         }
  240.         SET_SID_L;
  241.         delay_nus(1);
  242.         SET_CS_L;
  243.         delay_nus(1);
  244. }

  245. /*
  246. ************************************************************
  247. *        函数名称:        Lcd_Loc
  248. *
  249. *        函数功能:        定位
  250. *
  251. *        入口参数:        x:横轴的起点,y:竖轴的起点
  252. *
  253. *        返回参数:        无
  254. *
  255. *        说明:               
  256. ************************************************************
  257. */
  258. void Lcd_Loc(unsigned char x,unsigned char y)                //定位x 为x轴坐标,y为 y轴坐标
  259. {
  260.         unsigned char pos;
  261.         switch(x)
  262.         {
  263.                 case 1:pos=0x80;break;
  264.                 case 2:pos=0x90;break;
  265.                 case 3:pos=0x88;break;
  266.                 case 4:pos=0x98;break;
  267.                 default:pos=0x80;
  268.         }
  269.         delay_nus(10);
  270.         pos += y;
  271.         delay_nus(10);
  272.         Send(0,pos);
  273.         delay_nus(10);
  274. }

  275. /*
  276. ************************************************************
  277. *        函数名称:        Disp_HZ
  278. *
  279. *        函数功能:        显示汉字
  280. *
  281. *        入口参数:        x:横轴的起点,y:竖轴的起点,*pt:汉字数据地址,num:汉字个数
  282. *
  283. *        返回参数:        无
  284. *
  285. *        说明:               
  286. ************************************************************
  287. */
  288. void Disp_HZ(unsigned char x,unsigned char y,const char *pt,unsigned char num)                //显示汉字和汉字个数
  289. {
  290.         unsigned char i;
  291.         Lcd_Loc(x,y);
  292.         for(i = 0;i < (num*2);i++)
  293.         {
  294.            Send(1,*(pt++));
  295.            delay_nus(10);
  296.         }
  297. }

  298. /*
  299. ************************************************************
  300. *        函数名称:        Disp_SZ
  301. *
  302. *        函数功能:        显示数字
  303. *
  304. *        入口参数:        x:横轴的起点,y:竖轴的起点,shuzi:数字序号
  305. *
  306. *        返回参数:        无
  307. *
  308. *        说明:               
  309. ************************************************************
  310. */
  311. void Disp_SZ(unsigned char x,unsigned char y,unsigned char shuzi)                                        //显示一个数字
  312. {
  313.         Lcd_Loc(x,y);
  314.     Send(1,table[shuzi]);
  315. }

  316. /*
  317. ************************************************************
  318. *        函数名称:        Disp_TP_lcd
  319. *
  320. *        函数功能:        显示图片()
  321. *
  322. *        入口参数:        x:横轴的起点,y:竖轴的起点,x_long:图片横轴的长度,y_long:图片竖轴的长度,*p_image:图片地址,len_image:图片总的数据长度
  323. *
  324. *        返回参数:        无
  325. *
  326. *        说明:               
  327. ************************************************************
  328. */
  329. void Disp_TP_lcd(unsigned char x,unsigned char y,unsigned char x_long,unsigned char y_long,const char *p_image,unsigned int len_image)        //显示图片,将图片下载到LCD的RAM中显示
  330. {
  331.         int x_num = 0,y_num = 0;
  332.         unsigned int num = 0;
  333. //        Lcd_Loc(x,y);
  334.         for(x_num=0;x_num<(x_long/4);x_num++)              
  335.         {
  336.                 Send(0,0x34);
  337.                 Send(0,(0x80 + x_num));
  338.                 Send(0,0x80);
  339.                 Send(0,0x30);               
  340.                 for(y_num=0;y_num<(y_long/4);y_num++)
  341.                 {
  342.                         Send(1,*p_image);
  343.                         p_image++;
  344.                         if(num >= len_image)
  345.                         {
  346.                                 Send(0,0x36);
  347.                                 Send(0,0x30);
  348.                                 return ;
  349.                         }
  350.                 }
  351.         }          
  352.         if(y_long > 32)
  353.         {
  354.                 for(x_num=0;x_num<(x_long/4);x_num++)              
  355.                 {
  356.                         Send(0,0x34);
  357.                         Send(0,(0x80 + x_num));
  358.                         Send(0,0x88);
  359.                         Send(0,0x30);
  360.                         for(y_num=0;y_num<(y_long/4);y_num++)
  361.                         {
  362.                                 Send(1,*p_image);
  363.                                 p_image++;
  364.                                 if(num >= len_image)
  365.                                 {
  366.                                         Send(0,0x36);
  367.                                         Send(0,0x30);
  368.                                         return ;
  369.                                 }
  370.                         }
  371.                 }
  372.         }
  373.         Send(0,0x36);
  374.         Send(0,0x30);
  375. }

  376. /*
  377. ************************************************************
  378. *        函数名称:        Disp_TP_mcu
  379. *
  380. *        函数功能:        显示图片
  381. *
  382. *        入口参数:        x:横轴的起点,y:竖轴的起点,x_long:图片横轴的长度,y_long:图片竖轴的长度,*p_image:图片地址,len_image:图片总的数据长度
  383. *
  384. *        返回参数:        无
  385. *
  386. *        说明:               
  387. ************************************************************
  388. */
  389. void Disp_TP_mcu(unsigned char x,unsigned char y,unsigned char x_long,unsigned char y_long,const char *p_image,unsigned int len_image)        //显示图片,MCU通过绘图的方式将图片绘制出来(图片越大绘制速度越慢)
  390. {
  391.         unsigned int y_num = 0;
  392.         unsigned int x_num = 0;
  393.         unsigned int buff_num = 0;
  394.         unsigned int data_num = 0;
  395.         buff_num = ((128*(y-1))+x-1)/8;
  396.        
  397. //        Expansion_init();
  398.         for(y_num=0;y_num<=(y_long);y_num++)       /*上半屏显示*/
  399.         {
  400.                 if(y_num >= 32)
  401.                 {
  402.                         break;
  403.                 }
  404.                 buff_num = (16*y_num+(x-1)/16);
  405. //                Send(0,(0x80 + y_num));                        //列地址
  406. //                Send(0,0x80);                                 //行地址
  407.                 for(x_num=0;x_num<(x_long/8);x_num++)
  408.                 {
  409. //                        Send(1,*p_image);
  410.                         full_screen[buff_num++] |= *p_image;
  411.                         p_image++;
  412.                         data_num++;
  413.                         if(data_num >= len_image)
  414.                         {
  415. //                                Send(0,0x36);
  416. //                                Send(0,0x30);
  417.                                 return ;
  418.                         }
  419.                 }
  420.         }
  421.         if(y_long > 32)
  422.         {
  423.                 for(y_num=0;y_num<=(y_long-32);y_num++)       /*下半屏显示*/
  424.                 {
  425.                         buff_num = (16*y_num+x-1);
  426. //                        Send(0,(0x80 + y_num));                        //列地址
  427. //                        Send(0,0x88);                                 //行地址
  428.                         for(x_num=0;x_num<(x_long/8);x_num++)
  429.                         {
  430. //                                Send(1,*p_image);
  431.                                 full_screen[buff_num++] |= *p_image;
  432.                                 p_image++;
  433.                                 data_num++;
  434.                                 if(data_num >= len_image)
  435.                                 {
  436. //                                        Send(0,0x36);
  437. //                                        Send(0,0x30);
  438.                                         return ;
  439.                                 }
  440.                         }
  441.                 }
  442.         }
  443. //        Send(0,0x36);
  444. //        Send(0,0x30);
  445. }

  446. /*
  447. ************************************************************
  448. *        函数名称:        Disp_Dian_mcu
  449. *
  450. *        函数功能:        显示点
  451. *
  452. *        入口参数:        x:横轴的起点,y:竖轴的起点,colour_num:颜色
  453. *
  454. *        返回参数:        无
  455. *
  456. *        说明:               
  457. ************************************************************
  458. */
  459. void Disp_Dian_mcu(unsigned char x,unsigned char y,unsigned char colour_num)        //显示点,通过绘图方式
  460. {
  461.         unsigned char pos,los,xos;
  462.         int buff_num = 0,data3 = 0;
  463.         unsigned char data = 0,data1 = 0,data2 = 0;
  464.         if((x <= 0) | (x > 128) | (y <= 0) | (y > 64))
  465.         {
  466.                 return ;
  467.         }
  468.         if((y >= 1) && (y <= 16))
  469.         {
  470.                 pos=0x80 + ((x-1)/16);
  471.                 xos = (x-1)%16;
  472.                 los = y-1;
  473.         }
  474.         else
  475.         if((y > 16) && (y <= 32))
  476.         {
  477.                 pos=0x90 + ((x-1)/16);
  478.                 xos = (x-1)%16;
  479.                 los = y-1;
  480.         }
  481.         else
  482.         if((y > 32) && (y <= 48))
  483.         {
  484.                 pos=0x88 + ((x-1)/16);
  485.                 xos = (x-1)%16;
  486.                 los = y-33;
  487.         }
  488.         else
  489.         if((y > 48) && (y <= 64))
  490.         {
  491.                 pos=0x98 + ((x-1)/16);
  492.                 xos = (x-1)%16;
  493.                 los = y-33;
  494.         }
  495.         else
  496.         {
  497.                 pos=0x80 + ((x-1)/16);
  498.                 xos = (x-1)%16;
  499.                 los = y-1;
  500.         }
  501. //        Expansion_init();
  502. //        Send(0,(0x80 + los));                //列地址
  503. //        Send(0,pos);                                 //行地址
  504.         if(colour_num <= 0)                        //白点
  505.         {               
  506.                 if(xos < 8)
  507.                 {
  508.                         data1 = ~colour[xos];
  509.                         buff_num = ((128*(y-1))+x-1)/8;
  510.                         data2 = full_screen[buff_num];
  511.                         data = data1 & data2;
  512. //                        Send(1,data);
  513.                         full_screen[buff_num] |= data;
  514.                 }
  515.                 else
  516.                 {
  517.                         data1 = ~colour[xos-8];
  518.                         buff_num = ((128*(y-1))+x-1)/8;
  519.                         data2 = full_screen[buff_num];
  520.                         data = data1 & data2;
  521. //                        data3 = data | ((full_screen[buff_num-1] & 0x00FF)<<8);
  522. //                        Send(1,data3>>8);
  523. //                        Send(1,data3);
  524.                         full_screen[buff_num] |= data;
  525.                 }
  526.         }
  527.         else
  528.         {
  529.                 if(colour_num >= 1)                //黑点
  530.                 {                       
  531.                         if(xos < 8)
  532.                         {
  533.                                 data1 = colour[xos];
  534.                                 buff_num = ((128*(y-1))+x-1)/8;
  535.                                 data2 = full_screen[buff_num];
  536.                                 data = data1 | data2;
  537. //                                Send(1,data);
  538.                                 full_screen[buff_num] |= data;
  539.                         }
  540.                         else
  541.                         {
  542.                                 data1 = colour[xos-8];
  543.                                 buff_num = ((128*(y-1))+x-1)/8;
  544.                                 data2 = full_screen[buff_num];
  545.                                 data = data1 | data2;
  546. //                                data3 = data | ((full_screen[buff_num-1] & 0x00FF)<<8);
  547. //                                Send(1,data3>>8);
  548. //                                Send(1,data3);
  549.                                 full_screen[buff_num] |= data;
  550.                         }
  551.                 }
  552.         }
  553. //        Send(0,0x36);
  554. //        Send(0,0x30);
  555. }

  556. /*
  557. ************************************************************
  558. *        函数名称:        Disp_Xian_mcu
  559. *
  560. *        函数功能:        显示线
  561. *
  562. *        入口参数:        x:横轴的起点,y:竖轴的起点,direction:方向,len:线的长度,colour_num:颜色
  563. *
  564. *        返回参数:        无
  565. *
  566. *        说明:               
  567. ************************************************************
  568. */
  569. void Disp_Xian_mcu(unsigned char x,unsigned char y,unsigned char direction,unsigned char len,unsigned char colour_num)        //显示线,通过绘图方式
  570. {
  571.         unsigned char i;
  572.         if((x <= 0) | (x > 128) | (y <= 0) | (y > 64))
  573.         {
  574.                 return ;
  575.         }
  576.         if(direction == 0)        //水平划线
  577.         {
  578.                 for(i = 0;i<len;i++)
  579.                 {
  580.                         Disp_Dian_mcu(x+i,y,colour_num);
  581.                 }
  582.         }
  583.         else
  584.         if(direction == 1)        //垂直划线
  585.         {
  586.                 for(i = 0;i<len;i++)
  587.                 {
  588.                         Disp_Dian_mcu(x,y+i,colour_num);
  589.                 }
  590.         }
  591. }

  592. /*
  593. ************************************************************
  594. *        函数名称:        Disp_JX_mcu
  595. *
  596. *        函数功能:        显示矩形
  597. *
  598. *        入口参数:        x:横轴的起点,y:竖轴的起点,x_len:横轴的长度,y_len竖轴的长度,filling:填充
  599. *
  600. *        返回参数:        无
  601. *
  602. *        说明:               
  603. ************************************************************
  604. */
  605. void Disp_JX_mcu(unsigned char x,unsigned char y,unsigned char x_len,unsigned char y_len,const char filling)        //显示矩形,通过绘图方式
  606. {
  607.         uint8_t i=0;
  608.         if(filling == 0)
  609.         {
  610.                 Disp_Xian_mcu(x,y,1,y_len,1);                        //画线
  611.                 Disp_Xian_mcu(x,y,0,x_len,1);                        //画线
  612.                 Disp_Xian_mcu(x+x_len,y,1,y_len+1,1);        //画线
  613.                 Disp_Xian_mcu(x,y+y_len,0,x_len+1,1);        //画线
  614.         }
  615.         else
  616.         {
  617.                 for(i=0;i<y_len;i++)
  618.                 {
  619.                         Disp_Xian_mcu(x,y+i,0,x_len,1);                        //画线
  620.                 }
  621.         }
  622. }

  623. /*
  624. ************************************************************
  625. *        函数名称:        Disp_Refresh_Page
  626. *
  627. *        函数功能:        刷新页面
  628. *
  629. *        入口参数:        无
  630. *
  631. *        返回参数:        无
  632. *
  633. *        说明:               
  634. ************************************************************
  635. */
  636. void Disp_Refresh_Page(void)
  637. {
  638.         unsigned char x_long = 128;
  639.         unsigned char y_long = 64;
  640.         const char *p_image = full_screen;
  641.         unsigned int len_image = 1024;
  642.         unsigned int y_num = 0;
  643.         unsigned int x_num = 0;
  644.         unsigned int data_num = 0;
  645.         unsigned int i=0,j=0,n=0;
  646. //        while(n<128)
  647. //        {
  648. //                for(i=0;i<4;i++)
  649. //                {
  650. //                        if(n<128)
  651. //                        {
  652. //                                full_screen[i+(j*16)]=pic4[n++];
  653. //                        }
  654. //                }
  655. //                j++;
  656. //        }
  657.         Expansion_init();
  658.         for(y_num=0;y_num<=(y_long);y_num++)       /*上半屏显示*/
  659.         {
  660.                 if(y_num >= 32)
  661.                 {
  662.                         break;
  663.                 }
  664.                 Send(0,(0x80 + y_num));                        //列地址
  665.                 Send(0,0x80);                                 //行地址
  666.                 for(x_num=0;x_num<(x_long/8);x_num++)
  667.                 {
  668.                         Send(1,*p_image);
  669.                         p_image++;
  670.                         data_num++;
  671.                         if(data_num >= len_image)
  672.                         {
  673.                                 Send(0,0x36);
  674.                                 Send(0,0x30);
  675.                                 return ;
  676.                         }
  677.                 }
  678.         }
  679.         if(y_long > 32)
  680.         {
  681.                 for(y_num=0;y_num<=(y_long-32);y_num++)       /*下半屏显示*/
  682.                 {
  683.                         Send(0,(0x80 + y_num));                        //列地址
  684.                         Send(0,0x88);                                 //行地址
  685.                         for(x_num=0;x_num<(x_long/8);x_num++)
  686.                         {
  687.                                 Send(1,*p_image);
  688.                                 p_image++;
  689.                                 data_num++;
  690.                                 if(data_num >= len_image)
  691.                                 {
  692.                                         Send(0,0x36);
  693.                                         Send(0,0x30);
  694.                                         return ;
  695.                                 }
  696.                         }
  697.                 }
  698.         }
  699.         Send(0,0x36);
  700.         Send(0,0x30);
  701. }
复制代码

所有资料51hei提供下载:
LCD12864画点程序.rar (4.8 KB, 下载次数: 98)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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