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

📄 lcd4.11.txt

📁 这里面是st7529应用实例
💻 TXT
📖 第 1 页 / 共 2 页
字号:


//***********************************************************************************
//    列53(列结尾)     <-------   列0(列开始)
//   |-----------------------------| 行0(行开始)
//   |-----------------------------|  |
//   |-----------------------------|  |
//             .........              |
//             .........              \/
//   |-----------------------------|
//   |-----------------------------|
//   |-----------------------------|
//   |-----------------------------| 行159(行结束)
//当前选择的模式是行不变,列变成由3小列组成一大列。
//文字显示从列0行0开始。
//***********************************************************************************

#include "project.h"
#include "SMC2.c"
        
// EBI_CS0
#define AT91C_EBI_CS0	 ((char *) 	0x10000000) // EBI Chip Select 0 base address
#define AT91C_EBI_CS0_SIZE ((unsigned int) 0x10000000) // EBI Chip Select 0 size in byte (262144 Kbytes)
#define AT91C_EBI_CS1	 ((char *) 	0x20000000) // EBI Chip Select 1 base address
#define AT91C_BASE_SMC       ((AT91PS_SMC2) 	0xFFFFFF90) // (SMC) Base Address
#define AT91C_SMC_BASE_Cmd 	((volatile unsigned char *)0x10000000)
#define AT91C_SMC_BASE_Data 	((volatile unsigned char *)0x10000001)

#define     WAIT_TIME       AT91B_MCK

void init_io(void)
{
    AT91S_SMC2 *pSMC = AT91C_BASE_SMC;
    //---------------------------------------------
    // 禁止下列PIOA I/O功能
    /***************************************
    *AT91C_PIOA_PDR = AT91C_PA0_A0_NBS0 |
                      AT91C_PA1_A1_NBS2 |
                      AT91C_PA2_A2 |
                      AT91C_PA3_A3 |
                      AT91C_PA4_A4 |
                      AT91C_PA5_A5 |
                      AT91C_PA6_A6 |
                      AT91C_PA7_A7 |
                      AT91C_PA8_A8 |
                      AT91C_PA9_A9 |
                      AT91C_PA10_A10 |
                      AT91C_PA11_A11 |
                      AT91C_PA12_A12 |
                      AT91C_PA13_A13 |
                      AT91C_PA14_A14 |
                      AT91C_PA15_A15 |
                      AT91C_PA22_NCS5_CFCE1;
        // PIOA选择B外设功能
    // PIOA0~PIOA15为外部总线地址线
    *AT91C_PIOA_BSR = AT91C_PA0_A0_NBS0 |
                      AT91C_PA1_A1_NBS2 |
                      AT91C_PA2_A2 |
                      AT91C_PA3_A3 |
                      AT91C_PA4_A4 |
                      AT91C_PA5_A5 |
                      AT91C_PA6_A6 |
                      AT91C_PA7_A7 |
                      AT91C_PA8_A8 |
                      AT91C_PA9_A9 |
                      AT91C_PA10_A10 |
                      AT91C_PA11_A11 |
                      AT91C_PA12_A12 |
                      AT91C_PA13_A13 |
                      AT91C_PA14_A14 |
                      AT91C_PA15_A15 |
                      AT91C_PA22_NCS5_CFCE1;
    ********************************************************/
    // 禁止下列PIOB I/O功能
    *AT91C_PIOB_PDR = AT91C_PB0_A0_NBS0;    // PIOB选择A外设功能
    *AT91C_PIOB_BSR = AT91C_PB0_A0_NBS0;
    // 禁止下列PIOC I/O功能
    *AT91C_PIOC_PDR = AT91C_PC0_D0 |
                      AT91C_PC1_D1 |
                      AT91C_PC2_D2 |
                      AT91C_PC3_D3 |
                      AT91C_PC4_D4 |
                      AT91C_PC5_D5 |
                      AT91C_PC6_D6 |
                      AT91C_PC7_D7 |
                      AT91C_PC8_D8 |
                      AT91C_PC9_D9 |
                      AT91C_PC10_D10 |
                      AT91C_PC11_D11 |
                      AT91C_PC12_D12 |
                      AT91C_PC13_D13 |
                      AT91C_PC14_D14 |
                      AT91C_PC15_D15 |
                     // AT91C_PC16_NWAIT |
                      AT91C_PC21_NWR0_NWE_CFWE |
                      AT91C_PC22_NRD_CFOE |
                      AT91C_PC23_NCS0;
// PIOC选择A外设功能
    // PIOC0~PIOC15为外部总线数据线
    *AT91C_PIOC_ASR = AT91C_PC0_D0 |
                      AT91C_PC1_D1 |
                      AT91C_PC2_D2 |
                      AT91C_PC3_D3 |
                      AT91C_PC4_D4 |
                      AT91C_PC5_D5 |
                      AT91C_PC6_D6 |
                      AT91C_PC7_D7 |
                      AT91C_PC8_D8 |
                      AT91C_PC9_D9 |
                      AT91C_PC10_D10 |
                      AT91C_PC11_D11 |
                      AT91C_PC12_D12 |
                      AT91C_PC13_D13 |
                      AT91C_PC14_D14 |
                      AT91C_PC15_D15;
   // PIOC选择B外设功能
    // PIOC21,PIOC22分别是外部总线写,读信号
    *AT91C_PIOC_BSR = AT91C_PC21_NWR0_NWE_CFWE |
                      //AT91C_PC16_NWAIT |
                      AT91C_PC22_NRD_CFOE |
                      AT91C_PC23_NCS0;
    pSMC->SMC2_CSR[0] = AT91C_SMC2_BAT;
                      
}

