CCS5.4+Proteus8的F28027实践课四、并行驱动LCD12864

趁着时间早,晚上九点四十,我们整理下12864的驱动程序,争取也弄成一个跟TI提供的类似源文件,然后共享给大家。
既然是12864,那最重要的肯定是12864时序的解读,在大学时期,12864还玩的真的很多,有并行驱动和串行驱动两种方式,今晚主要讲的是并行驱动,如果整理完了,时间还充足,我们也顺便一起把串行也整理了,毕竟F28027总共才22个GPIO端口,能省则省。
来,那我们再来啰嗦一把,一起看下12864相关资料。
首先看下它的管脚图:

很容易看懂管脚作用吧,我们就不废话了,直接看时序图了。
先看写操作时序:

看完了写时序,我们应该顺便把写LCD数据和指令的子函数写出来

//---------------------------------------------------------------------------
// WRITEDATA_LCD12864:
//---------------------------------------------------------------------------
// This function writes data to LCD12864
void WRITEDATA_LCD12864(unsigned char data)
{
    GpioDataRegs.GPADAT.bit.GPIO16=1;GpioDataRegs.GPADAT.bit.GPIO17=1;GpioDataRegs.GPADAT.bit.GPIO18=0;DELAY_US(100);GpioDataRegs.GPADAT.bit.GPIO17=0;GpioDataRegs.GPADAT.bit.GPIO18=1;DELAY_US(1);GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all&0xffffff00;GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all|data;DELAY_US(1);GpioDataRegs.GPADAT.bit.GPIO17=1;GpioDataRegs.GPADAT.bit.GPIO18=0;DELAY_US(1000);}

//---------------------------------------------------------------------------
// WRITECMD_LCD12864:
//---------------------------------------------------------------------------
// This function writes cmd to LCD12864
void WRITECMD_LCD12864(unsigned char cmd)
{
    GpioDataRegs.GPADAT.bit.GPIO16=0;GpioDataRegs.GPADAT.bit.GPIO17=1;GpioDataRegs.GPADAT.bit.GPIO18=0;DELAY_US(100);GpioDataRegs.GPADAT.bit.GPIO17=0;GpioDataRegs.GPADAT.bit.GPIO18=1;DELAY_US(1);GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all&0xffffff00;GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all|cmd;DELAY_US(1);GpioDataRegs.GPADAT.bit.GPIO17=1;GpioDataRegs.GPADAT.bit.GPIO18=0;DELAY_US(1000);}

再看读时序:

好,看完了时序图,我们紧接着就去看它的基本操作指令集:

基本操作指令集就到这了,我们现在来了解下如何写12864驱动程序。
首先是LCD的初始化

根据上面的写函数,LCD的初始化就比较简单了

//---------------------------------------------------------------------------// InitLCD12864://---------------------------------------------------------------------------// This function initializes the LCD12864 to a known (default) state.// such as FUNCTION SET,DSIPLAY SET,CLEAR SCREENvoid InitLCD12864(void){DELAY_US(10000);WRITECMD_LCD12864(0x30);DELAY_US(1000);WRITECMD_LCD12864(0x30);DELAY_US(100);WRITECMD_LCD12864(0x0c);DELAY_US(1000);WRITECMD_LCD12864(0x01);DELAY_US(10000);WRITECMD_LCD12864(0x06);DELAY_US(10000);
}

12864相关程序写完了,就可以直接去写主函数了,我这里比较简单,只让它显示一个字符而已

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();

// 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;
   IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (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();

// 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:

   InitLCD12864();

   WRITECMD_LCD12864(0x80);
   WRITEDATA_LCD12864('a');   while(1)
   {
//     GpioDataRegs.GPATOGGLE.all=0x000000ff;
//       DELAY_US(1000);
   }
}

到这里,相关的程序已经全部写完了,但是由于proteus没有我们常用12864的仿真库,所以打算明天直接用万用板搭一个测试平台出来,顺便把我们之前那几个实践课程的程序都验证下,期待我们明晚验证调试结果,调试完没问题后,就上传源代码,现在该洗洗睡了。

(0)

