4463|5

7228

帖子

192

TA的资源

五彩晶圆(高级)

楼主
 

【玩转C2000 Launchpad】菜鸟LESSON-LCD12864串行 [复制链接]

一般LCD12864默认的是并行
而串行显示使用的引脚较少,两根线:数据线与脉冲线就行了
不像并行显示DB0-DB7 那么多线
串行显示尤为方便
注意点:
(1)
液晶上的R9。R10决定液晶的串行或者并行通讯方式。
液晶运在默认Pallelel模式。 R9用于设置接口模式。切换到SPI模式下,需要移动到R10的R9电阻。 液晶上的PSB已经拉为高电平。如果使用串行,需要取掉R9

(我使用的时候,把R9移除,并在R10上焊上了0欧姆电阻,如果不移除R9会出现短路现象)

(2)
RST引脚其实很灵活,看别人的程序是可以悬空,也可以接引脚模拟复位,也可以接电容和电阻

平台:
C2000
液晶:
ST7920 LCD12864

接法:CS高电平 RST低电平   两根线接GPIO19和GPIO12


最新回复

楼主你好,我用了一下你的程序,不会显示,很苦恼 #include "DSP28x_Project.h"     // Device Headerfile and Examples Include File #define SID_on GpioDataRegs.GPASET.bit.GPIO19 //SID #define SID_off GpioDataRegs.GPACLEAR.bit.GPIO19 // #define SCLK_on GpioDataRegs.GPASET.bit.GPIO12 //SCLK #define SCLK_off GpioDataRegs.GPACLEAR.bit.GPIO12 // unsigned char table1[]={"二零一三"}; unsigned char table2[]={"EE更给力"}; unsigned char i; void Gpio_Init(void); void LCD_Init(void); void write_data(unsigned char data); void write_com(unsigned char com); void Sendbyte(unsigned char data1); void main(void)         {         // Step 1. Initialize System Control:         // PLL, WatchDog, enable Peripheral Clocks         // This example function is found in the DSP2802x_SysCtrl.c file.            InitSysCtrl();         // Step 2. Initalize GPIO:         // This example function is found in the DSP2802x_Gpio.c file and         // illustrates how to set the GPIO to it's default state.         // InitGpio();  // Skipped for this example         // For this example use the following configuration:         // Step 3. Clear all interrupts and initialize PIE vector table:         // Disable CPU interrupts            DINT;                                        //屏蔽中断         // Initialize PIE control registers to their default state.         // The default state is all PIE interrupts disabled and flags         // are cleared.         // This function is found in the DSP2802x_PieCtrl.c file.            InitPieCtrl();                        //初始化中断控制寄存器         // Disable CPU interrupts and clear all CPU interrupt flags:            IER = 0x0000;                                        //中断使能寄存器,某一位是1表示使能中断            IFR = 0x0000;                                        //中断标志寄存器,某一位是1表示产生中断标志         // Initialize the PIE vector table with pointers to the shell Interrupt         // Service Routines (ISR).//中断服务程序是ISR         // This will populate the entire table, even if the interrupt         // is not used in this example.  This is useful for debug purposes.         // The shell ISR routines are found in DSP2802x_DefaultIsr.c.         // This function is found in DSP2802x_PieVect.c.            InitPieVectTable();//初始化中断向量表,把向量表复制到指定RAM段,防止非法中断的产生         // Step 4. Initialize all the Device Peripherals:         // This function is found in DSP2802x_InitPeripherals.c         // InitPeripherals(); // Not required for this example         // Step 5. User specific code:           MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);           Gpio_Init();           LCD_Init();         //************************The first line**********************//                            write_com(0x80);                            write_data(0x03);                           write_data(0x03);            while(1);         } void Gpio_Init(void)         {                                 EALLOW;                                 //GpioCtrlRegs.GPAPUD.all=0xff;                                 GpioCtrlRegs.GPAMUX1.all = 0x00000000;  // All GPIO                                 GpioCtrlRegs.GPAMUX2.all = 0x00000000;  // All GPIO                                 GpioCtrlRegs.GPBMUX1.all = 0x00000000;  // All GPIO                                 GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;   // All outputs                                 GpioCtrlRegs.GPBDIR.all = 0x0000000F;   // All outputs                                 EDIS;         } //******************Datas sending function*************// void Sendbyte(unsigned char data1) { unsigned int i; for(i=0; i  详情 回复 发表于 2013-7-16 10:37
 
