极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8309|回复: 6

[已解决] 求助:12864液晶怎样显示传感器数值

[复制链接]
发表于 2012-6-21 08:43:47 | 显示全部楼层 |阅读模式
12864液晶库里的函数只能显示字符串和图片,不知道如何显示传感器数值
我的库和弘毅老大的不一样
附件里st7920.h里有可以调用的函数,不清楚哪一个是显示变量的
  1. //可用串口方式对ST7920操作

  2. #ifndef __ST7920_H__
  3. #define __ST7920_H__

  4. #include <inttypes.h>
  5. //已经基本参数
  6. #define LCD_X_MAX        127
  7. #define LCD_Y_MAX        63

  8. //每行的首地址,基于RT12864-4M型液晶
  9. #define LINE_ONE_ADDRESS   0x80
  10. #define LINE_TWO_ADDRESS   0x90
  11. #define LINE_THREE_ADDRESS 0x88
  12. #define LINE_FOUR_ADDRESS  0x98

  13. //基本指令集预定义
  14. #define LCD_DATA                       1                 //数据位
  15. #define LCD_COMMAND                    0                         //命令位
  16. #define        LCD_CLEAR_SCREEN               0x01                  //清屏       
  17. #define        LCD_ADDRESS_RESET              0x02                //地址归零         
  18. #define        LCD_BASIC_FUNCTION                  0x30                //基本指令集
  19. #define        LCD_EXTEND_FUNCTION                   0x34                //扩充指令集

  20. //扩展指令集预定义
  21. #define        LCD_AWAIT_MODE                        0x01                 //待命模式       
  22. #define LCD_ROLLADDRESS_ON                0x03                //允许输入垂直卷动地址
  23. #define LCD_IRAMADDRESS_ON                0x02                //允许输入IRAM地址       
  24. #define        LCD_SLEEP_MODE                        0x08                 //进入睡眠模式
  25. #define        LCD_NO_SLEEP_MODE                0x0c                 //脱离睡眠模式
  26. #define LCD_GRAPH_ON                        0x36                //打开绘图模式
  27. #define LCD_GRAPH_OFF                        0x34                //关闭绘图模式

  28. #ifndef LCD_COLOR
  29. #define LCD_COLOR_BLACK                        1
  30. #define LCD_COLOR_WHITE                        0
  31. #endif

  32. class ST7920
  33. {
  34. public:
  35.         void LCD_Init(void);
  36.         void LCD_Write( unsigned char Data_Command , unsigned char uc_Content );
  37.         void LCD_ClearRam(void);
  38.         void LCD_DisplayCLR(void);
  39.         void LCD_ImgDisplayCharacter(unsigned char x,unsigned char y,unsigned char *img);
  40.         void LCD_ImgDisplay(unsigned char *img);
  41.         void LCD_ImgDisplay_from_flash(unsigned char *img);
  42.         void LCD_GraphModeSet(unsigned char Select);
  43.         void LCD_DisplayStrings_WithAddress(unsigned char ucAdd,const char *p);
  44.         void LCD_DisplayMatrix_WithAddress(unsigned char ucAdd,unsigned char *p);
  45.         void LCD_DisplayStrings(unsigned char x,unsigned char y,const char *p);
  46.         void Overturn_Char(unsigned char x,unsigned char y,unsigned char wide,unsigned char cor);
  47.         void Overturn_Font(unsigned char x,unsigned char y,unsigned char wide,unsigned char corv);
  48.         void chsDisplay_8bit(unsigned char ucAdd, unsigned char code);
  49.         void chsDisplay_16bit(unsigned char ucAdd, unsigned int code);
  50. private:
  51.         void LCD_SendByte(unsigned char a);
  52.         void LCD_CGRAM_AddressSet(unsigned char ucCGramAdd);
  53.         void LCD_DDRAM_AddressSet(unsigned char ucDDramAdd);
  54.         void LCD_GDRAM_AddressSet(unsigned char ucGDramAdd);
  55.         void LCD_CheckBusy(void);
  56.         unsigned char ReceiveByte(void);
  57.         unsigned char LCD_ReadData(void);
  58. };


  59. #endif        //#ifndef __ST7920_H__
复制代码
谢谢大家

ST7920_Serial.rar

79.75 KB, 下载次数: 123

回复

使用道具 举报

发表于 2012-6-21 08:54:14 | 显示全部楼层
感觉是
      void LCD_DisplayStrings(unsigned char x,unsigned char y,const char *p);
       void Overturn_Char(unsigned char x,unsigned char y,unsigned char wide,unsigned char cor);
       void Overturn_Font(unsigned char x,unsigned char y,unsigned char wide,unsigned char corv);