相关推荐

  • Proteus中,单片机仿真数码管显示的设计思路

    使用仿真软件Proteus可以实现单片机控制数码管显示的仿真.该仿真电路包括单片机的最小系统电路.数码管驱动电路,还需要进行编程.Proteus是支持程序联调的,运行后可以看到最终的仿真效果. 1 单 ...

  • 使用74LS164和74LS165实现简单I/O扩展

    使用74LS164和74LS165实现简单I/O扩展

  • 520了,用32做个简单的小程序

    此文转载自:https://blog.csdn.net/k_ksy/article/details/106233645 520到了,看着朋友圈里的花式秀恩爱,平常午餐最爱吃的泡面都变得不那么香了.于是 ...

  • STM32硬件基础

    [海东青电子原创文章,转载请注明出处:https://www.jianshu.com/p/62d1ef042d0c]TouchGFX是一套图形中间件代码,属于嵌入式软件范畴,它不可避免的要跟STM32 ...

  • CCS5.4+Proteus8的F28027实践课一、延时函数控制LED流水灯

    又是十二点了,但是很兴奋,因为从这节课开始,我们将会进行F28027一系列的动手实践练习,深入了解一门技术的唯一办法就是多动手实践,多总结反思. 来来来,不扯了,直接开始了. 在正式开始写程序前,我们 ...

  • CCS5.4+Proteus8的F28027实践课二、定时器0控制LED流水灯

    刚游泳回来,看到昨晚那篇博客访问量比较高,对我是莫大的鼓励,所以马不停蹄的去找了相关的手册准备我们今天的课程. 今天我们要说的是用定时器0产生的定时中断让LED闪烁. 大家都是大部分都是工科出身,应该 ...

  • CCS5.4+Proteus8的F28027实践课三、外部中断0控制LED流水灯

    吃完回来了,跟老弟打了个电话,他正处于事业的迷茫期,希望他早点走出这个状态.好了,现在已经晚上八点过十分了,希望十点前能把外部中断这个主题讲完. 外部中断的概念我还是稍微说下吧,就是你映射的外部中断引 ...

  • CCS5.4+Proteus8的F28027实践课五、实验板焊接调试

    今天回来的比较晚,但还是简单的把面包板给焊接调试了下,昨天写的那个12864程序果然不行..只能等明晚再搞了.力争做到一天一更,每天学习进步一点,才不会虚的慌. 今天的主要目的是把面包板焊接出来,稍微 ...

  • CCS5.4+Proteus8的F28027实践课六、实验板焊接调试(12864部分)

    下班早早回家就是为了把昨天没做完的事情搞完,但等我把12864调完之后,好想找块豆腐撞死算了,RS引脚跳线不知道什么时候被我弄断了,我竟然一直没有检查板子,只顾着对着时序图和寄存器检查程序,哎,直接给 ...

  • CCS5.4+Proteus8的F28027实践课七、ADC

    吃完饭回来了,现在开始我们的ADC实践操作. 直奔主题我们,那就是ADC编程操作流程是怎么样的. 其实通过上节理论课的学习,大家心里都应该有了模糊的感觉,一般的步骤如下: 1.使能ADC模块时钟( P ...

  • CCS5.4+Proteus8的F28027实践课八、内置温度传感器

    上午发布的ADC解读部分访问好高,呵呵,我又受鼓舞了,再接再励,把温度传感器这部分弄完就去吃晚饭. 看了下手册,温度传感器东西还真的不多,寄存器就一个ADCCTL1.TEMPCONV,其他的操作跟刚才 ...

  • CCS5.4+Proteus8的F28027实践课九、比较器

    今天写的不顺畅,一个AD写了八个小时,然后一个温度传感器又卡了四个小时,哎,没人能一马平川,特别是搞技术,我们的目的不是走马观花式的学习,而是真正了解寄存器的操作,不要怕时间不够,就怕时间花了还吃不透 ...

  • CCS5.4+Proteus8的F28027实践课十、SPI

    刚刚我们已经把SPI的理论知识部分讲完了,现在我们根据寄存器和时序图来写程序了. 首先,既然是SPI,肯定是复用了GPIO,我们先回顾下GPIO引脚说明: 从上面可以看到我们这次实践课需要复用GPIO ...