📄 main.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 + -