查看: 2995|回复: 1

C5000音频电容式触摸扩展板 功能拆解之 液晶显示函数分析

[复制链接]
  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-1-4 00:06:52 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wangku001wei 于 2013-1-4 00:13 编辑

    将触摸文件库 和 C5000的 库文件 分别放到两个文件夹中 CapacitiveTouchLibrary 和 ACTBP
    新建一个G2553的工程文件
    同时将以上两个文件夹考入工程文件的目录中
    图片1.png
    此时在CCS的左侧工程浏览器中会出现这些文件
    图片2.png
    我们在main函数中先写入如下代码 (后期肯定会参考 ACTBP_Host_App.c 文件修改)

    /*
    * main.c
    */
    #include <msp430g2553.h>
    #include "CTS_Layer.h"
    #include "ACTBP_uart.h"
    #include "ACTBP_capinput.h"
    #include "ACTBP_timer.h"
    #include "ACTBP_HostVars.h"
    #include "ACTBP_display.h"
    #include "ACTBP_filesys.h"


    void main(void)
    {
            WDTCTL = WDTPW + WDTHOLD;
            
            BCSCTL3 |= LFXT1S_2;             //  LFXT1 -> VLO
            IFG1 &= ~OFIFG;
            _bis_SR_register(SCG1 + SCG0);   // stop dco
            BCSCTL2 |= SELM_3 + DIVM_3;      // MCLK->VLO 8DIV
    }


    刚开始编译 会出现一些问题
    将ACTBP_Host_App.c 文件删除 或者 修改其main函数名称 因为一个工程文件中只能有一个main函数
    提示 找不到头文件 #include "CTS_Layer.h"
    需要我们修改头文件包含路径
    图片3.png
    接下来 编译 还是有错误 但是只是在 structure.c 文件中了
    继续修改工程属性
    图片4.png
    OK 到此 工程初步编译成功

    本次实验室目的是 实现控制C5000上的液晶屏进行显示
    我们主要考虑使用定时器函数 ACTBP自带的一些串口通信/控制函数

    首先 分析下ACTBP_Host_App.c 文件中 main函数的内容
    430 初始化函数中 主要完成以下工作
    ACLK 时钟进行了设置
    IO端口设置
    尤其是串口设置 UART_init();
    以及控制C5000上电的端口 P2.7
    查看电路图得到
    图片5.png
    这个给我们做便携式节能提供了很大的启发

    UART_init(); 函数在ACTBP_uart.c文件中进行了定义
    函数 LedStartUpSequence 设置ACTBP板子上的LED进行转动显示
    利用了定时器以及低功耗模式 实现延时
    因此 还需要定时器中断函数 该函数在文件 ACTBP_timer.h中定义了
    #pragma vector = TIMER0_A0_VECTOR
    __interrupt void Timer_A0_ISR(void)
    同时应该注意变量 timeout_count



    接下来 是ACTBP的初始化函数 在该函数中
    首先进行了延时
    然后进行了已经显示开机画面【重要】下面三个函数
    HScrollSet
    HScrollOn
    HScrollOff
    这三个函数都调用了 uif_writeScalar 函数
    在水平设置函数中 有如下参数
    #define SCROLL_H_LEFT    0
    #define SCROLL_H_RIGHT   1
    #define SCROLL_H_RATE1   1          // ? frames
    #define SCROLL_H_RATE2   2          // ? frames
    #define SCROLL_H_RATE3   3          // ? frames
    #define SCROLL_H_RATE4   4          // ? frames
    分别是左移 右移 以及移动“间隔”


    官方的解释如下 网址
    http://processors.wiki.ti.com/index.php/Audio_Capacitive_Touch_BoosterPack_Virtual_Registers_and_Commands#SIDxx_command
    SETSC command
    Command to set up the horizontal scroll. Use this command with $param register to set up the configuration parameter of the scoll. The parameter define the direction, the speed and the scrolling area. After isssuing this command, to start the scroll, issue the SCON command. To stop it, issue the SCOFF command.



    将通信双方的波特率改为19200 以提高通信速度,注意 这里利用了C5000提供的通信函数uif_writeScalar 提供了命令UIF_CMD_BAUDRATE 并采用接收返回消息的形式
    函数进行测试

    之后初始化显示屏 函数UART_reinit

    基本上我们目前能用到的相关初始化到此就可以了



    分析 Test_ACTBP 函数
    1 调用了命令 UIF_CMD_SETVP
    根据手册上说的
    SETVP command
    Command to set the viewport on the display frame buffer. A viewport is a rectangular area of the frame buufer, the content of which is rendered on the screen of display. On many display controllers, the size of display screen is smaller than the size of the display frame buffer. Only a partial area of display frame buffer can be displayed at once on the display screen. SERTVP command is used to define "the area of interest to be doisplayed on the screen. The coordinate of the area of interset is defined by $param register. The coordinate parameter $param=0xpqrs means the origin of the viewport is located in vertical 0xpq "dot" postion and 0xrs character postiton.
    应该是设置屏幕上显示的视点
    2 分4次写入需要显示的四行内容
    使用SIDxx 命令 设置了每行内容对应的ID (均为05)
    使用SETCUR 命令 设置光标在0 1 2 3 行
    使用PRTSxx 命令进行显示
    注意:以上显示内容是在 virtual screen 即虚拟屏幕上显示的
    (Send SETVP command to display on screen)
    3 调用SETVP命令将虚拟内容显示在实际屏幕上



    分析 InitDisplayScreen 函数
    存储不同的显示字符串并分配不同的ID 4 3 2
    UpdateDisplay_Dir 函数 将ID为2的字符串虚拟显示,即 "DIR:     ",
    Print_DirNav 函数将ID为4和0的字符串虚拟显示,即 "Scroll or Select     ",
    SetScreen 函数由于调用了SETVP 命令 实际显示出来
    Print_ClearLine 函数 将ID为3的字符串(全为空格)在行1 2 3 4 虚拟显示



    总之 显示的一般流程
    1 uif_writeArray函数写入字符串
    2 SIDxx 命令设置字符串对应的ID
    3 SETCUR命令设置坐标
    4 PRTSxx 命令虚拟现实
    5  SETVP 命令实际显示



    今天没时间了 自己验证显示字符串的工作下期补充



    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2015-12-14 11:43
  • 签到天数: 556 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-4 00:36:25 | 显示全部楼层
    sf                        
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-12 21:31 , Processed in 0.141164 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.