点赞 关注

回复
举报

7228

帖子

192

TA的资源

五彩晶圆(高级)

沙发
 
  1. #define SID_on GpioDataRegs.GPASET.bit.GPIO19 //SID
  2. #define SID_off GpioDataRegs.GPACLEAR.bit.GPIO19 //
  3. #define SCLK_on GpioDataRegs.GPASET.bit.GPIO12 //SCLK
  4. #define SCLK_off GpioDataRegs.GPACLEAR.bit.GPIO12 //

  5. unsigned char table1[]={"二零一三"};
  6. unsigned char table2[]={"EE更给力"};

  7. unsigned char i;


  8. void sendbyte(unsigned char send_dat)
  9. {
  10. unsigned int i;
  11. for(i=0; i<8; i++)
  12. {
  13. if((send_dat << i) & 0x80)
  14. {
  15. //P2OUT |=BIT4;//SID=1
  16. SID_on = 1;
  17. }
  18. else
  19. {
  20. //P2OUT &=~BIT4;
  21. SID_off = 1;
  22. }
  23. // P2OUT &=~BIT5;//SCLK = 0;
  24. // P2OUT |=BIT5;//SCLK = 1;
  25. SCLK_off = 1;
  26. SCLK_on = 1;
  27. }
  28. }

  29. /***************************************************************************
  30. ** Function name: write_com
  31. ** Descriptions: 写串口指令
  32. ****************************************************************************/
  33. //串口控制格式(11111AB0)
  34. //A数据方向控制,A=H时读, A=L时写
  35. //B数据类型选择,B=H时显示数据,B=L时显示命令

  36. void write_com(unsigned char com)
  37. {
  38. // P1OUT |=BIT5;//CS = 1;
  39. sendbyte(0xf8); //MCU向LCD发命令 A=0 B=0
  40. sendbyte(com & 0xf0); //发高四位数据(数据格式D7D6D5D4_0000)
  41. sendbyte((com << 4) & 0xf0); //发低四位数据(数据格式D3D2D1D0_0000)
  42. DELAY_US(10L);
  43. }

  44. /***************************************************************************
  45. ** Function name: write_dat
  46. ** Descriptions: 写串口数据
  47. ****************************************************************************/
  48. void write_dat(unsigned char dat)//写数据函数
  49. {
  50. sendbyte(0xfa);
  51. sendbyte(dat & 0xf0); //发高四位数据
  52. sendbyte((dat << 4) & 0xf0); //发低四位数据
  53. DELAY_US(10L);
  54. }
复制代码

点评

楼主你好,我用了一下你的程序,不会显示,很苦恼 #include \"DSP28x_Project.h\" // Device Headerfile and Examples Include File #define SID_on GpioDataRegs.GPASET.bit.GPIO19 //SID #define SID_  详情 回复 发表于 2013-7-16 10:37
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

板凳
 
恭喜楼主!!

楼主用的LCD背景不错。

在代码中没有发现它的初始化部分。不知道楼主的LCD的驱动芯片是哪一款

点评

哈哈 这个还要多谢斑竹 我学习的工程都是用的斑竹的模板啊 真的感谢斑竹 带我入门啊 液晶是ST7920 LCD12864  详情 回复 发表于 2013-1-15 11:25
 
 
 

回复

7228

帖子

192

TA的资源

五彩晶圆(高级)

4
 

回复 板凳 dontium 的帖子

哈哈 这个还要多谢斑竹
我学习的工程都是用的斑竹的模板啊 真的感谢斑竹 带我入门啊
液晶是ST7920 LCD12864
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

5
 
楼主使用的是模拟SPI,实际上比较一下使用芯片的SPI模块,它们的效率都差不多

因为驱动LCD时,除了SPI接口发数据,还要控制写信号。这样,体现不出使用SPI模块的优势
 
 
 

回复

63

帖子

1

TA的资源

一粒金砂(中级)

6
 

回复 沙发常见泽1 的帖子

楼主你好,我用了一下你的程序,不会显示,很苦恼
#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File


#define SID_on GpioDataRegs.GPASET.bit.GPIO19 //SID
#define SID_off GpioDataRegs.GPACLEAR.bit.GPIO19 //
#define SCLK_on GpioDataRegs.GPASET.bit.GPIO12 //SCLK
#define SCLK_off GpioDataRegs.GPACLEAR.bit.GPIO12 //
unsigned char table1[]={"二零一三"};
unsigned char table2[]={"EE更给力"};
unsigned char i;
void Gpio_Init(void);
void LCD_Init(void);
void write_data(unsigned char data);
void write_com(unsigned char com);
void Sendbyte(unsigned char data1);
void main(void)
        {
        // Step 1. Initialize System Control:
        // PLL, WatchDog, enable Peripheral Clocks
        // This example function is found in the DSP2802x_SysCtrl.c file.
           InitSysCtrl();

        // Step 2. Initalize GPIO:
        // This example function is found in the DSP2802x_Gpio.c file and
        // illustrates how to set the GPIO to it's default state.
        // InitGpio();  // Skipped for this example

        // For this example use the following configuration:


        // Step 3. Clear all interrupts and initialize PIE vector table:
        // Disable CPU interrupts
           DINT;                                        //屏蔽中断

        // Initialize PIE control registers to their default state.
        // The default state is all PIE interrupts disabled and flags
        // are cleared.
        // This function is found in the DSP2802x_PieCtrl.c file.
           InitPieCtrl();                        //初始化中断控制寄存器

        // Disable CPU interrupts and clear all CPU interrupt flags:
           IER = 0x0000;                                        //中断使能寄存器,某一位是1表示使能中断
           IFR = 0x0000;                                        //中断标志寄存器,某一位是1表示产生中断标志

        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).//中断服务程序是ISR
        // This will populate the entire table, even if the interrupt
        // is not used in this example.  This is useful for debug purposes.
        // The shell ISR routines are found in DSP2802x_DefaultIsr.c.
        // This function is found in DSP2802x_PieVect.c.
           InitPieVectTable();//初始化中断向量表,把向量表复制到指定RAM段,防止非法中断的产生

        // Step 4. Initialize all the Device Peripherals:
        // This function is found in DSP2802x_InitPeripherals.c
        // InitPeripherals(); // Not required for this example

        // Step 5. User specific code:
          MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
          Gpio_Init();
          LCD_Init();

        //************************The first line**********************//
                           write_com(0x80);
                           write_data(0x03);
                          write_data(0x03);
           while(1);
        }

void Gpio_Init(void)
        {
                                EALLOW;
                                //GpioCtrlRegs.GPAPUD.all=0xff;
                                GpioCtrlRegs.GPAMUX1.all = 0x00000000;  // All GPIO
                                GpioCtrlRegs.GPAMUX2.all = 0x00000000;  // All GPIO
                                GpioCtrlRegs.GPBMUX1.all = 0x00000000;  // All GPIO
                                GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;   // All outputs
                                GpioCtrlRegs.GPBDIR.all = 0x0000000F;   // All outputs
                                EDIS;
        }

//******************Datas sending function*************//

void Sendbyte(unsigned char data1)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((data1 << i) & 0x80)
{
//P2OUT |=BIT4;//SID=1
SID_on = 1;
}
else
{
//P2OUT &=~BIT4;
SID_off = 1;
}
// P2OUT &=~BIT5;//SCLK = 0;
// P2OUT |=BIT5;//SCLK = 1;
SCLK_off = 1;
SCLK_on = 1;
}
}

/***************************************************************************
** Function name: write_com
** Descriptions: 写串口指令
****************************************************************************/
//串口控制格式(11111AB0)
//A数据方向控制,A=H时读, A=L时写
//B数据类型选择,B=H时显示数据,B=L时显示命令

void write_com(unsigned char com)
{
// P1OUT |=BIT5;//CS = 1;
Sendbyte(0xf8); //MCU向LCD发命令 A=0 B=0
Sendbyte(com & 0xf0); //发高四位数据(数据格式D7D6D5D4_0000)
Sendbyte((com << 4) & 0xf0); //发低四位数据(数据格式D3D2D1D0_0000)
DELAY_US(10L);
}

/***************************************************************************
** Function name: write_dat
** Descriptions: 写串口数据
****************************************************************************/
void write_data(unsigned char data)//写数据函数
{
Sendbyte(0xfa);
Sendbyte(data & 0xf0); //发高四位数据
Sendbyte((data << 4) & 0xf0); //发低四位数据
DELAY_US(10L);
}
void LCD_Init(void)
        {
                write_com(0x01);
                write_com(0x30);
                write_com(0x0c);
                write_com(0x06);
                write_com(0x02);
        }


//=========================================================================
// No more.
//=========================================================================

[ 本帖最后由 woshilee 于 2013-7-16 10:38 编辑 ]
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表