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

📄 main.c

📁 通用点阵LCD程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                 Zhejiang University
**                          Institute of Industry Process Control 
**                                   WJW's Studio!
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2007-08-07
** Last Version:		1.0
** Descriptions:		The main() function
**------------------------------------------------------------------------------------------------------
** Modified by:         Jianwei Wang   
** Modified date:       2007-08-17
** Version:             1.0
** Descriptions:        UART1 test
**------------------------------------------------------------------------------------------------------
**/

#include "config.h"

#define LcdColNum  128
#define LcdRowNum  8/*此液晶将8行分为一页,所以就有8页并且只可控制页*/
#define LcdDocMatCol  16 /*点阵列*/
#define LcdDocMatRow  16 /*点阵行*/
#define LcdAscDocMatCol	8
#define LcdAscDocMatRow 8
/*支持8*8 8*16 16*8 16*16 点阵*/

uchar i=0;   //*  循环变量等等

uchar ind=0;//*  LcdWrite循环写的字序列号
uchar asci;//*   LcdWrite循环写的字行号
uchar ascf;//*   LcdWrite循环写的循环变量
uchar xLoop; //行循环变量 *
uchar yLoop; //列地址循环变量

#define  BLCDRS  (1 << 10)	 // P0.12控制LCD使能(下降沿使能),P0.13和P0.14控制LCD左右半屏
#define  BLCDRW  (1 << 11)   // 八位数据,由SPI接口导出
#define  BLCDEN  (1 << 12)   // P0.10控制LCD寄存器(0指令,1数据),P0.11控制LCD读写(0写,1读)
#define  BLCDCS1 (1 << 13)
#define  BLCDCS2 (1 << 14)

#define  KEY1   (1 << 16)   // P0.16~P0.20五个按键,低电平为有键按下,P0.16为Key1
#define  KEY2   (1 << 17)  
#define  KEY3   (1 << 18)  
#define  KEY4   (1 << 19)  
#define  KEY5   (1 << 20)  
#define  KEY    KEY1|KEY2|KEY3|KEY4|KEY5

#define  SPICS  (1 << 29)   // P0.29口为74HC595的片选

uchar AscLib[]={ //字符库 
 0x00,0x00,0x7E,0x81,0x81,0x81,0x7E,0x00,
 0x81,0xFF,0x89,0x34,0xC3,0x81,0x00,0x00,//OK   01  **
 
 0x00,0x81,0xFF,0x89,0x89,0x76,0x00,0x00,//B    2   *
 0x00,0x81,0xFF,0x89,0x9D,0xC3,0x00,0x00,//E    3   *
 
 0x00,0x03,0x1C,0x60,0x80,0x60,0x1C,0x03,//V    4   *
 
 0x00,0x82,0xC6,0xB8,0x3A,0xC6,0x82,0x00, //X    5   *
 0x86,0x49,0x29,0x16,0x68,0x94,0x92,0x61, //%    6   *
 
 0x00,0x81,0xFF,0x89,0x19,0xE6,0x80,0x00,//*R    7  *
 0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,//.小数点 8   *
 
 0x01,0xFF,0x12,0x11,0x0E,0x00,0x01,0xFF,
 0x12,0x11,0x1E,0x00,0x41,0x7F,0x01,0x7F,
 0x01,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, //ppm 9-11 *

 0x00,0x88,0xF8,0x90,0x08,0x08,0x00,0x00,    //* 12   ???????
  
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    //*blank13 
 0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,    //*"0"=10h  14  *
 0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00,    //*"1"=11h  15  *
 0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00,    //*"2"=12h  16  *
 0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00,    //*"3"=13h  17  *
 0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00,    //*"4"=14h  18  *
 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,    //*"5"=15h  19  *
 0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00,    //*"6"=16h  20  *
 0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00,    //*"7"=17h  21  *
 0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,    //*"8"=18h  22  *
 0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00,    //*"9"=19h  23  *
 0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00,    // :  		 24  * 
                                
};
/*
*********************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly	延时参数,值越大,延时越久。i<500,约为50us。
** 出口参数 :无          
*********************************************************************************************************
*/
void DelayNS (uint32 dly)
{
	uint32 i;
	
	for ( ; dly>0; dly--)
		for (i=0; i<500; i++);
}

/////////////////////////////////////////
uchar scankey(void) //扫描键值
{                  
	uint32 c,d;
	d=KEY;
	c=IO0PIN & d;
	if(c==0x1F0000)// 都为高,无键按下
		return 0;
		
		///否则有键按下

	switch(c)
	{
		case 0xF0000:
			return 5; 
		case 0x170000:
			return 4;
		case 0x1B0000:
			return 3;
		case 0x1D0000:   
			return 2;
		case 0x1E0000:   
			return 1;	
		default: 
			return 0;
	}
}

//////////////////////////////////////////
uchar getkey(void)//取健值
{	
	uchar key_num=0;
	if((key_num=scankey())==0)
		return 0;
	DelayNS(400);//20ms
	if((key_num=scankey())==0)
		return 0;
	while(scankey()!=0);//等待健放开
	return key_num;		
}

/*
********************************************************************************************************
** 函数名称:MSPI_Init()
** 函数功能:初始化SPI接口,设置为主机。
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void  MSPI_Init(void)
{  
	PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x55 << 8) ;
    SPCCR = 0x52;		            // 设置SPI时钟分频
 	SPCR  = (0 << 3) |				// CPHA = 0, 数据在SCK 的第一个时钟沿采样
 			(1 << 4) |				// CPOL = 1, SCK 为低有效
 			(1 << 5) |				// MSTR = 1, SPI 处于主模式
 			(0 << 6) |				// LSBF = 0, SPI 数据传输MSB (位7)在先
 			(0 << 7);				// SPIE = 0, SPI 中断被禁止
}

/********************************************************************************************************
** 函数名称:MSPI_SendData()
** 函数功能:向SPI总线发送数据。
** 入口参数:data   待发送的数据
** 出口参数:返回值为读取的数据
********************************************************************************************************/
uint8  MSPI_SendData(uint8 data)
{  
    IOCLR = SPICS;			        // 片选74HC595
   
    SPI_SPDR = data;
    while( 0 == (SPI_SPSR & 0x80));		// 等待SPIF置位,即等待数据发送完毕
   
    IOSET = SPICS;
    return(SPI_SPDR);
}


/**********************************************************************
*************************                ******************************
*************************  Lcd Function  ******************************
*************************                ******************************
**********************************************************************/

/*********************************************************************************************************
** 函数名称  :  LcdWriteCmd
** 功能描述  :  向Lcd写入命令
** 输 入    :  LcdCmd:Lcd命令
** 输 出    :  无
** 全局变量  :  无
** 宏定义    :

⌨️ 快捷键说明

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