网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  TMS320LF2407 T6963 LCD应用实验         ★★★ 【字体:
TMS320LF2407 T6963 LCD应用实验
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-17    

//Main.c
//t6963液晶测试程序,数据端口8000H,代码端口8001H
#include "global.c"
void SystemInit();
void KickDog(); 
void ShowChar(unsigned char,unsigned char,unsigned char);
void ShowHZ(unsigned char,unsigned char,unsigned int);
void Init_Lcd(void);
void Clr_Lcd(void);
void Creat_CGRAM(unsigned char);
void Judge1_Ready(void);
void Judge2_Ready(void);
void Write_Code(void);
void Write1_Data(void);
void Write2_Data(void);
void Lcd_Delay(void);
void Lcd_Delay1(void);
unsigned int temp1,temp2;
unsigned long code_addr,data_addr; 
unsigned int LineChar=16;
unsigned int ColumnChar=8;
unsigned int ch1[3][16]={{0x00,0x00,00,00,00,0,00,00,00,00,00,00,00,00,00,00}, 
                     {0x11,0x0e,0x37,0x45,0x4c,0x43,0x4f,0x4d,0x45,0x00,0x39,0x4f,0x55,0x3e,0x3e,0x01}, /*;21H!*/ 
                     {00,00,00,0x14,0x28,0x50,00,00,00,00,00,00,00,00,00,00}}; 
unsigned int ch2[][8]= {{0x04,0x04,0x04,0x04,0x04,0x7C,0x04,0x04}, /*北*/
                       {0x04,0x04,0x0C,0x34,0xE4,0x44,0x04,0x00},
                       {0x40,0x40,0x40,0x44,0x4E,0x58,0x60,0x40},
                       {0x40,0x40,0x40,0x42,0x42,0x42,0x3E,0x00},
                       {0x02,0x01,0x7F,0x00,0x00,0x1F,0x10,0x10},  /*京*/
                       {0x1F,0x01,0x09,0x19,0x31,0x41,0x05,0x02},
                       {0x00,0x08,0xFC,0x00,0x00,0xF0,0x10,0x10},
                    {0xF0,0x00,0x30,0x18,0x0C,0x08,0x00,0x00},                   
                    {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x3F},  /*三*/
                       {0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00},
                       {0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0xF8},
                       {0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00},                      
                       {0x20,0x27,0x20,0x30,0xAB,0xAA,0xA2,0x23},  /*恒*/
                       {0x22,0x22,0x23,0x20,0x20,0x2F,0x20,0x00},
                       {0x00,0xFC,0x00,0x00,0xF8,0x08,0x08,0xF8},
                    {0x08,0x08,0xF8,0x00,0x00,0xFE,0x00,0x00},                        
                       {0x00,0x1F,0x10,0x1F,0x10,0x1F,0x01,0x11},  /*星*/
                       {0x1F,0x21,0x21,0x4F,0x01,0x01,0x7F,0x00},
                       {0x00,0xF8,0x08,0xF8,0x08,0xF8,0x00,0x00},
                    {0xFC,0x00,0x00,0xF8,0x00,0x00,0xFE,0x00},                   
                    {0x00,0x00,0xFC,0x05,0x85,0x4A,0x28,0x10},  /*欢*/
                       {0x18,0x18,0x24,0x24,0x41,0x86,0x38,0x00},
                       {0x80,0x80,0x80,0xFE,0x04,0x48,0x40,0x40},
                    {0x40,0x60,0xA0,0x90,0x18,0x0E,0x04,0x00},
                    {0x40,0x21,0x36,0x24,0x04,0x04,0xE4,0x24},  /*迎*/
                       {0x25,0x26,0x24,0x20,0x20,0x50,0x8F,0x00},
                       {0x00,0x80,0x7C,0x44,0x44,0x44,0x44,0x44},
                    {0x44,0x54,0x48,0x40,0x40,0x00,0xFE,0x00},                        
                       {0x08,0x09,0x11,0x12,0x34,0x32,0x52,0x94},  /*您*/
                       {0x11,0x10,0x00,0x29,0x28,0x68,0x07,0x00},
                       {0x00,0x00,0xFE,0x04,0x40,0x50,0x48,0x44},
                    {0x44,0x80,0x00,0x04,0x92,0x12,0xF0,0x00},
                    };/*北京三恒星欢迎您*/

