OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3295|回复: 2

刚学习段式液晶,请教大神一些关于段式显示的问题?

[复制链接]

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-5-18
在线时间
17 小时
发表于 2017-6-16 17:01:58 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 thanksbaby 于 2017-6-16 17:15 编辑

请问红框框这部分代码是根据箭头指的那部分写的吗?是怎样计算得出的?我这份代码是从宏晶官网下载的用IO口直接驱动段式液晶显示的程序?
麻烦大神指点下,红框框部分是怎么计算出来的?

完整代码如下:
/*---------------------------------------------------------------------*/
/* --- STC MCU International Limited ----------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.GXWMCU.com --------------------------------------------*/
/* --- QQ:  800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序   */
/*---------------------------------------------------------------------*/

#include        "config.h"


/*************        功能说明        **************

用STC15系列测试IO直接驱动段码LCD(6个8字LCD, 1/4 Dutys, 1/3 bias)。

LCD_IO16.c

******************************************/

/*************        本地常量声明        **************/
u8 code t_display[]={                                                //标准字库
//         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black         -   
        0x00,0x40
};


/*************        本地变量声明        **************/
u8        LCD_buff[8];
u8        scan_index;



/*************        本地函数声明        **************/



/*************  外部函数和变量声明 *****************/


/****************** 初始化LCD显存函数 ***************************/

void        Init_LCD_Buffer(void)
{
        u8        i;

        for(i=0; i<8; i++)        LCD_buff = 0;
}


/****************** LCD段码扫描函数 ***************************/
u8        code T_COM[4]={0x08,0x04,0x02,0x01};

void        LCD_scan(void)        //5us @22.1184MHZ
{
        u8        j;

        j = scan_index >> 1;
        P2n_pure_input(0x0f);                //全部COM输出高阻, COM为中点电压
        if(scan_index & 1)                                //反相扫描
        {
                P1 = ~LCD_buff[j];                        //
                P2 = ~(LCD_buff[j|4] & 0xf0);
        }
        else                                                        //正相扫描
        {
                P1 = LCD_buff[j];
                P2 = LCD_buff[j|4] & 0xf0;
        }
        P2n_push_pull(T_COM[j]);                //某个COM设置为推挽输出
        if(++scan_index >= 8)        scan_index = 0;

}

/*
MCU PIN        P17   P16   P15  P14 P13  P12  P11  P10  P27  P26  P25  P24   P23  P22  P21  P20
LCD PIN         1     2     3    4   5    6    7    8    9    10   11   12    13   14   15   16
LCD PIN name  SEG11 SEG10 SEG9 SEG8 SEG7 SEG6 SEG5 SEG4 SEG3 SEG2 SEG1 SEG0  COM3 COM2 COM1 COM0
               --    1D    2:   2D   2.   3D   4:   4D   4.   5D   5.   6D   COM3
                           1E    1C    2E   2C   3E   3C   4E   4C   5E   5C   6E   6C        COM2
                           1G    1B    2G   2B   3G   3B   4G   4B   5G   5B   6G   6B             COM1
                           1F    1A    2F   2A   3F   3A   4F   4A   5F   5A   6F   6A                  COM0

                        B7        B6        B5        B4        B3        B2        B1        B0

buff[0]:        --        1D        2:        2D        2.        3D        4:        4D
buff[1]:        1E        1C        2E        2C        3E        3C        4E        4C
buff[2]:        1G        1B        2G        2B        3G        3B        4G        4B
buff[3]:        1F        1A        2F        2A        3F        3A        4F        4A
buff[4]:        4.        5D        5.        6D        --        --        --        --
buff[5]:        5E        5C        6E        6C        --        --        --        --
buff[6]:        5G        5B        6G        6B        --        --        --        --
buff[7]:        5F        5A        6F        6A        --        --        --        --

*/

/****************** 对第1~6数字装载显示函数 ***************************/

u8        code T_LCD_mask[4]  = {~0xc0,~0x30,~0x0c,~0x03};
u8        code T_LCD_mask4[4] = {~0x40,~0x10,~0x04,~0x01};

void        LCD_load(u8 n,u8 dat)                //n为第几个数字,为1~6,dat为要显示的数字        10us@22.1184MHZ
{
        u8        i,k;
        u8        *p;

        if((n == 0) || (n > 6))        return;
        i = t_display[dat];

        if(n <= 4)        //1~4
        {
                n--;
                p = LCD_buff;
        }
        else
        {
                n = n - 5;
                p = &LCD_buff[4];
        }

        k = 0;
        if(i & 0x08)        k |= 0x40;                //D
        *p = (*p & T_LCD_mask4[n]) | (k>>2*n);
        p++;

        k = 0;
        if(i & 0x04)        k |= 0x40;                //C
        if(i & 0x10)        k |= 0x80;                //E
        *p = (*p & T_LCD_mask[n]) | (k>>2*n);
        p++;

        k = 0;
        if(i & 0x02)        k |= 0x40;                //B
        if(i & 0x40)        k |= 0x80;                //G
        *p = (*p & T_LCD_mask[n]) | (k>>2*n);
        p++;

        k = 0;
        if(i & 0x01)        k |= 0x40;                //A
        if(i & 0x20)        k |= 0x80;                //F
        *p = (*p & T_LCD_mask[n]) | (k>>2*n);
}




段式液晶显示.png

这部分的红框中ABCD是怎么计算出啊?请教下大家

这部分的红框中ABCD是怎么计算出啊?请教下大家

最佳答案

查看完整内容[请看2#楼]

如果LZ是玩段式液晶的话,建议不要用STC的芯片,因为没有自带驱动器,需要外围加驱动芯片,麻烦,可以考虑用内置驱动器的单片机
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
发表于 2017-6-16 17:01:59 | 显示全部楼层
如果LZ是玩段式液晶的话,建议不要用STC的芯片,因为没有自带驱动器,需要外围加驱动芯片,麻烦,可以考虑用内置驱动器的单片机
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-5-18
在线时间
17 小时
 楼主| 发表于 2017-6-21 17:55:39 | 显示全部楼层
黑夜之狼 发表于 2017-6-16 17:01
如果LZ是玩段式液晶的话,建议不要用STC的芯片,因为没有自带驱动器,需要外围加驱动芯片,麻烦,可以考虑 ...

谢谢你,我现在看的是官方的例程,所以一下子没弄明白
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-17 21:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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