⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 ti320C54x 液晶显示器显示图像的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    *T2CON = 0x0000;                    /* disable timer 2 */

    *GPTCONA = 0x0000;                  /* configure GPTCONA */
    *GPTCONB = 0x0000;                  /* configure GPTCONB */
/*     
 bit 15        0:      reserved
 bit 14        0:      T2STAT, read-only
 bit 13        0:      T1STAT, read-only
 bit 12-11     00:     reserved
 bit 10-9      00:     T2TOADC, 00 = no timerX event starts ADC
 bit 8-7       00:     T1TOADC, 00 = no timerX event starts ADC
 bit 6         0:      TCOMPOE, 0 = Hi-z all timer compare outputs
 bit 5-4       00:     reserved
 bit 3-2       00:     TXPIN, 00 = forced low
 bit 1-0       00:     TXPIN, 00 = forced low
*/
     
     * IMR=0x0000; 

/*     
 bit 15-6     0:      reserved
 bit 5        0:      Level INT6 is masked
 bit 4        0:      Level INT5 is masked
 bit 3        0:      Level INT4 is masked
 bit 2        0:      Level INT3 is masked
 bit 1        0:      Level INT2 is masked
 bit 0        0:      Level INT1 is masked

*/

     * IFR=0xFFFF;              //清除所有中断标志,"写1清0"

}

//--------------------------------------------------------------------
// 函数名称 : void delay_50ms(void)             
// 函数说明 : 50ms延迟
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void delay_50ms()
{
   UINT16 i,j;
   
   for(i=0;i<=1000;i++);
     for(j=0;j<=2000;j++);  //延迟250*1000*CLKOUT=500000*CLKOUT
                           //1/CLKOUT=0.2us 
}     

//--------------------------------------------------------------------
// 函数名称 : void delay_20ms(void)             
// 函数说明 : 20ms延迟
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void delay_20ms()
{
   UINT16 i,j;
   
   for(i=0;i<=1000;i++);
     for(j=0;j<=400;j++);  //延迟10*1000*CLKOUT=100000*CLKOUT
                           //1/CLKOUT=0.2us 
}  

//--------------------------------------------------------------------
// 函数名称 : void SendByte(UCHAR dat) 串行发送一字节数据
// 函数说明 : 串行发送一字节数据,在时钟的上升沿发送数据,在时钟为低电平时,数据变化
// 输入参数 : 发送的数据
// 输出参数 : 无
//--------------------------------------------------------------------
void SendByte(UCHAR dat)
{
     UCHAR i;
     UINT16 temp;
     for(i=0;i<8;i++)
           {
                 temp = port8007;    //读IO 8007 SCLK="0";
                 
                 if(dat & 0x0080)
                   port8006 = 0;    //写IO 8006 SID="1",发送数据"1" MSB先发送
                 else 
                   temp = port8006; //读IO 8006 SID="0",发送数据"0" MSB先发送
                   
                  port8007 = 0;     //写IO 8007 SCLK="1";
                  
                  dat = dat<<1;     //数据左移,移位到dat.7
            }

                  temp = port8007 ; //读IO 8007 SCLK="0";
}


//--------------------------------------------------------------------
// 函数名称 : void SendCMD(UCHAR dat)   写指令寄存器             
// 函数说明 : 写指令寄存器 
// 输入参数 : 输入的命令字
// 输出参数 : 无
//-------------------------------------------------------------------- 

void SendCMD(UCHAR dat)
{
     SendByte(0x00F8);             //11111,00,0 RW=0,RS=0 同步标志
     SendByte(dat & 0x00F0);       //高四位
     SendByte((dat & 0x000F)<<4);  //低四位
}     

//--------------------------------------------------------------------
// 函数名称 : void SendDat(UCHAR dat)   写显示数据或单字节字符             
// 函数说明 : 写数据寄存器 
// 输入参数 : 输入的数据
// 输出参数 : 无
//-------------------------------------------------------------------- 

void SendDat(UCHAR dat)

{

     SendByte(0x00FA);             //11111,01,0 RW=0,RS=1
     SendByte(dat & 0x00F0);       //高四位
     SendByte((dat & 0x000F)<<4);  //低四位

}      
          