main()

   SystemInit();          //系统初始化
  
   MCRA=MCRA & 0xC0FF;      //IOPB0-6设为IO口模式
   PBDATDIR=0xFFC2;        //所有LED=0
   PBDATDIR=PBDATDIR |0x003D;  //所有LED=1    
   code_addr=0x8010;
   data_addr=0x8000;
   
   MCRC=MCRC & 0xFFF0;
   PEDATDIR=PEDATDIR | 0x0200;
   PEDATDIR=PEDATDIR & 0xFFFD;
   asm(" nop ");
   asm(" nop ");
   asm(" nop ");
   asm(" nop ");
   PEDATDIR=PEDATDIR | 0x0202;
   Init_Lcd();
  
    ShowChar(0,0,1);
    Creat_CGRAM(28);
   
    ShowHZ(4,0,0x80);
    ShowHZ(4,2,0x84);
    ShowHZ(4,4,0x88);
    ShowHZ(4,6,0x8c);
    ShowHZ(4,8,0x90);
    ShowHZ(4,10,0x94);
ShowHZ(4,12,0x98);
ShowHZ(4,14,0x9c);
   
   while(1);
  
}

void SystemInit()

 
 asm(" SETC INTM "); /* 关闭总中断 */
 asm(" CLRC  SXM  "); /* 禁止符号位扩展 */
 asm(" CLRC  CNF  ");    /* B0块映射为 on-chip DARAM*/
 asm(" CLRC  OVM  ");    /* 累加器结果正常溢出*/
 SCSR1=0x83FE;          /* 系统时钟CLKOUT=20*0.5=10M */
       /* 打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=10M */
 WDCR=0x006F;   /* 禁止看门狗,看门狗时钟64分频 */
 KickDog();       /* 初始化看门狗 */ 
    IFR=0xFFFF;    /* 清除中断标志 */
    IMR=0x0000;    /* 关闭中断*/     
   

void ShowChar(unsigned char lin,unsigned char column,unsigned char k)
{
unsigned char i;

unsigned int StartAddr;

StartAddr=lin*LineChar +column; //定位起始行

for(i=0;i<16;i++)
{
data1=(unsigned char)(StartAddr);        
data2=(unsigned char)(StartAddr>>8);
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
data1=ch1[k][i];
Write1_Data();
data3=0xc4;
Write_Code();
StartAddr=StartAddr + 1;
}

}

void Creat_CGRAM(unsigned char count)
{
  unsigned int i,j;
  data1=0x03;         //CGRAM偏置地址设置
  data2=0x00;
  data3=0x22;
  Write1_Data();
  Write2_Data();
  Write_Code();
  data1=0x00;         //RAM地址指针设置
  data2=0x1c;
  data3=0x24;
  Write1_Data();
  Write2_Data();
  Write_Code();

  data3=0x0b0;
  Write_Code();      //为自动写入状态
 
  data1=count*8;     //汉字字节数
  for(i=0;i<count;i++)
 
  {
  for(j=0;j<8;j++)
  {
    Lcd_Delay();
    data2=ch2[i][j]; 
    Write2_Data();
  }
  }
 
  data3=0x0b2;
  Write_Code();
  Lcd_Delay1();
}

void ShowHZ(unsigned char lin,unsigned char column,unsigned int code)
{
unsigned char i;

unsigned int StartAddr1;

unsigned int temp;

temp=code;
StartAddr1=lin*LineChar +column; //定位起始行

for(i=0;i<4;i++)
{
data1=(unsigned char)(StartAddr1);        
data2=(unsigned char)(StartAddr1>>8);
data3=0x24;
Write1_Data();
Write2_Data();
Write_Code();
data1=temp;
Write1_Data();
data3=0xc4;
Write_Code();

if(i==0)
{
temp=temp+2;
StartAddr1=StartAddr1 + 1;
}
if(i==1)
{
temp=temp-1;
StartAddr1=StartAddr1 + 15;
}
if(i==2)

temp=temp+2;
StartAddr1=StartAddr1 + 1;
}

}

}

 

