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

📄 lcd.c

📁 dsp控制lcd显示的程序,平台为DSP5416
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
;***********************************************************************
;*				  						 北京达盛科技有限公司
;*                                     	    研    发    部
;*
;*                                 	http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ---------------                                      
;*
;* 文件名称 : lcd.C	
;* 文件功能 : 该文件为测试lcd的测试程序,CPU=TMS320VC5402LF2407
;* 接口说明: 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 "exp4_2407.h"
/*******************************************************************/

//----------------------------------------------------------
// --------------- 宏定义 ---------------------------------/
//----------------------------------------------------------

#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

interrupt void PHANTOM(void);     //伪中断程序

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 Delay(UINT16 numbers);       //长延迟

//-------------------------------------------------------------------
/*
************************************************************************
			*********************** 函数定义 ******************
************************************************************************
*/

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

{

	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
    asm(" setc INTM");         //禁止所有中断 ST0.9=INTM
    asm(" clrc SXM");          //抑制符号位扩展
    asm(" clrc OVM");          //累加器中结果正常溢出
    asm(" clrc CNF");          //配置 B0为数据储存器

/*** Configure the System Control and Status registers ***/    
//    * SCSR1=0x0EFD;            //配置时钟锁相为0.5倍频CLKOUT=0.5*10MHZ=5MHZ
//    * SCSR1=0x0CFD;            //*0.57
//    * SCSR1=0x0AFD;            //*0.66
//    * SCSR1=0x08FD;            //*0.8
//    * SCSR1=0x06FD;            //*1
//    * SCSR1=0x04FD;            //*1.33
//      * SCSR1=0x02FD;          //*2 
        * SCSR1=0x00FD;          //*4 
/*
 bit 15        0:      reserved
 bit 14        0:      CLKOUT = CPUCLK
 bit 13-12     00:     IDLE1 selected for low-power mode when execute IDLE instruction
 bit 11-9      111:    PLL x0.5 mode
 bit 8         0:      reserved
 bit 7         1:      1 = enable ADC module clock
 bit 6         1:      1 = enable SCI module clock
 bit 5         1:      1 = enable SPI module clock
 bit 4         1:      1 = enable CAN module clock
 bit 3         1:      1 = enable EVB module clock
 bit 2         1:      1 = enable EVA module clock
 bit 1         0:      reserved
 bit 0         1:      clear the ILLADR bit
*/    
 
      *SCSR2 = (*SCSR2 | 0x000B) & 0x000F;
    
/*
 bit 15-7      0's:    reserved
 bit 6         0:      Input Qualifier Clocks=5 clock
 bit 5         0:      D'ont write this bit.allows  user to disable WD through the WDDIS bit in the WDCR.
 bit 4         0:      XMIF_HI-Z, 0=normal mode, 1=Hi-Z'd
 bit 3         1:      disable the boot ROM, enable the FLASH
 bit 2         no change   MP/MC* bit reflects state of MP/MC* pin
 bit 1-0      11:      11 = SARAM mapped to prog and data
*/
    
/*** Disable the watchdog timer ***/
          
    * WDCR=0x00EF;             //禁止看门狗
/*
 bits 15-8     0's:     reserved
 bit 7         1:       clear WD flag
 bit 6         1:       disable the dog
 bit 5-3       101:     must be written as 101
 bit 2-0       111:     WDCLK divider = 64  WDCLK= CLKOUT/512
*/
	
/*** Setup external memory interface for LF2407  ***/
    WSGR = 0x01FF; 
/*
 bit 15-11     0's:    reserved
 bit 10-9      00:     bus visibility off
 bit 8-6       111:    7 wait-state for I/O space
 bit 5-3       111:    7 wait-state for data space
 bit 2-0       111:    7 wait state for program space
*/	

/*** Setup shared I/O pins ***/
    *MCRA = 0x0000;  /* group A pins */
/*
 bit 15        0:      0=IOPB7,     1=TCLKINA
 bit 14        0:      0=IOPB6,     1=TDIRA
 bit 13        0:      0=IOPB5,     1=T2PWM/T2CMP
 bit 12        0:      0=IOPB4,     1=T1PWM/T1CMP
 bit 11        0:      0=IOPB3,     1=PWM6
 bit 10        0:      0=IOPB2,     1=PWM5
 bit 9         0:      0=IOPB1,     1=PWM4
 bit 8         0:      0=IOPB0,     1=PWM3
 bit 7         0:      0=IOPA7,     1=PWM2
 bit 6         0:      0=IOPA6,     1=PWM1
 bit 5         0:      0=IOPA5,     1=CAP3
 bit 4         0:      0=IOPA4,     1=CAP2/QEP2
 bit 3         0:      0=IOPA3,     1=CAP1/QEP1
 bit 2         0:      0=IOPA2,     1=XINT1
 bit 1         0:      0=IOPA1,     1=SCIRXD
 bit 0         0:      0=IOPA0,     1=SCITXD
*/

    *MCRB = 0xFE03;    /* group B pins */
/*
 bit 15        1:      0=reserved,  1=TMS2 (always write as 1)
 bit 14        1:      0=reserved,  1=TMS  (always write as 1)
 bit 13        1:      0=reserved,  1=TD0  (always write as 1)
 bit 12        1:      0=reserved,  1=TDI  (always write as 1)
 bit 11        1:      0=reserved,  1=TCK  (always write as 1)
 bit 10        1:      0=reserved,  1=EMU1 (always write as 1)
 bit 9         1:      0=reserved,  1=EMU0 (always write as 1)
 bit 8         0:      0=IOPD0,     1=XINT2/ADCSOC
 bit 7         0:      0=IOPC7,     1=CANRX
 bit 6         0:      0=IOPC6,     1=CANTX
 bit 5         0:      0=IOPC5,     1=SPISTE
 bit 4         0:      0=IOPC4,     1=SPICLK
 bit 3         0:      0=IOPC3,     1=SPISOMI
 bit 2         0:      0=IOPC2,     1=SPISIMO
 bit 1         1:      0=IOPC1,     1=BIO*
 bit 0         1:      0=IOPC0,     1=W/R*
*/

    *MCRC = 0x0001;    /* group C pins */
/*
 bit 15        0:      reserved
 bit 14        0:      0=IOPF6,     1=IOPF6
 bit 13        0:      0=IOPF5,     1=TCLKINB
 bit 12        0:      0=IOPF4,     1=TDIRB
 bit 11        0:      0=IOPF3,     1=T4PWM/T4CMP
 bit 10        0:      0=IOPF2,     1=T3PWM/T3CMP
 bit 9         0:      0=IOPF1,     1=CAP6
 bit 8         0:      0=IOPF0,     1=CAP5/QEP4
 bit 7         0:      0=IOPE7,     1=CAP4/QEP3
 bit 6         0:      0=IOPE6,     1=PWM12
 bit 5         0:      0=IOPE5,     1=PWM11
 bit 4         0:      0=IOPE4,     1=PWM10
 bit 3         0:      0=IOPE3,     1=PWM9
 bit 2         0:      0=IOPE2,     1=PWM8
 bit 1         0:      0=IOPE1,     1=PWM7
 bit 0         1:      0=IOPE0,     1=CLKOUT    
*/

/*** Configure IOPA pin as an INPUT ***/
    *PADATDIR = *PADATDIR & 0x00FF;
 
/*** Configure IOPB pin as an INPUT ***/
    *PBDATDIR = *PBDATDIR & 0x00FF;
    
/*** Configure IOPC pin as an INPUT ***/
    *PCDATDIR = *PCDATDIR & 0x00FF;
    
/*** Configure IOPD pin as an INPUT ***/
    *PDDATDIR = *PDDATDIR & 0xFEFF; 

/*** Configure IOPE pin as an INPUT ***/
    *PEDATDIR = *PEDATDIR & 0x00FF; 
    
/*** Configure IOPF pin as an INPUT ***/
    *PFDATDIR = *PFDATDIR & 0x7FFF;           
    

/*** Setup timers 1 and 2, and the PWM configuration ***/
    *T1CON = 0x0000;                    /* disable timer 1 */
    *T2CON = 0x0000;                    /* disable timer 2 */

⌨️ 快捷键说明

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