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

📄 lcd54.c

📁 ti320C54x 液晶显示器显示图像的程序
💻 C
字号:
/*
;***********************************************************************
;*				  						 北京达盛科技有限公司
;*                                     	    研    发    部
;*
;*                                 	http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ---------------                                      
;*
;* 文件名称 : lcd.C	
;* 文件功能 : 该文件为测试lcd的测试程序,CPU=TMS320VC5402
;* 接口说明: LCD型号LCM12864ZK,青云公司,设置在串行方式
;             LCDRS<=HRESET; --LCD复位用CPU2的复位信号,低有效
;
;             LCDE(SCLK)<= 串行时钟, '1'写IO 8006
                                     '0'读IO 8006   
;             LCDCS< =1 ;   --LCD片选信号,‘1’允许,在CPLD里面直置‘1’
;             LCDRW(SID)<= 串行数据,'1'写IO 8007 
;                                      '0'读IO 8007  
*/
//------------------头文件--------------------------------------

//#include "MMRegs.h"
#include "DspRegDefine.h"   //VC5402 寄存器定义
//---------------------------------------------------------------
/*    ****************** 宏定义 ***************
************************************************************
*/

#define UCHAR  				unsigned char
#define UINT16 				unsigned int
#define UINT32 				unsigned long

#define TRUE     			1
#define FALSE    			0

//---------------------------------------------------------------
//--------------- LCD 指令 -----------------------------
//基本指令集 RE = 0
#define CLEAR        0x0001     //清除显示
#define RESAC        0x0002     //位址歸位
#define SETPOINT     0x0006     //進入點設定,游標右移,DDRAM 位址計數器(AC)加1
#define CURSOR       0x000F     //整體顯示,游標顯示,游標位置反白
#define MCURSOR      0x0014     //游標向右移動,AC=AC+1
#define FUCSET       0x0030     //功能設定,BIT MPU 控制界面,基本指令集,默认设置
#define CGRAMAC      0x0040     //設定CGRAM 位址 
#define DDRAMAC      0x0080     //設定DDRAM 位址
                              //第一行AC 範圍為80H..8FH
                              //第二行AC 範圍為90H..9FH
                              //第三行AC 範圍為A0H..AFH
                              //第四行AC 範圍為B0H..BFH
//#define READBF     RS=0,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
//                             BF  AC6 AC5 AC4 AC3 AC2 AC1 AC0
//                   讀取忙碌旗標(BF)和位址
//                   就是读取指令寄存器,PORT8006,BF=1,表示LCD忙碌
//#define WRITERAM   RS=1,RW=0,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
//                             D7  D6  D5  D4  D3  D2  D1  D0
//                   寫入資料到RAM
//                   就是写数据寄存器: PORT8005
//#define READRAM    RS=1,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
//                             D7  D6  D5  D4  D3  D2  D1  D0
//                   讀取RAM 的值
//                   就是从数据寄存器讀取資料, PORT8007

//擴充指令集 RE=1
#define IDLE         0x01     //待命模式
#define CGRAMSET     0x02     //捲動位址或RAM 位址選擇
#define REVERSE      0x04     //反白選擇
#define SLEEP        0x0c     //脫離睡眠模式
#define EFUCSET      0x66     //擴充功能設定,8 BIT MPU 控制界面,為擴充指令集動作,繪圖顯示ON
#define SISA         0x40     //設定IRAM 位址或捲動位址
#define SETGDRAM     0x80     //設定繪圖RAM 位址

//---------------------------------------------------------

//---------------------------------------------------------
/*   端口定义 */
//---------------------------------------------------------
ioport UINT16 port8006;       //串行时钟地址
ioport UINT16 port8007;       //串行数据地址

//----------------------------------------------------------
/*   全局变量定义 */
//---------------------------------------------------------

UCHAR  data_buff1[10] = "白日依山尽";

UCHAR  data_buff2[10] = "黄河入海流";
                         
UCHAR  data_buff3[10] = "欲穷千里目";
                         