void Init_Lcd()
{
 data1=0x00;         //图形区首址 (0000H)
 data2=0x08;
 data3=0x42;
 Write1_Data();
 Write2_Data();
 Write_Code();
 data1=0x10;         //图形区宽度
 data2=0x00;
 data3=0x43;
 Write1_Data();
 Write2_Data();
 Write_Code();
 data1=0x00;         //文本区首址(1000h)
 data2=0x00;
 data3=0x40;
 Write1_Data();
 Write2_Data();
 Write_Code();      
 data1=0x10;         //文本区宽度
 data2=0x00;
 data3=0x41;
 Write1_Data();
 Write2_Data();
 Write_Code();
 
 data3=0xa7;          //设置光标的形状
 Write_Code();
 data1=0x0f;      //光标指针,data1为列(00-0f),data2(00-07)为行,8*8框格
 data2=0x07;
 data3=0x21;
 Write1_Data();
 Write2_Data();
 Write_Code();
 
 data3=0x9f;
 Write_Code();    //启用图形和文本显示,光标闪烁
 data3=0x81;
 Write_Code();    //字符发生器为CGRAM,显示方式为逻辑或
 
 data1=0x00;         //置地址指针位置,(*)
 data2=0x00;
 data3=0x24;
 Write1_Data();
 Write2_Data();
 Write_Code();
 
 Clr_Lcd();
 return;
}

void Clr_Lcd()
{
  unsigned int p=0,q=0,r=0;
 
  /*data1=0x03;         //CGRAM偏置地址设置
  data2=0x00;
  data3=0x22;
  Write1_Data();
  Write2_Data();
  Write_Code();*/
 
  data2=0x00;
  data3=0x0b0;
  Write_Code();      //为自动写入状态
  data1=0x2000;     //清显示RAM 0000H-2000H(8K)
  while(data1-->0)
  {
   
    //Judge2_Ready();
    Lcd_Delay1();
    data2=0x0; 
    Write2_Data();
  }
 
  data1=0x00;         //置地址指针位置,(*)
 data2=0x00;
 data3=0x24;
 Write1_Data();
 Write2_Data();
 Write_Code();
  data1=0x2000;     //写显示RAM 0000H-2000H(8K)
  while(data1-->0)
  {
    Lcd_Delay1();
    data2=0x0ff; 
    Write2_Data();
  }
 
   data1=0x00;         //置地址指针位置,(*)
 data2=0x00;
 data3=0x24;
 Write1_Data();
 Write2_Data();
 Write_Code();
  data1=0x2000;     //清显示RAM 0000H-2000H(8K)
  while(data1-->0)
  {
    Lcd_Delay1();
    data2=0x0; 
    Write2_Data();
  }
 
  data3=0x0b2;
  Write_Code();
 
   
 return;
}

void Lcd_Delay()
{
unsigned int i=1;
unsigned int j=1;
while(i--)
{
 while(j--){;}
}
}

void Lcd_Delay1()
{
unsigned int i=1;
unsigned int j=100;
while(i--)
{
 while(j--){;}
}
}

void Judge1_Ready()
{
 
 do
 {
 asm(" IN 8010h,_temp1 ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 temp1=temp1&3;
 }while(temp1!=3);
 temp1=0;
}

void Judge2_Ready()
{
 do
 {
 asm(" IN 8010h,_temp2 ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 temp2=temp2&8;
 }while(temp2!=8);
 temp2=0;
}

void Write_Code()
{
//Judge1_Ready();
 Lcd_Delay();
 
 PEDATDIR=PEDATDIR | 0x2020;
 asm(" ldp #010h ");
 asm(" OUT 062h,8010h "); 
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 //Lcd_Delay();
 return;
}

void Write1_Data()
{
 Lcd_Delay();
 PEDATDIR=PEDATDIR | 0x2000;
 PEDATDIR=PEDATDIR & 0xFFDF;
 //Judge1_Ready();
 asm(" ldp #010h ");
 asm(" OUT 060h,8000h ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 //Lcd_Delay();
 return;
}

void Write2_Data()
{
 Lcd_Delay();
 PEDATDIR=PEDATDIR | 0x2000;
 PEDATDIR=PEDATDIR & 0xFFDF;
 //Judge1_Ready();
 asm(" ldp #010h ");
 asm(" OUT 061h,8000h ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 //Lcd_Delay();
 return;
}

void KickDog()    /*踢除看门狗 */
{
 WDKEY=0x5555;
 WDKEY=0xAAAA;
}

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号