打印

DSP281X之LCD12864 C++程序代码

[复制链接]
3285|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-4-17 02:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//本程序在http://www.study-kit.com/list.asp?ProdId=NO052上通过测试
//HotPower@126.com 2008.4.17 2:28

#include "lcd.h"

LcdObj::LcdObj(void)
{
    Init();
}

void LcdObj::Init(void)
{
    SendCommand(0x30);//发送功能设定控制命令(8位)
    SendCommand(0x30);//发送功能设定控制命令(8位)
    SendCommand(0x01);//发送清除显示命令 
    SendCommand(0x06);//发送进入点命令0x06 
    SendCommand(0x0a);//发送开关显示关光标命令
    SendCommand(0x0c);//发送开显示关光标命令
    SendCommand(0x02);//发送位址归位命令,设定DDRAM位址计数器为0
      SendCommand(0x17);//游标或显示移位控制
    SendCommand(0x80);//发送设定DDRAM地址0x00命令,光标定位到(0,0)
    ClearBuffer();//清空LCD显示缓冲区
    DisplayBuffer();
}

void LcdObj::delay(unsigned int t)
{
      while(t>0)
      {
        t--;
        for (int i = 0; i < 150; i++);
    }
}

void LcdObj::SendCommand(char cCommand)
{
    LcdComH = cCommand;
    LcdComL = cCommand;
      if (cCommand == 0x01)//清除显示命令,需要等待时间相对较长
    {
        delay(1600);//st7920要求等待1.6mS
//        DSP28x_usDelay(1600);//st7920要求等待1.6mS
    }
      else
    {
        delay(72);//st7920要求等待72uS
//        DSP28x_usDelay(72);//st7920要求等待72uS
    }
}

void LcdObj::SendData(char cData)
{
    LcdDatH = cData;
    LcdDatL = cData;
    delay(72);//st7920要求等待72uS
//    DSP28x_usDelay(72);//st7920要求等待72uS
}

void LcdObj::ClearBuffer(void)
{
unsigned char i, j;
    for (i = 0;i < 4;i ++) 
    {
        for (j = 0;j < 16; j ++) 
        {
          Buffer[j] = ' ';
        }
        RowWriteEnable = 1;//允许此行刷新汉字显示
    }
    Row = 0;
    Col = 0;
}

void LcdObj::DisplayBuffer(void)
{
unsigned char i, j;
      for (i = 0; i < 4; i ++) 
      {//4行汉字
        if (RowWriteEnable
        {//允许此行刷新汉字显示
              SendCommand(0x80 + (i & 1) * 16 + (i >> 1) * 8);//移动光标
              for (j = 0; j < 16; j ++) 
              {//每行8个汉字16个字符
                SendData(Buffer[j]);//刷新显示字符
              }
              RowWriteEnable = 0;//过后不允许此行刷新汉字显示
        }
      }
}

void LcdObj::SetDisplayPos(unsigned char row, unsigned char col)
{
    Row = row & 0x03;//4行
    Col = col & 0x0f;//16列
}

void LcdObj::Display(const char *string)
{
char len, i;
      len = strlen(string);
      if ((Row < 4) && ((Col + len) <= 16)) 
      {
        if (len == 0) 
        {
              while(Col < 16) 
              {
                  Buffer[Row][Col ++] = ' ';
              }
        }
        else
              for (i = 0; i < len; i ++) Buffer[Row][Col ++] = string;
        RowWriteEnable[Row] = 1;//需要显示刷新
      }
}

#include "main.h"

class SystemObj System;
class TimerObj Timer;//系统时间类
class LcdObj Lcd;
class KeyboardObj Keyboard;


int main(void)
{
    Lcd.SetDisplayPos(0, 0);//汉字定位到上行左端
    Lcd.Display("汉字显示演示12");
    Lcd.SetDisplayPos(1, 0);//汉字定位到上行左端
    Lcd.Display("汉字显示演示34");
    Lcd.SetDisplayPos(2, 0);//汉字定位到上行左端
    Lcd.Display("汉字显示演示56");
    Lcd.SetDisplayPos(3, 0);//汉字定位到上行左端
    Lcd.Display("汉字显示演示78");

    EALLOW;
//    PieCtrlRegs.PIEACK.all = 0xFFFF;//PIEACK_GROUP1;
    PieCtrlRegs.PIEACK.bit.ACK7 = 1;
    EDIS;
    
    EINT;   // Enable Global interrupt INTM
    ERTM;    // Enable Global realtime interrupt DBGM
    for(;;)
    {
       asm(" nop");
    // Reset the watchdog counter
       KickDog();
    }
}


interrupt void ISRTimer0(void)
{
    Lcd.DisplayBuffer();//定时刷新LCD显示(只刷新新行字符)
    PieCtrlRegs.PIEACK.bit.ACK7 = 1;
//    PieCtrlRegs.PIEIFR1.bit.INTx7 = 1;
//    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
相关链接:http://www.study-kit.com/list.asp?ProdId=NO052

相关帖子

沙发
雪山飞鸽| | 2008-4-17 08:45 | 只看该作者

垃圾

真垃圾

使用特权

评论回复
板凳
zealane| | 2008-4-17 15:49 | 只看该作者

哈哈

说我们hotpower大叔垃圾,可见其人一定很。。。。。。。。

使用特权

评论回复
地板
zealane| | 2008-4-17 15:50 | 只看该作者

re

有这个谈吐的人,也不用去理他。

使用特权

评论回复
5
IceAge| | 2008-4-17 20:27 | 只看该作者

顶 hotpower

2 楼的雪山飞鸽的人品实在不厚道,鄙视之。

使用特权

评论回复
6
fiann| | 2008-4-17 23:52 | 只看该作者

事出有因

他可能受过伤害

使用特权

评论回复
7
hotpower|  楼主 | 2008-4-17 23:56 | 只看该作者

哈哈~~~没什么~~~俺会把ARM/DSP都倒塌成"尿童"系列的~~~

使用特权

评论回复
8
2_1_I_C| | 2008-4-18 17:07 | 只看该作者

不知道发这个程序的目的是什么

使用特权

评论回复
9
hotpower|  楼主 | 2008-4-18 20:50 | 只看该作者

哈哈~~~在做菜鸟的作业~~~

使用特权

评论回复
10
hotpower|  楼主 | 2008-4-18 23:23 | 只看该作者

说实话九天同志还需继续努力才是~~~

使用特权

评论回复
11
sheenhero| | 2008-4-21 16:18 | 只看该作者

学习。。。

使用特权

评论回复
12
camking| | 2008-4-22 10:42 | 只看该作者

使用特权

评论回复
13
hotpower|  楼主 | 2008-5-1 20:57 | 只看该作者

哈哈~~~说实话---九天的CPLD程序太倒塌~~~

有时间批评几句~~~

使用特权

评论回复
14
tjsheep| | 2008-5-1 23:36 | 只看该作者

呵呵,有广告图片的不能穿裤子了……

使用特权

评论回复
15
hotpower|  楼主 | 2008-5-2 01:01 | 只看该作者

哈哈~~~等俺家网管不上网了再批斗九天的CPLD程序~~~

哈哈~~~应该不加裤子~~~

可这是九天友情提供给菜农玩DSP2812的~~~

在此特别感谢!!!

不过俺玩DSP2812,做作业也是为了广大的DSP菜鸟们~~~

使用特权

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

本版积分规则

1538

主题

21697

帖子

506

粉丝