找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助12864液晶屏显示实时数据问题

[复制链接]
跳转到指定楼层
楼主
ID:261451 发表于 2018-7-24 15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include "delay.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6.         
  7. uchar code table2[]= "    气象站      ";
  8. uchar code table3[]= "光照:           ";
  9. uchar code table4[]= "风速:           ";
  10. uchar code table5[]= "风向:           ";
  11. uchar code table6[]= "温度:           ";
  12. uchar code table7[]= "湿度:           ";
  13. uchar code table8[]= "土温:           ";
  14. uchar code table9[]= "土湿:           ";
  15. uchar code table10[]="时:             ";
  16. uchar code table11[]="天:             ";
  17. uchar code table12[]="月:             ";
  18. uchar code table13[]="年:             ";
  19. uchar code table19[]="    降雨量      ";

  20. sbit LCD_SID=P0^6;
  21. sbit LCD_SCLK=P0^5;
  22. sbit key1=P1^1;       //确认
  23. sbit key2=P1^2;       //按键减一
  24. sbit key3=P1^3;       //按键加一
  25. sbit key4=P1^4;       //返回
  26. uint  guang,fengsu,fengxiang,wendu,wendu1,shidu,tuwen,tuwen1,tushi,yu_shi,yu_tian;//

  27. 实时数据
  28. long  yu_yue,yu_nian;//实时数据
  29. uchar fanye;
  30. void sendbyte(unsigned char bbyte) //发送一个字节
  31. {
  32. unsigned char i;
  33. for(i=0;i<8;i++)
  34.    {
  35.    LCD_SID=bbyte&0x80; //取出最高位
  36.    LCD_SCLK=1;
  37.    LCD_SCLK=0;
  38.    bbyte<<=1; //左移
  39.    }  
  40. }

  41. /**1ms延时**/
  42. void delay_ms(uint z)
  43. {
  44.    uint x,y;
  45.         for(x=z;x>0;x--)
  46.                 for(y=125;y>0;y--);
  47. }
  48. void delay_s(uint s)
  49. {
  50.         while(s--)
  51.         delay_ms(1000);
  52. }
  53. void write(bit start, unsigned char ddata) //写指令或数据
  54. {
  55.   unsigned char start_data,Hdata,Ldata;
  56.   if(start==0)
  57.     start_data=0xf8;  //写指令
  58.   else      
  59.         start_data=0xfa;  //写数据
  60.   
  61.   Hdata=ddata&0xf0;    //取高四位
  62.   Ldata=(ddata<<4)&0xf0;  //取低四位
  63.   sendbyte(start_data);   //发送起始信号
  64.   DelayMs(1); //延时是必须的
  65.   sendbyte(Hdata);       //发送高四位
  66.   DelayMs(1);  //延时是必须的
  67.   sendbyte(Ldata);    //发送低四位
  68.   DelayMs(1);  //延时是必须的
  69. }

  70. /**********一行显示16个字母***********
  71. ***********英文数字显示***************
  72. ***X为行Y为列,K为字的个数,*P为数组**
  73. *************************************/
  74. void english(uchar x,uchar y,uchar k,uchar *p)
  75. {
  76.         uchar hang,out,i;
  77.         y=y-1;
  78.         switch(x)
  79.         {
  80.                 case 1:hang=0x80;break;
  81.                 case 2:hang=0x90;break;
  82.                 case 3:hang=0x88;break;
  83.                 case 4:hang=0x98;break;        
  84.         }
  85.         out=hang+y;        
  86.         write(0,out);
  87.         for(i=0;i<k;i++)  {
  88.                  write(1,*p);
  89.                   p++;
  90.                        }               
  91.      //   write(1,p);
  92. }
  93.   void display_start()
  94.         {
  95.         write(0,0x01);
  96.         english(2,1,15,table2);//开始界面
  97.         }
  98.         void display1()
  99.     {
  100.                         write(0,0x01);
  101.                           english(2,1,15,table3);//光照
  102.                           guang=1234;
  103.                           write(0,0x93);
  104.                           write(1,0x30+guang/10000);
  105.                           write(1,0x30+guang/1000%10);
  106.                           write(0,0x94);
  107.                           write(1,0x30+guang/100%10);
  108.                           write(1,0x30+guang/10%10);
  109.                           write(0,0x95);
  110.                           write(1,0x30+guang%10);
  111.                            write(1,0x30);
  112.                           write(0,0x96);
  113.                           write(1,0x20);
  114.                           write(1,0x4c);
  115.                           write(0,0x97);
  116.                           write(1,0x78);
  117.                                  }
  118.                 void display2()
  119.                     {
  120.                         write(0,0x01);
  121.                         english(2,1,15,table4);//风速
  122.                         fengsu=1230;
  123.                         write(0,0x93);
  124.                         write(1,0x30+fengsu/1000);
  125.                         write(1,0x30+fengsu/100%10);
  126.                         write(0,0x94);                        
  127.                         write(1,0x2e);
  128.                         write(1,0x30+fengsu/10%10);
  129.                         write(0,0x95);
  130.                         write(1,0x30+fengsu%10);
  131.                         write(0,0x96);
  132.                         write(1,0x6d);
  133.                         write(1,0x2f);
  134.                         write(0,0x97);
  135.                         write(1,0x73);
  136.                         english(4,1,15,table5);//风向
  137.                         fengxiang=1800;
  138.                         write(0,0x9b);
  139.                         write(1,0x30+fengxiang/1000);
  140.                         write(1,0x30+fengxiang/100%10);
  141.                         write(0,0x9c);
  142.                         write(1,0x30+fengxiang/10%10);
  143.                         write(1,0x2e);
  144.                         write(0,0x9d);
  145.                         write(1,0x30+fengxiang%10);
  146.                         write(0,0x9e);
  147.                         write(1,0xa1);
  148.                         write(1,0xe3);
  149.                                  }
  150.                 void display3()
  151.                 {
  152.                         write(0,0x01);
  153.                         english(2,1,15,table6);//空气温度
  154.                         wendu=120;
  155.                         //wendu=0xfff0;
  156.                         if(wendu<8000)
  157.                                 {
  158.                           write(0,0x93);
  159.                            write(1,0x30+wendu/100);
  160.                                  write(1,0x30+wendu/10%10);
  161.                            write(0,0x94);
  162.                            write(1,0x2e);
  163.                                  write(1,0x30+wendu%10);
  164.                                  write(0,0x96);
  165.                                  write(1,0xa1);
  166.                                  write(1,0xe6);
  167.                                 }
  168.                         if(wendu>=8000)
  169.                                 {
  170.                                  wendu1=0xffff-wendu+1;
  171.                                  write(0,0x93);
  172.                                  write(1,0x2d);
  173.                            write(1,0x30+wendu1/100);
  174.                                  write(0,0x94);
  175.                                  write(1,0x30+wendu1/10%10);
  176.                            write(1,0x2e);
  177.                                  write(0,0x95);
  178.                                  write(1,0x30+wendu1%10);
  179.                                  write(1,0x20);
  180.                                  write(0,0x96);
  181.                                  write(1,0xa1);
  182.                                  write(1,0xe6);
  183.                                 }
  184.                         english(4,1,15,table7);//空气湿度
  185.                                 shidu=120;
  186.                                 write(0,0x9b);
  187.                                 write(1,0x30+shidu/100);
  188.                                 write(1,0x30+shidu/10%10);
  189.                                 write(0,0x9c);
  190.                                 write(1,0x2e);
  191.                                 write(1,0x30+shidu%10);
  192.                                 write(0,0x9e);
  193.                                 write(1,0xa3);
  194.                                 write(1,0xa5);
  195.                                  }
  196.                 void display4()
  197.                   {
  198.                         write(0,0x01);
  199.                            english(2,1,15,table8);//土壤温度
  200.                         //tuwen=120;
  201.                         tuwen=0xfff0;
  202.                         if(tuwen<8000)
  203.                                 {
  204.                          write(0,0x93);
  205.                            write(1,0x30+tuwen/100);
  206.                                  write(1,0x30+tuwen/10%10);
  207.                            write(0,0x94);
  208.                            write(1,0x2e);
  209.                                  write(1,0x30+tuwen%10);
  210.                                  write(0,0x96);
  211.                                  write(1,0xa1);
  212.                                  write(1,0xe6);
  213.                                 }
  214.                         if(tuwen>=8000)
  215.                                 {
  216.                                  tuwen1=0xffff-tuwen+1;
  217.                                  write(0,0x93);
  218.                                  write(1,0x2d);
  219.                            write(1,0x30+tuwen1/100);
  220.                                  write(0,0x94);
  221.                                  write(1,0x30+tuwen1/10%10);
  222.                            write(1,0x2e);
  223.                                  write(0,0x95);
  224.                                  write(1,0x30+tuwen1%10);
  225.                                  write(1,0x20);
  226.                                  write(0,0x96);
  227.                                  write(1,0xa1);
  228.                                  write(1,0xe6);
  229.                                 }
  230.                               english(4,1,15,table9);//土壤湿度
  231.                                 tushi=210;
  232.                                 write(0,0x9b);
  233.                                 write(1,0x30+tushi/100);
  234.                                 write(1,0x30+tushi/10%10);
  235.                                 write(0,0x9c);
  236.                                 write(1,0x2e);
  237.                                 write(1,0x30+tushi%10);
  238.                                 write(0,0x9e);
  239.                                 write(1,0xa3);
  240.                                 write(1,0xa5);
  241.                                  }
  242.                 void display5()
  243.                       {
  244.                         write(0,0x01);
  245.                          english(1,1,15,table19);
  246.                          english(2,1,15,table10);//小时雨量
  247.                          yu_shi=120;
  248.                          write(0,0x92);
  249.                          write(1,0x30+yu_shi/100);
  250.                          write(1,0x30+yu_shi/10%10);
  251.                          write(0,0x93);
  252.                          write(1,0x2e);
  253.                          write(1,0x30+yu_shi%10);
  254.                          write(0,0x95);
  255.                          write(1,0x6d);
  256.                          write(1,0x6d);
  257.                          english(4,1,15,table11);//天雨量
  258.                          yu_tian=2100;
  259.                          write(0,0x9a);
  260.                          write(1,0x30+yu_tian/1000);
  261.                          write(1,0x30+yu_tian/100%10);
  262.                          write(0,0x9b);
  263.                          write(1,0x30+yu_tian/10%10);
  264.                          write(1,0x2e);
  265.                          write(0,0x9c);
  266.                          write(1,0x30+yu_tian%10);
  267.                          write(1,0x20);
  268.                          write(0,0x9d);
  269.                          write(1,0x6d);
  270.                          write(1,0x6d);
  271.                                  }
  272.                 void display6()
  273.                       {
  274.                         write(0,0x01);
  275.                          english(1,1,15,table19);
  276.                          english(2,1,15,table12);//月雨量
  277.                          yu_yue=11110;
  278.                          write(0,0x92);
  279.                          write(1,0x30+yu_yue/10000);
  280.                          write(1,0x30+yu_yue/1000%10);
  281.                          write(0,0x93);
  282.                          write(1,0x30+yu_yue/100%10);
  283.                          write(1,0x30+yu_yue/10%10);
  284.                          write(0,0x94);
  285.                          write(1,0x2e);
  286.                          write(1,0x30+yu_yue%10);
  287.                          write(0,0x96);
  288.                          write(1,0x6d);
  289.                          write(1,0x6d);
  290.                          english(4,1,15,table13);//年雨量
  291.                          yu_nian=201422;
  292.                          write(0,0x9a);
  293.                          write(1,0x30+yu_nian/100000);
  294.                          write(1,0x30+yu_nian/10000%10);
  295.                          write(0,0x9b);
  296.                          write(1,0x30+yu_nian/1000%10);
  297.                          write(1,0x30+yu_nian/100%10);
  298.                          write(0,0x9c);
  299.                          write(1,0x30+yu_nian/10%10);
  300.                          write(1,0x2e);
  301.                          write(0,0x9d);
  302.                          write(1,0x30+yu_nian%10);
  303.                          write(0,0x9f);
  304.                          write(1,0x6d);
  305.                          write(1,0x6d);
  306.                                  }

  307. void lcd_init()
  308. {
  309.         write(0,0x30);  //8 位介面,基本指令集
  310.         write(0,0x0c);  //显示打开,光标关,反白关
  311.         write(0,0x01);  //清屏,将DDRAM的地址计数器归零
  312.         DelayMs(10);
  313. }

  314. void main()
  315. {
  316.         lcd_init();
  317.         DelayMs(100);
  318.         display_start();
  319.         while(1)
  320.         {
  321.                 if(key3==0)
  322.                 {
  323.                        delay_ms(50);
  324.                           if(key3==0) //key3向右翻页
  325.                                 {
  326.                                     if(fanye<6)
  327.                                         {
  328.                                           fanye++;
  329.                                         }
  330.                                 }
  331.                                 while(!key3);
  332.                                 if(fanye==1){display1();delay_ms(50);}
  333.                                 if(fanye==2){display2();delay_ms(50);}
  334.                                 if(fanye==3){display3();delay_ms(50);}
  335.                                 if(fanye==4){display4();delay_ms(50);}
  336.                                 if(fanye==5){display5();delay_ms(50);}
  337.                                 if(fanye==6){display6();delay_ms(50);}
  338.                         }
  339.                              if(key2==0)
  340.                                 {
  341.                                     delay_ms(50);
  342.                                        if(key2==0)  //key2向左翻页
  343.                                         {      
  344.                                          if(fanye>0)
  345.                                            {
  346.                                            fanye--;
  347.                                              }
  348.                                         }
  349.                                   while(!key2);
  350.                    if(fanye==6){display6();delay_ms(50);}
  351.                    if(fanye==5){display5();delay_ms(50);}
  352.                    if(fanye==4){display4();delay_ms(50);}
  353.                    if(fanye==3){display3();delay_ms(50);}
  354.                    if(fanye==2){display2();delay_ms(50);}
  355.                    if(fanye==1){display1();delay_ms(50);}
  356.                    if(fanye==0){display_start();delay_ms(50);}
  357.                                    }
  358.                                 
  359.         }
  360. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:261451 发表于 2018-7-24 15:32 | 只看该作者
使用的st7920液晶屏,这样一位一位的显示数据太麻烦了,程序占不下,怎样用字符串的方式显示实时数据呢,
回复

使用道具 举报

板凳
ID:261451 发表于 2018-7-24 16:28 | 只看该作者
实时数据是一位一位显示的,怎样用字符串的方式显示实时数据呢
回复

使用道具 举报

地板
ID:7485 发表于 2018-7-24 16:35 | 只看该作者
遇到什么问题了?求助什么?
回复

使用道具 举报

5#
ID:261451 发表于 2018-7-24 16:37 | 只看该作者
ahshmj 发表于 2018-7-24 16:35
遇到什么问题了?

数据显示太麻烦,程序太大了,想用字符串的方式显示数据,
回复

使用道具 举报

6#
ID:261451 发表于 2018-7-24 16:48 | 只看该作者
ahshmj 发表于 2018-7-24 16:35
遇到什么问题了?求助什么?

怎样把数字转化为字符串呢
回复

使用道具 举报

7#
ID:261451 发表于 2018-7-24 17:56 | 只看该作者
显示多个小数,数据长度不同,小数位数也不同
回复

使用道具 举报

8#
ID:261451 发表于 2018-7-25 16:49 | 只看该作者
    本来想把程序改小一点,结果又硬生生大了2k怎样用把变量转化成字符串然后显示出来呢
回复

使用道具 举报

9#
ID:76201 发表于 2018-7-31 18:06 | 只看该作者
查看附件

51单片机轻松入门_勘误(1).pdf

3.4 MB, 下载次数: 18

回复

使用道具 举报

10#
ID:261451 发表于 2018-8-1 10:08 | 只看该作者

看不懂,是换单片机么
回复

使用道具 举报

11#
ID:523982 发表于 2019-5-18 19:40 | 只看该作者
网络上挺多的
  1. //====================================================================//
  2. //  语法格式:        Int_To_Str(int x,char *Str)
  3. //        实现功能:        转化整型值为字符串形式
  4. //        参数:                x: 转化的整数
  5. //                                Str:转化后的字符串
  6. //        返回值:        无
  7. //====================================================================//
  8. void Int_To_Str(int x, char *Str)
  9. {
  10.         int t;
  11.         char *Ptr, Buf[5];
  12.         int i = 0;

  13.         Ptr = Str;
  14.         if(x < 10)                // 当整数小于10时,转化为"0x"的格式
  15.         {
  16.                 *Ptr++ = '0';
  17.                 *Ptr++ = x + 0x30;
  18.         }
  19.         else
  20.         {
  21.                 while(x > 0)
  22.                 {
  23.                         t = x % 10;
  24.                         x = x / 10;
  25.                         Buf[i++] = t+0x30;        // 通过计算把数字转化成ASCII码形式
  26.                 }
  27.                 i-- ;
  28.                 for(; i >= 0; i --)         // 将得到的字符串倒序
  29.                 {
  30.                         *(Ptr++) = Buf[i];
  31.                 }
  32.         }
  33.         *Ptr = '\0';
  34. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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