//--------------------------------------------------------------------
// 函数名称 : void display(UCHAR x_add,UCHAR dat1,UCHAR dat2)写汉字到LCD 指定的位置
// 函数说明 : x_add显示RAM的地址,dat1/dat2显示汉字编码 
// 输入参数 : x_add,dat1/dat2
// 输出参数 : 无
//-------------------------------------------------------------------- 

void Display(UCHAR x_add,UCHAR dat1,UCHAR dat2)

{
     SendCMD(x_add);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
     SendDat(dat1);
     SendDat(dat2);
}

//--------------------------------------------------------------------
// 函数名称 : void Initlcm(void)
// 函数说明 : 初始化 LCM
// 输入参数 : 无
// 输出参数 : 无
//-------------------------------------------------------------------- 

void Initlcm()
{

   asm(" nop ");
   delay_50ms();
   
   SendCMD(FUCSET);       //功能設定,8BIT 并口,基本指令集
   delay_100us();
 
   SendCMD(FUCSET);       //功能設定,8BIT 并口,基本指令集
   
   delay_100us(); 
   SendCMD(CURSOR);      //整體顯示,游標顯示,游標位置反白
   
   delay_100us();
   SendCMD(CLEAR);       //清除显示
   
   delay_20ms();     
   SendCMD(SETPOINT);    //進入點設定,游標右移,DDRAM 位址計數器(AC)加1
   
   delay_100us();
}

/*
***********************************************************
- 函数名称 : void Delay(int numbers)
- 函数说明 : 延时
- 输入参数 : numbers
- 输出参数 : 无
***********************************************************
*/
void Delay(UINT16 numbers)
{
  	UINT16 i,j;
  	for(i=0;i<40000;i++);
 
  		for(j=0;j<numbers;j++);

} 
	
/*
***********************************************************
- 函数名称 : interrupt void PHANTOM(void)
- 函数说明 : 伪中断子程序
- 输入参数 : 无
- 输出参数 : 无
***********************************************************
*/


interrupt void PHANTOM(void)
{
  
  * IFR=0xFFFF;              //清除所有中断标志,"写1清0"
  asm(" clrc INTM");         //开总中断
  return;
}

/*
************************************************************
	****************** 主函数 *******************
************************************************************
*/


void main()
{

   UINT16  temp,i;
   
//----------系统初始化-------------------------------  
   asm(" nop ");
   cpu_init();          //初始化CPU
   asm(" nop ");
   
//-----------LCD初始化--------------------------------
   asm(" nop ");
   Initlcm();
//------------LCD显示---------------------------------
for(;;)
{
   Delay(50000);
   Delay(50000);
   Delay(50000);
//-----------------------------------------------------------   
   SendCMD(0x0082);      //设定DDRAM的地址在第一行 82H
   delay_100us();
   for(i =0;i<10;i++)
   {
     
      SendDat(data_buff1[i]);
      delay_100us();
      asm(" nop ");
   }
   asm(" nop ");

   //------------------------------
   SendCMD(0x0092);      //设定DDRAM的地址在第二行 92H
   delay_100us();
   for(i =0;i<10;i++)
   {
     
      SendDat(data_buff2[i]);
      delay_100us();
   } 
   asm(" nop ");
  //-------------------------------- 
   SendCMD(0x008a);      //设定DDRAM的地址在第三行 8AH
   delay_100us();
   for(i =0;i<10;i++)
   {
     
      SendDat(data_buff3[i]);
      delay_100us();
   } 
   asm(" nop ");
   //--------------------------------
   SendCMD(0x009a);      //设定DDRAM的地址在第四行 9AH
   delay_100us();
   for(i =0;i<10;i++)
   {
     
      SendDat(data_buff4[i]);
      delay_100us();
   }
   asm(" nop ");
//-------------------------------------------------------------   
   delay_100us();
   Delay(50000);
   Delay(50000);
   Delay(50000);
   delay_100us();
   SendCMD(CLEAR);       //清除显示
   
   }
//----------- 踏步--------------------------  
           while(1)
          {
            temp = 0; 
          }
      
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -