打印
[技术问答]

悬赏解答

[复制链接]
1167|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
啪啪啪|  楼主 | 2014-2-10 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 啪啪啪 于 2014-2-10 16:43 编辑

请各位大牛,帮我看一个void Lcd_Show 这个function模块,帮我细细的讲解一下,谢谢了。小弟初学乍到,还请各位不耻下教。

======================================================================
#include <stdint.h>
#include "nano1xx_lcd.h"

#define  a       0x08
#define  b       0x04
#define  c       0x02
#define  d       0x01
#define  e       0x00020000     //
#define  f       0x00040000     //
#define  g       0x04000200     //
#define  Lcd_h   0x00010000     //
#define  Lcd_cln 0x00080000

const uint32_t Tab_Lcd[16]={
                                
              a + b + c + d + e + f ,       //0
        b + c ,                       //1
        a + b + d + e + g ,           //2
        a + b + c + d + g ,           //3
        b + c + f + g ,               //4
        a + c + d + f + g ,           //5
        a + c + d + e + f + g ,       //6
        a + b + c ,                   //7
              e,   //8
   //     a + b + c + d + e + f + g ,   //8
        a + b + c + d + f + g ,       //9
        d + e + f ,                   //A : L
        c + d + e + g ,               //B : o
        g ,                           //C : -
        e + g ,                       //D : r
        a + d + e + f + g ,           //E : E
        0 ,                           //F : ¹ØÏÔ
} ;


void Lcd_Show(uint32_t adress, uint32_t Data)
{
   volatile uint32_t *p = &(LCD->MEM_0) ;

   *(p+adress-1) &= ~(e+f+ 0x04000000);        
   *(p+adress-1) |= Tab_Lcd[Data] & (e+f+ 0x04000000) ;      

   *(p+adress)   &= ~(a+b+c+d+Lcd_h + 0x200);         //   +Lcd_cln
   *(p+adress)   |= Tab_Lcd[Data] & (a+b+c+d+Lcd_h + 0x200) ;      
}

==================================================================
沙发
niuyaliang| | 2014-2-10 16:49 | 只看该作者
这个有什么好解答的呢,大概意思就是在液晶固定的位置显示需要的字符而已

使用特权

评论回复
板凳
啪啪啪|  楼主 | 2014-2-10 16:53 | 只看该作者
niuyaliang 发表于 2014-2-10 16:49
这个有什么好解答的呢,大概意思就是在液晶固定的位置显示需要的字符而已 ...

(p+adress-1)
这个是什么意思呢?为什么还要减1呢?

使用特权

评论回复
地板
啪啪啪|  楼主 | 2014-2-10 16:57 | 只看该作者
niuyaliang 发表于 2014-2-10 16:49
这个有什么好解答的呢,大概意思就是在液晶固定的位置显示需要的字符而已 ...

~(e+f+ 0x04000000)
比如
e = 0x00020000;  f = 0x0004000
那么 e+f = 0x00060000
e+f+0x04000000= 0x04060000
~(e+f+0x04000000)= 0xFCF9FFFF
不知道我这么算对不对呢?

使用特权

评论回复
5
niuyaliang| | 2014-2-10 17:01 | 只看该作者
啪啪啪 发表于 2014-2-10 16:57
~(e+f+ 0x04000000)
比如
e = 0x00020000;  f = 0x0004000

这个你按十六进制加就可以了,用计算器验证下

使用特权

评论回复
6
niuyaliang| | 2014-2-10 17:03 | 只看该作者
啪啪啪 发表于 2014-2-10 16:53
(p+adress-1)
这个是什么意思呢?为什么还要减1呢?

至于为什么要减一,取决于你的液晶,我猜测大概是因为从0行0列开始的,所以要减1吧

使用特权

评论回复
7
啪啪啪|  楼主 | 2014-2-10 17:17 | 只看该作者
niuyaliang 发表于 2014-2-10 17:01
这个你按十六进制加就可以了,用计算器验证下

/*------------- LCD (LCD) -----------------------------*/
/** @addtogroup NANO1xx_LCD NANO1xx LCD Control Register (LCD)
  @{
*/
typedef struct
{
  __IO uint32_t  CTL;                /*!< Offset: 0x0000   LCD Control Register                               */
  __IO uint32_t  DISPCTL;        /*!< Offset: 0x0004   LCD Display Control Register              */
  __IO uint32_t  MEM_0;                /*!< Offset: 0x0008   LCD SEG3 ~ SEG0 data                                  */

MEM_0的地址是0x0008吗?

使用特权

评论回复
8
niuyaliang| | 2014-2-10 19:30 | 只看该作者
啪啪啪 发表于 2014-2-10 17:17
/*------------- LCD (LCD) -----------------------------*/
/** @addtogroup NANO1xx_LCD NANO1xx LCD  ...

根据注释看,是偏移0x0008,是不是从0开始偏移,就不得而知了

使用特权

评论回复
9
zxf0168| | 2014-2-10 23:43 | 只看该作者
看下液晶的资料有可能是偏移,因液晶而言,看看资料吧

使用特权

评论回复
10
缥缈九哥| | 2014-2-11 11:16 | 只看该作者
显示7段码。

使用特权

评论回复
11
啪啪啪|  楼主 | 2014-2-11 17:14 | 只看该作者
本帖最后由 啪啪啪 于 2014-2-11 17:15 编辑
缥缈九哥 发表于 2014-2-11 11:16
显示7段码。

九哥可以给讲讲
void Lcd_Show(uint32_t adress, uint32_t Data)
这个函数模块吗?我有点看不懂。
这个算法是什么原理呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

粉丝