void AT91F_EBI_SMC_CfgPIO(void)
{
  
        // Configure PIO controllers to periph mode
	// AT91F_PIO_CfgPeriph(
		//AT91C_BASE_PIOA,     // PIO controller base address
		//0,                   // Peripheral A
		//((unsigned int) AT91C_PA19_NCS4_CFCS0) 
		//);                   // Peripheral B          
        
        // Configure PIO controllers to periph mode
	AT91F_PIO_CfgPeriph(
		AT91C_BASE_PIOB,     // PIO controller base address
		0,                   // Peripheral A
		((unsigned int) AT91C_PB0_A0_NBS0  ) |
		((unsigned int) AT91C_PB2_A2       ) |
		((unsigned int) AT91C_PB3_A3       ) |
		((unsigned int) AT91C_PB4_A4       ) |
		((unsigned int) AT91C_PB5_A5       ) |
		((unsigned int) AT91C_PB6_A6       ) |
		((unsigned int) AT91C_PB7_A7       ) |
		((unsigned int) AT91C_PB8_A8       ) |
		((unsigned int) AT91C_PB9_A9       ) |
                ((unsigned int) AT91C_PB10_A10     ) |
                ((unsigned int) AT91C_PB11_A11     ) |
                ((unsigned int) AT91C_PB12_A12     ) |
                ((unsigned int) AT91C_PB13_A13     ) |
                ((unsigned int) AT91C_PB14_A14     ) |
		((unsigned int) AT91C_PB15_A15     ) |
                ((unsigned int) AT91C_PB16_A16_BA0 ) |
		((unsigned int) AT91C_PB17_A17_BA1 )
		);                   // Peripheral B
        
        // Configure PIO controllers to periph mode
	AT91F_PIO_CfgPeriph(
		AT91C_BASE_PIOC,     // PIO controller base address

		((unsigned int) AT91C_PC10_D10 ) |
		((unsigned int) AT91C_PC11_D11 ) |
		((unsigned int) AT91C_PC12_D12 ) |
		((unsigned int) AT91C_PC13_D13 ) |
		((unsigned int) AT91C_PC14_D14 ) |
		((unsigned int) AT91C_PC15_D15 ) |
		((unsigned int) AT91C_PC0_D0   ) |
		((unsigned int) AT91C_PC1_D1   ) |
		((unsigned int) AT91C_PC2_D2   ) |
		((unsigned int) AT91C_PC3_D3   ) |
		((unsigned int) AT91C_PC4_D4   ) |
		((unsigned int) AT91C_PC5_D5   ) |
		((unsigned int) AT91C_PC6_D6   ) |
		((unsigned int) AT91C_PC7_D7   ) |
		((unsigned int) AT91C_PC8_D8   ) |
		((unsigned int) AT91C_PC9_D9   ) 
                ,                  // Peripheral A
                ((unsigned int) AT91C_PC21_NWR0_NWE_CFWE   ) |
                ((unsigned int) AT91C_PC22_NRD_CFOE )|
                ((unsigned int) AT91C_PC23_NCS0 )  
                  
		);                  // Peripheral B
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_InitSMC   SMC初始化函数
//* \brief Init EBI and SMC controler for MT48LC16M16A2
//*----------------------------------------------------------------------------
void AT91F_InitSMC(void)
{
    volatile unsigned int i;
    AT91PS_SMC2	psmc = AT91C_BASE_SMC;
   // AT91S_SMC2 psmc = AT91C_BASE_SMC;
    // Init the EBI for SMC
    AT91C_BASE_EBI -> EBI_CSA =  AT91C_EBI_CS1A_SMC;
    init_io();
    AT91F_EBI_SMC_CfgPIO();  
        
     psmc -> SMC2_CSR[0] =  AT91C_SMC2_NWS          |   // (SMC2) Number of Wait States设定等待数目
                            AT91C_SMC2_WSEN         |   //(SMC2) Wait State Enable 等待状态使能
                            AT91C_SMC2_TDF          |   // (SMC2) Data Float Time
                            AT91C_SMC2_BAT          |   // (SMC2) Byte Access Type
                            AT91C_SMC2_DBW_16       |   // (SMC2) 16-bit.  设定数据总线宽度
                            AT91C_SMC2_DRP          |   // (SMC2) Data Read Protocol 设定读信号的协议形式=标准
                            //AT91C_SMC2_ACSS         |   // (SMC2) Address to Chip Select Setup  片选启动地址
                            //AT91C_SMC2_ACSS_STANDARD|   // (SMC2) Standard, asserted at the beginning of the access and deasserted at the end.
                            AT91C_SMC2_ACSS_1_CYCLE |   // 可改周期(SMC2) One cycle less at the beginning and the end of the access.
                            AT91C_SMC2_RWSETUP      |   // (SMC2) Read and Write Signal Setup Time读写信号的启动时间
                            AT91C_SMC2_RWHOLD       ;   // (SMC2) Read and Write Signal Hold Time读写信号的继续保持时间
      //设置控制寄存器NCS0(连接上外设RAm)
}

#define AT91D_BASE_PIO_RST  (AT91C_BASE_PIOA)
#define AT91B_RST      (1<<8)   // PA8          PA0/PWM0/A0/ NBS0
#define AT91C_PIO_PA8        ((unsigned int) 1 <<  8) // Pin Controlled by PA8

//****************************************************************************************************
void Delay(void);
void LCD_Reset(void );
void LCD_DataWrite(unsigned char);
void LCD_INITIAL(void);
void LCD_CmdWrite(unsigned char);
void WretPointTest(unsigned char);
char DisPlay(unsigned char ucStartX,unsigned char ucStartY,const unsigned char ucDisTable[],unsigned char ucFontWide,unsigned char ucFontHeight);
void SetAddress(unsigned char,unsigned char);
unsigned char LCD_DataRead(void);
//****************************************************************************************************
////////////////延时程序/////////////////////
void Delay ( void )
{
//* Set in Volatile for Optimisation
    int  i ;
//* loop delay
    for ( i = 0 ;i < 50000000 ;i++ ) ;
}

////////////////////////延时程序///////////////////////////////////////////
void delay_1us(void)                  //1us延时函数 
   { 
    asm("nop"); 
   }

void delay_nus(unsigned int n)        //N us延时函数 
   { 
    unsigned int i=0; 
    for (i=0;i<n;i++) 
    delay_1us(); 
   } 

void delay_1ms(void)                  //1ms延时函数 
   { 
    unsigned int i; 
    for (i=0;i<1356;i++); 
   } 

/* 延时n个单位时间 */
void delay_nms(unsigned int n)        //N ms延时函数 
   { 
    unsigned int i=0; 
    for (i=0;i<n;i++) 
    delay_1ms(); 
   }

void delay(unsigned int n)        //N ms延时函数 
   { 
    unsigned int i=0; 
    for (i=0;i<n;i++) 
    asm("nop"); 
   }
 

/****************************************************
void init_devices(void)

⌨️ 快捷键说明

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