这三个中的一个。。。。
回复 支持 反对

使用道具 举报

发表于 2012-6-21 09:42:46 | 显示全部楼层
显示的函数就是 void LCD_DisplayStrings(unsigned char x,unsigned char y,const char *p); 如果你想要把传感器的读数显示出来的话需要先用Serial. Read()把传感器的数据读取出来然后储存在一个字符串里,让LCD显示
回复 支持 反对

使用道具 举报

发表于 2012-6-21 09:46:07 | 显示全部楼层
发一个以前用LCD12864显示DS1302时钟芯片时间的程序
  1. #include <PIC.h>
  2. #include <ST7920.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <DS1302.h>

  6. ST7920 a=ST7920();
  7. /* 接口定义
  8. CE(DS1302 pin5) -> Arduino D5
  9. IO(DS1302 pin6) -> Arduino D6
  10. SCLK(DS1302 pin7) -> Arduino D7
  11. */
  12. uint8_t CE_PIN   = 5;
  13. uint8_t IO_PIN   = 6;
  14. uint8_t SCLK_PIN = 7;

  15. /* 日期变量缓存 */
  16. char buf[50];
  17. char day[10];
  18. /* 串口数据缓存 */
  19. String comdata = "";
  20. int numdata[7] ={0}, j = 0, mark = 0;
  21. /* 创建 DS1302 对象 */
  22. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);


  23. void print_time()
  24. {
  25.     /* 从 DS1302 获取当前时间 */
  26.     Time t = rtc.time();
  27.     /* 将星期从数字转换为名称 */
  28.     memset(day, 0, sizeof(day));
  29.     switch (t.day)
  30.     {
  31.     case 1: strcpy(day, "Sunday"); break;
  32.     case 2: strcpy(day, "Monday"); break;
  33.     case 3: strcpy(day, "Tuesday"); break;
  34.     case 4: strcpy(day, "Wednesday"); break;
  35.     case 5: strcpy(day, "Thursday"); break;
  36.     case 6: strcpy(day, "Friday"); break;
  37.     case 7: strcpy(day, "Saturday"); break;
  38.     }
  39.     /* 将日期代码格式化凑成buf等待输出 */
  40.     snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
  41.     /* 输出日期到串口 */
  42.    // Serial.println(buf);
  43.    a.LCD_ClearRam();
  44.   delay(100);
  45.   a.LCD_DisplayStrings_WithAddress(0x80,buf);
  46. }


  47. void setup()
  48. {
  49.     Serial.begin(9600);
  50.     rtc.write_protect(false);
  51.     rtc.halt(false);
  52.    
  53.     a.LCD_Init();
  54.   delay(100);
  55. }

  56. void loop()
  57. {

  58.     /* 当串口有数据的时候,将数据拼接到变量comdata */
  59.     while (Serial.available() > 0)
  60.     {
  61.         comdata += char(Serial.read());
  62.         delay(2);
  63.         mark = 1;
  64.     }
  65.     /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
  66.     if(mark == 1)
  67.     {
  68.         Serial.print("You inputed : ");
  69.         Serial.println(comdata);
  70.         for(int i = 0; i < comdata.length() ; i++)
  71.         {
  72.             if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
  73.             {
  74.                 j++;
  75.             }
  76.             else
  77.             {
  78.                 numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  79.             }
  80.         }
  81.         /* 将转换好的numdata凑成时间格式,写入DS1302 */
  82.         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
  83.         rtc.time(t);
  84.         mark = 0;j=0;
  85.         /* 清空 comdata 变量,以便等待下一次输入 */
  86.         comdata = String("");
  87.         /* 清空 numdata */
  88.         for(int i = 0; i < 7 ; i++) numdata[i]=0;
  89.     }
  90.    
  91.     /* 打印当前时间 */
  92.     print_time();
  93.    
  94.     delay(1000);
  95. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-7-23 00:14:49 | 显示全部楼层
Muller_r 发表于 2012-6-21 09:46
发一个以前用LCD12864显示DS1302时钟芯片时间的程序#include
#include
#include

你好。。我想问问你这个程序用的是什么CPU,,不像是51的单片机啊。。。看不懂,是小白我,,求教一下
回复 支持 反对

使用道具 举报

发表于 2013-8-1 15:36:43 | 显示全部楼层
Atmega MCU
回复 支持 反对

使用道具 举报

发表于 2017-11-14 18:12:50 | 显示全部楼层
怎么 将超声波测距仪 显示在 12864上 啊  求  个 为大神们 帮助 一下   
我是个新手。。
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2017-11-23 20:55 , Processed in 0.045126 second(s), 9 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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