找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3392|回复: 4
收起左侧

求助LCD12864(ST7920)液晶屏反白问题

[复制链接]
ID:261451 发表于 2018-6-21 10:47 | 显示全部楼层 |阅读模式
最近在学12864(ST7920)液晶屏,使用stc89c52rc单片机,串行方式显示,在网上找的反白程序,第一个是花屏,第二个能正常反白,但是会有很长时间的延时,不知道为什么,麻烦大家看看
回复

使用道具 举报

ID:261451 发表于 2018-6-21 10:59 | 显示全部楼层
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #include "4.h"
  6. uchar code table[] ="      首页      ";
  7. uchar code table1[]="  第一页第一行  ";
  8. uchar code table2[]="  第一页第二行  ";

  9. uchar code table3[]="  第二页第一行  ";
  10. uchar code table4[]="  第二页第二行  ";

  11. uchar code table5[]="  第三页第三行  ";
  12. uchar code table6[]="  第三页第四行  ";

  13. uchar fanye;
  14. uchar i,l,m,n,r,s,u,v;
  15. sbit LCD_SID=P0^6;
  16. sbit LCD_SCLK=P0^5;
  17. sbit key1=P1^1;   //光标开关
  18. sbit key2=P1^2;   //按键减一页
  19. sbit key3=P1^3;    //按键加一页

  20. void delay_ms(uint z)
  21. {
  22.    uint x,y;
  23.         for(x=z;x>0;x--)
  24.                 for(y=110;y>0;y--);
  25. }
  26. void sendbyte(unsigned char bbyte) //发送一个字节
  27. {
  28. unsigned char i;
  29. for(i=0;i<8;i++)
  30.    {
  31.    LCD_SID=bbyte&0x80; //取出最高位
  32.    LCD_SCLK=1;
  33.    LCD_SCLK=0;
  34.    bbyte<<=1; //左移
  35.    }  
  36. }

  37. void write(bit start, unsigned char ddata) //写指令或数据
  38. {
  39.   unsigned char start_data,Hdata,Ldata;
  40.   if(start==0)
  41.     start_data=0xf8;  //写指令
  42.   else      
  43.         start_data=0xfa;  //写数据
  44.   
  45.   Hdata=ddata&0xf0;    //取高四位
  46.   Ldata=(ddata<<4)&0xf0;  //取低四位
  47.   sendbyte(start_data);   //发送起始信号
  48.   delay_ms(1); //延时
  49.   sendbyte(Hdata);       //发送高四位
  50.   delay_ms(1);
  51.   sendbyte(Ldata);    //发送低四位
  52.   delay_ms(1);
  53. }
  54. //***********一行显示8个汉字***********
  55. //***************汉字显示***************
  56. //***X为行Y为列,K为字的个数,*P为数组*
  57. //*************************************
  58. void chinese(uchar x,uchar y,uchar k,uchar *p)
  59. {
  60.         uchar hang,out,i;
  61.         y=y-1;
  62.         switch(x)
  63.         {
  64.                 case 1:hang=0x80;break;
  65.                 case 2:hang=0x90;break;
  66.                 case 3:hang=0x88;break;
  67.                 case 4:hang=0x98;break;        
  68.         }
  69.         out=hang+y;        
  70.         write(0,out);
  71.         for(i=0;i<k*2;i++) {
  72.              write(1,*p);
  73.                   p++;
  74.                     }
  75.                                 //write(1,p);
  76. }
  77. //**********一行显示16个字母***********
  78. //***********英文数字显示***************
  79. //***X为行Y为列,K为字的个数,*P为数组*
  80. //************************************
  81. void english(uchar x,uchar y,uchar k,uchar *p)
  82. {
  83.         uchar hang,out,i;
  84.         y=y-1;
  85.        
  86.         switch(x)
  87.         {
  88.                 case 1:hang=0x80;break;
  89.                 case 2:hang=0x90;break;
  90.                 case 3:hang=0x88;break;
  91.                 case 4:hang=0x98;break;        
  92.         }
  93.         out=hang+y;        
  94.         write(0,out);
  95.         for(i=0;i<k;i++) {
  96.                  write(1,*p);
  97.                   p++;
  98.                        }
  99. }

  100. void lcd_init()
  101. {
  102.         write(0,0x30);  //8位介面,基本指令集
  103.         write(0,0x0c);  //显示打开,光标关,光标位置关
  104.         write(0,0x01);  //清屏,将DDRAM地址计数器归零
  105.         delay_ms(10);
  106. }

  107. /*******************************反白1*************************
  108. void fanbai(uchar data1,uchar data2,uchar x0,uchar y0,uchar x1,uchar y1)
  109. {
  110. uchar i,j;
  111.         for(j=0;j<y1;j++)
  112.         {
  113.         for(i=0;i<x1;i++)
  114.           {
  115.                   write(0,0x34);
  116.                         write(0,y0+j);  //写y坐标
  117.                         write(0,x0+i);  //写x坐标
  118.                         write(0,0x30);
  119.                         write(1,data1);
  120.                         write(1,data2);
  121.           }
  122.         }
  123.         write(0,0x36);
  124. }
  125. /*****************************反白2****************************/

  126. void fanbai(uchar x)
  127. {
  128.     uchar i,j;
  129.     if(x<2)
  130.     {
  131.         for(j=0;j<32;j++)
  132.         {
  133.             for(i=0;i<8;i++)
  134.             {
  135.                 write(0,0x34);
  136.                 write(0,0x80+j);
  137.                 write(0,0x80+i);
  138.                 write(0,0x30);
  139.                                 if(x<1)
  140.                                 {
  141.                                     if(j<16)
  142.                                     {
  143.                         write(1,0xff);
  144.                         write(1,0xff);
  145.                                     }
  146.                                     else
  147.                                     {
  148.                                     write(1,0x00);  
  149.                         write(1,0x00);
  150.                                     }
  151.                                 }
  152.                                 else
  153.                 {
  154.                                     if(j<16)
  155.                                     {
  156.                         write(1,0x00);
  157.                         write(1,0x00);
  158.                                     }
  159.                                     else
  160.                                     {
  161.                                     write(1,0xff);
  162.                         write(1,0xff);
  163.                                     }
  164.                                 }                       
  165.             }
  166.         }
  167.         
  168.             for(j=32;j<64;j++)
  169.         {
  170.             for(i=0;i<8;i++)
  171.             {
  172.                 write(0,0x34);
  173.                 write(0,0x80+j-32);
  174.                 write(0,0x88+i);
  175.                 write(0,0x30);
  176.                 write(1,0x00);
  177.                 write(1,0x00);
  178.             }
  179.         }
  180.         }
  181.         else
  182.     {
  183.             for(j=0;j<32;j++)
  184.         {
  185.             for(i=0;i<8;i++)
  186.             {
  187.                 write(0,0x34);
  188.                 write(0,0x80+j);
  189.                 write(0,0x80+i);
  190.                 write(0,0x30);
  191.                 write(1,0x00);
  192.                 write(1,0x00);
  193.             }
  194.         }
  195.                 for(j=32;j<64;j++)
  196.         {
  197.             for(i=0;i<8;i++)
  198.             {
  199.                 write(0,0x34);
  200.                 write(0,0x80+j-32);
  201.                 write(0,0x88+i);
  202.                 write(0,0x30);
  203.                                 if(x<3)
  204.                                 {
  205.                                     if(j<48)
  206.                                     {                                    
  207.                         write(1,0xff);
  208.                         write(1,0xff);
  209.                                     }
  210.                                     else
  211.                                     {
  212.                                     write(1,0x00);  
  213.                         write(1,0x00);
  214.                                     }
  215.                                 }
  216.                                 else
  217.                 {
  218.                                     if(j<48)
  219.                                     {                                    
  220.                         write(1,0x00);
  221.                         write(1,0x00);
  222.                                     }
  223.                                     else
  224.                                     {
  225.                                     write(1,0xff);  
  226.                         write(1,0xff);
  227.                                     }
  228.                                 }                       
  229.             }
  230.                 }
  231.     }     
  232.     write(0,0x36);
  233. }
  234. /******************显示***********************************/
  235.     void display1()
  236.     {
  237.                         write(0,0x01);
  238.                           english(1,1,15,table1);
  239.         english(2,1,15,table2);
  240.                                  }
  241.                 void display2()
  242.     {
  243.                         write(0,0x01);
  244.                         english(1,1,15,table3);
  245.         english(2,1,15,table4);
  246.         
  247.                                  }
  248.                 void display3()
  249.     {
  250.                         write(0,0x01);
  251.                           english(3,1,15,table5);
  252.         english(4,1,15,table6);
  253.                                  }
  254. void main()
  255. {
  256. lcd_init();
  257. write(0,0x01);
  258. english(2,1,15,table);
  259. while(1){
  260.             if(key1==0)     
  261.                             {
  262.                                  delay_ms(5);
  263.                                  if(key1==0){
  264.                                             //fanbai(0xff,0xff,0x88,2,0x90,2);
  265.                                             fanbai(3);       // 范围0,1,2,3
  266.                                                   write(0,0x30);  //8位介面,基本指令集
  267.                                             while(!key1);
  268.                                             }
  269.                            }
  270. //*********************按键翻页*******************/
  271.                      if(key3==0){
  272.                                           delay_ms(5);
  273.                                            if(key3==0){          //key3向右翻页
  274.                                                           fanye++;
  275.                                                            if(fanye>3){
  276.                                                                           fanye=3;
  277.                                                                                                                                             }
  278.                                                                                                                                   while(!key3);
  279.                                                     }
  280.                                           if(fanye==1){display1();}
  281.                                           if(fanye==2){display2();}
  282.                                           if(fanye==3){display3();}
  283.                                    }       
  284.                                  if(key2==0){
  285.                                                 delay_ms(5);
  286.                                                 if(key2==0){        //key2向左翻页
  287.                                                                 fanye--;
  288.                                                                 if(fanye<1){
  289.                                                                      fanye=1;
  290.                                                                                                                                              }
  291.                                                                                                                                   while(!key2);         
  292.                                                     }
  293.                         if(fanye==3){display3();}       
  294.                                                 if(fanye==2){display2();}
  295.                                                 if(fanye==1){display1();}
  296.                                     }
  297.                             }
  298.                }
复制代码

回复

使用道具 举报

ID:261451 发表于 2018-6-21 11:01 | 显示全部楼层
本帖最后由 一袋天骄 于 2018-6-21 11:27 编辑

反白测试程序

反白测试.zip

53.34 KB, 下载次数: 57

回复

使用道具 举报

ID:261451 发表于 2018-6-25 10:18 | 显示全部楼层
第一个花屏是因为烧上程序之后画图没有重置,不过也有3秒延时,第二个延时10秒,没办法
回复

使用道具 举报

ID:406128 发表于 2018-11-9 09:12 来自手机 | 显示全部楼层
我的也是延时
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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