UCHAR  data_buff4[10] = "更上一层楼";                           
/*
**********************************************************************
          *************** 所使用的函数原型 *****************
**********************************************************************
*/

void cpu_init(void); //初始化CPU

void Delay(UINT16 numbers);       //延迟

extern void delay_100us(void);    //100us延迟 --指令之间的延迟

extern void delay_1us(void);      //1us延迟   --时钟之间的延迟

void delay_50ms(void);            //50ms延迟  --复位延迟

void delay_20ms(void);            //20ms延迟  --清屏延迟

void SendByte(UCHAR dat);         //串行发送一字节数据

void SendCMD(UCHAR dat);          //写指令寄存器  

void SendDat(UCHAR dat);          //写显示数据或单字节字符

void Display(UCHAR x_add,UCHAR dat1,UCHAR dat2); //写汉字到LCD 指定的位置

void Initlcm(void);               //初始化 LCM
//-------------------------------------------------------------------
/*
************************************************************************
			*********************** 函数定义 ******************
************************************************************************
*/

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

{

	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
//-------------------------------------------------------------------	
//CLKMD DEFINITIONS:	
//    PLLMUL (bit 15-12) - 0000             PLL multiplier = 0 (mult by 1)
//    PLLDIV (bit 11)    -     0            PLL divider = 0 (div by 1)
//    PLLCOUNT (bit 10-3)-      11111111    PLL counter set to max
//    PLLONOFF (bit 2)   -              1   PLL on
//    PLLNDIV (bit 1)    -               1  Select PLL mode
//    PLLSTATUS (bit 1)  -                x PLL Status (read only)
//    ------------------
//                          0000011111111111 = 0x07ff CLKMD=1 X CLKIN
//--------------------------------------------------------------------	
   *(unsigned int*)CLKMD=0x0;         //switch to DIV mode clkout= 1/2 clkin
     while(((*(unsigned int*)CLKMD)&01)!=0);
   *(unsigned int*)CLKMD=0x07ff;      //switch to PLL X 1 mode
   
//--------------------------------------------------------------------
// ST0  DEFINITIONS:
//  ARP  (bit 15-13) - 000              Auxiliary register pointer
//  TC   (bit 12)    -    1             Test/control flag
//  C    (bit 11)    -     1            Carry is set to 1 if the result of an addition generates a carry; it is cleared to 0 if the
//                                     result of a subtraction generates a borrow.
//  OVA  (bit 10)    -      0           Overflow flag for accumulator A
//  OVB  (bit 9)     -       0          Overflow flag for accumulator B
//  DP   (bit 8-0)   -        00000000  Data-memory page pointer
//    --------------------
//                          0001 1000 0000 0000 =0x1800 Reset value
//--------------------------------------------------------------------
//   *(unsigned int*)ST0=0x1800; 
//--------------------------------------------------------------------
// ST1  DEFINITIONS:
//  BRAF  (bit 15)  - 0                 Block-repeat active flag     
//  CPL   (bit 14)  -  1                Compiler mode   CPL=0 DP;CPL=1 SP
//  XF    (bit 13)  -   1               XF status
//  HM    (bit 12)  -    0              Hold mode
//  INTM  (bit 11)  -     1             Interrupt mode INTM=0,All unmasked interrupts are enabled
//  Reser (bit 10)  -      0            Always read as 0
//  OVM   (bit 9)   -       0           Overflow mode
//  SXM   (bit 8)   -        1          Sign-extension mode
//  C16   (bit 7)   -         0         Dual 16-Bit/double-precision arithmetic mode
//  FRCT  (bit 6)   -          0        Fractional mode
//  CMPT  (bit 5)   -           0       Compatibility mode
//  ASM   (bit 4-0) -            00000  Accumulator shift mode
//    --------------------
//                          0110 1001 0000 0000 =0x2900 Reset value
//--------------------------------------------------------------------
//   *(unsigned int*)ST1=0x6900;
//--------------------------------------------------------------------  
 
//IPTR DEFINITIONS

⌨️ 快捷键说明

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