📄 lcd.c
字号:
/*
;***********************************************************************
;* 北京达盛科技有限公司
;* 研 发 部
;*
;* http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ---------------
;*
;* 文件名称 : lcd.C
;* 文件功能 : 该文件为测试lcd的测试程序,CPU=TMS320VC5402LF2407
;* 接口说明: LCD型号LCM12864ZK,青云公司,设置在并行8BIT方式
; LCDRS<=HRESET; --LCD复位用CPU2的复位信号,低有效
;
; LCDE<='1' WHEN HA15='1' AND HA14='0' AND HA3='0' AND HA2='1'
; AND HIS='0' AND XIOSTRB='0' ELSE
;
; '0'; --LCD扩展到IO空间: 8004~8007;
;
; LCDCS<=HA0; --LCD选择寄存器信号,‘0’指令寄存器;‘1’数据寄存器
;
; LCDRW<=HA1; --LCD读写信号,‘0’写;‘1’读
;
; 写数据寄存器: 8005 读数据寄存器:8007
; 写指令寄存器: 8004 读指令寄存器:8006
//------------------头文件--------------------------------------
/*******************************************************************/
#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 port8004; //写指令寄存器
ioport UINT16 port8005; //写数据寄存器
ioport UINT16 port8006; //读指令寄存器
ioport UINT16 port8007; //读数据寄存器
//----------------------------------------------------------
/* 全局变量定义 */
//---------------------------------------------------------
UINT16 data_buff1[10] = {0x00b0,0x00d7,0x00c8,0x00d5,0x00d2,0x00c0,
0x00c9,0x00bd,0x00be,0x00a1};
UINT16 data_buff2[10] = {0x00bb,0x00c6,0x00ba,0x00d3,0x00c8,0x00cb,
0x00ba,0x00a3,0x00c1,0x00f7};
UINT16 data_buff3[10] = {0x00d3,0x00fb,0x00c7,0x00ee,0x00c7,0x00a7,
0x00c0,0x00ef,0x00c4,0x00bf};
UINT16 data_buff4[10] = {0x00b8,0x00fc,0x00c9,0x00cf,0x00d2,0x00bb,
0x00b2,0x00e3,0x00c2,0x00a5};
/*
**********************************************************************
*************** 所使用的函数原型 *****************
**********************************************************************
*/
void cpu_init(void); //初始化CPU
interrupt void PHANTOM(void); //伪中断程序
extern void delay_100us(void); //100us延迟 --指令之间的延迟
void delay_50ms(void); //50ms延迟 --复位延迟
void delay_20ms(void); //20ms延迟 --清屏延迟
void bf_ready(void); //液晶忙标志判断
void wcom(UINT16 com); //写指令寄存器
void wram(UINT16 ram); //写数据寄存器
void rram(void); // 读数据寄存器
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -