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

📄 system.c

📁 这里有很多我自己做的凌阳单片机源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<spce061a_chf.h>
#include"host.h"
extern const unsigned char Asii0610[];			//6X10的ASII字符库
extern const unsigned char Asii0816[];			//8X16的ASII字符库
extern const unsigned char GB32[];				//32*32自定义的汉字库
int X_Witch;									//字符写入时的宽度
int Y_Witch;									//字符写入时的高度
int Font_Wrod;									//字体的每个字模占用多少个存储单元数
unsigned char *Char_TAB;						//字库指针
int Plot_Mode;									//绘图模式
unsigned int BMP_Color;
unsigned int Char_Color;
unsigned int CurPowerMode=1;				//Show the Power Mode of LCD501
unsigned int CurLCDSet=8;					//Show the LCD Set灰度
unsigned int CurScroll=0;					//Show the scroll dotes
unsigned int CurScrMode=1;				//显示正相/反相(1/0)
///////////////////////////////////////////
//函数:void write_flash(unsigned int d)
//描述:写flash函数
//参数:d--要写的数据
//返回:无
/////////////////////////////////////////////
void write_flash(unsigned int d,unsigned int *addr1)
{
	*P_Flash_Ctrl=0xaaaa;
	*P_Flash_Ctrl=0x5533;
	*addr1=d;
}
///////////////////////////////////////////
//函数:void page_erase(void)
//描述:檫除flash的函数
//参数:无
//返回:无
/////////////////////////////////////////////
void page_erase(unsigned int *addr2)
{
	*P_Flash_Ctrl=0xaaaa;
	*P_Flash_Ctrl=0x5511;
	*addr2=0x0000;//向相应的页地址写如任意值;
}
///////////////////////////////////////////
//函数:unsigned int read_flash(void)
//描述:读取相应地址的数据
//参数:无
//返回:返回读到的数据
/////////////////////////////////////////////
unsigned int read_flash(unsigned int *addr3)
{
	unsigned int value;
	value=*addr3;
	return (value);
}
//========================================================================
// 函数: void F_LCD_ON_OFF(unsigned int SetCom)
// 描述: 液晶开关函数  C语言调用 
// 参数: SetCom		SetCom=0:LCD Off  SetCom!=0:LCD On
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void F_LCD_ONOFF(unsigned int SetCom)
{
	if(SetCom)							//ON LCD
		SPLC501_RegWrite(M_LCD_ON);
	else								//OFF LCD
		SPLC501_RegWrite(M_LCD_OFF);
}
//========================================================================
// 函数: void LCD501_Power(unsigned int ModeCode)
// 描述: SPLC501电源管理,进入参数指定的模式,而当LCD在SLEEP和STDBY模式下时,
//			调用该函数会使LCD唤醒 
// 参数: ModeCode - 可以是下列参数之一:
//				1	PWR_ON: 	正常工作模式
//				2	PWR_SLEEP:	睡眠模式,屏幕不显示,但内容在唤醒后仍保留
//				3	PWR_STDBY: 待机模式,比SLEEP省电,但显示内容会丢失
//				0	PWR_OFF:	关闭电源
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_Power(unsigned int ModeCode)
{
	if(CurPowerMode == 2)
	{
		SPLC501_RegWrite(M_LCD_ALL_LOW);
		SPLC501_RegWrite(M_LCD_STATIC_ON);
		SPLC501_RegWrite(0x0003);
		CurPowerMode = 1;
		*P_Watchdog_Clear=0x01;
	}
	else if(CurPowerMode == 3)
	{
		SPLC501_RegWrite(M_LCD_ON);
		SPLC501_RegWrite(M_LCD_ALL_LOW);
		CurPowerMode = 1;
		*P_Watchdog_Clear=0x01;
	}
	else{
		switch(ModeCode)
		{
			case 1:
				SPLC501_RegWrite(M_LCD_ON);
				break;
			case 2:
				SPLC501_RegWrite(M_LCD_STATIC_OFF);
				SPLC501_RegWrite(0x0000);
				SPLC501_RegWrite(M_LCD_OFF);
				SPLC501_RegWrite(M_LCD_ALL_LIGNT);
				*P_Watchdog_Clear=0x01;
				break;
			case 3:
				SPLC501_RegWrite(M_LCD_STATIC_ON);
				SPLC501_RegWrite(0x0003);
				SPLC501_RegWrite(M_LCD_OFF);
				SPLC501_RegWrite(M_LCD_ALL_LIGNT);
				*P_Watchdog_Clear=0x01;
				break;
			default://POW_OFF
				SPLC501_RegWrite(M_LCD_OFF);
				break;
		}//
		CurPowerMode = ModeCode;
		*P_Watchdog_Clear=0x01;
	}
}
//========================================================================
// 函数: void LCD501_SetContrast(unsigned int Contrast)
// 描述: 设置显示对比度   C语言调用
// 参数: Contrast - 对比度值,范围从0到31,数值越大对比度越高
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_SetContrast(unsigned int Contrast)
{
	if(Contrast>0x003f)
		Contrast = 0x003f;
	SPLC501_RegWrite(M_LCD_ELE_VOL);			//电量设置模式(显示亮度)
	SPLC501_RegWrite(Contrast);			//电量设置模式(显示亮度)
	CurLCDSet = Contrast;
	*P_Watchdog_Clear=0x01;
}
//========================================================================
// 函数: unsigned int LCD501_GetContrast(void)
// 描述: 获取显示对比度   C语言调用
// 参数: null
// 返回: 当前显示的对比度值
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
unsigned int LCD501_GetContrast(void)
{
	return CurLCDSet;//
}
//========================================================================
// 函数: void LCD501_ScrollUp(unsigned int Rows)
// 描述: 屏幕向上滚动   C语言调用
// 参数: Rows  屏幕向上滚动的像素数,范围从1到64
// 返回: null
// 备注: 该函数从原来的SPLC501的V20版本当中直接移植过来的
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_ScrollUp(unsigned int Rows)
{
	CurScroll = CurScroll+Rows;
	while(CurScroll>=Dis_Y_MAX)
		CurScroll -= Dis_Y_MAX;
	SPLC501_RegWrite(M_LCD_BEGIN_LINE+CurScroll);	//设置显示起始行对应RAM
	*P_Watchdog_Clear=0x01;
}
//========================================================================
// 函数: unsigned int LCD501_GetScroll(void)
// 描述: 获取屏幕已经向上滚动的值   C语言调用
// 参数: null
// 返回: 屏幕已经向上滚动的值
// 备注: 该函数从原来的SPLC501的V20版本当中直接移植过来的
// 版本:
//      2006/10/15      First version
//========================================================================
unsigned int LCD501_GetScroll(void)
{
	return CurScroll;//
}
//========================================================================
// 函数: void LCD501_ReverseColor(void)
// 描述: 屏幕反色显示。每执行一次该函数,屏幕颜色翻转一次
// 参数: null
// 返回: null
// 备注: 该函数从原来的SPLC501的V20版本当中直接移植过来的
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_ReverseColor(void)
{
	if(CurScrMode)//
	{
		SPLC501_RegWrite(M_LCD_ALL_REV);			//正向反向显示控制指令
		CurScrMode = 0;
		*P_Watchdog_Clear=0x01;
	}
	else
	{
		SPLC501_RegWrite(M_LCD_ALL_NOR);			//正向反向显示控制指令
		CurScrMode = 1;
		*P_Watchdog_Clear=0x01;
	}
}
//========================================================================
// 函数: void LCD501_Bitmap(int x,int y,unsigned int *p)
// 描述: 写入一个BMP图片,起点为(x,y)
// 参数: x、y为画入位图的起始坐标点,*p为位图字模数据的首地址  
// 返回: 无
// 备注: 该函数所对应的位图字模为16位为单位的字模数据,取模顺序为:从左到右
//			自上到下,每行的点数不为16的整数倍时,在前面补上0
//			建议使用凌阳提供的DM Tool取字模,因为该函数正是为适应其所取的字
//			模规格而设计的。
// 版本:
//      2007/01/12      First version
//========================================================================
void LCD501_Bitmap(int x,int y,unsigned int *p)
{
	int Temp_With,Temp_High,i,j;	//数据暂存
	unsigned int Temp;
	unsigned int Index=1;
	Temp_With = *p&0x00ff;
	Temp_High = *(p ++)>>8;			//图片宽度
	Temp = Temp_With&0x0f;
	switch(Temp)
	{
		case 0: Index = 0x8000; break;
		case 1: Index = 0x0001; break;
		case 2: Index = 0x0002; break;
		case 3: Index = 0x0004; break;
		case 4: Index = 0x0008; break;
		case 5: Index = 0x0010; break;
		case 6: Index = 0x0020; break;
		case 7: Index = 0x0040; break;
		case 8: Index = 0x0080; break;
		case 9: Index = 0x0100; break;
		case 10: Index = 0x0200; break;
		case 11: Index = 0x0400; break;
		case 12: Index = 0x0800; break;
		case 13: Index = 0x1000; break;
		case 14: Index = 0x2000; break;
		case 15: Index = 0x4000; break;
	}
	j = 0;
	while((j ++) < Temp_High)
	{
		if(y > Dis_Y_MAX) break;
		i = 0;
		Temp = Index;
		while(i < Temp_With)
		{		
			if((x+i) > Dis_X_MAX) break;
			if(Temp&(*p)) Write_Dot_LCD(x+i,y,BMP_Color);
			Temp = Temp >> 1;
			if(Temp==0)	
			{
				p++;
				Temp = 0x8000;
				*P_Watchdog_Clear=0x01;
			}
			i++;
			*P_Watchdog_Clear=0x01;
		}
		y ++;
		*P_Watchdog_Clear=0x01;
	}	
}
void LCD_InIt(void)
{
	//LCD驱动所使用到的端口的初始化
	SPLC501_PortInit();
	*P_Watchdog_Clear=0x01;	
	SPLC501_RegWrite(M_LCD_ON);							//LCD On
	SPLC501_RegWrite(M_LCD_POWER_ALL);					//设置上电控制模式
	*P_Watchdog_Clear=0x01;
	SPLC501_RegWrite(M_LCD_ELE_VOL);					//电量设置模式(显示亮度)
	SPLC501_RegWrite(0x12);								//指令数据0x0000~0x003f
	*P_Watchdog_Clear=0x01;
	SPLC501_RegWrite(M_LCD_VDD_SET);					//V5内部电压调节电阻设置
	SPLC501_RegWrite(M_LCD_VDD);						//LCD偏压设置,V3时选
	*P_Watchdog_Clear=0x01;
	SPLC501_RegWrite(M_LCD_COM_NOR);					//Com 扫描方式设置
	SPLC501_RegWrite(M_LCD_SEG_REV);					//Segment方向选择
	SPLC501_RegWrite(M_LCD_ALL_LOW);					//全屏点亮/变暗指令
	SPLC501_RegWrite(M_LCD_ALL_NOR);					//正向反向显示控制指令
	*P_Watchdog_Clear=0x01;
	SPLC501_RegWrite(M_LCD_STATIC_OFF);					//关闭静态指示器
	SPLC501_RegWrite(0x00);								//指令数据
	*P_Watchdog_Clear=0x01;
//	F_SPLC501_Write_Com(0x00ee);						//读写改模式结束指令
	SPLC501_RegWrite(M_LCD_BEGIN_LINE+0);				//设置显示起始行对应RAM
	LCD_Fill(LCD_INITIAL_COLOR);						//?????????????????????????????????????????????????????
}
//========================================================================
// 函数: void FontSet(int Font_NUM,unsigned int Color)
// 描述: 文本字体设置
// 参数: Font_NUM 字体选择,以驱动所带的字库为准
//		 Color  文本颜色,仅作用于自带字库  
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void FontSet(int Font_NUM,unsigned int Color)
{
	switch(Font_NUM)
	{
		case 0: Font_Wrod = 8;	//ASII字符A
				X_Witch = 8;
				Y_Witch = 16;
				Char_Color = Color;
				Char_TAB = (unsigned char *)(Asii0816 - 32*8);
				*P_Watchdog_Clear=0x01;
		break;
		case 1: Font_Wrod = 5;	//ASII字符B
				X_Witch = 6;
				Y_Witch = 10;
				Char_Color = Color;
				Char_TAB = (unsigned char *)(Asii0610 - (32*5));
				*P_Watchdog_Clear=0x01;
		break;
		case 2: Font_Wrod = 64;	//汉字A
				X_Witch = 32;
				Y_Witch = 32;
				Char_Color = Color;
				Char_TAB = (unsigned char *)GB32;
				*P_Watchdog_Clear=0x01;
		break;
/*		case 3: Font_Wrod = 16;	//汉字B
				X_Witch = 16;
				Y_Witch = 2;
				Char_Color = Color;
				Char_TAB = GB16;
		break;*/
		default: break;
	}
//	if(X_Witch&0x07) X_Witch = (X_Witch&0xfff8)+0x0008;			//调整宽度到8的倍数
}
//========================================================================
// 函数: void PutChar(int x,int y,unsigned int a)
// 描述: 写入一个标准字符
// 参数: x  X轴坐标     y  Y轴坐标
//		 a  要显示的字符在字库中的偏移量  
// 返回: 无
// 备注: ASCII字符可直接输入ASCII码即可
// 版本:
//      2006/10/15      First version
//		2007/01/11		V1.1
//========================================================================
void PutChar(int x,int y,unsigned int a)       
{
	int i,j;//,K;		//数据暂存
	unsigned char *p_data;
	unsigned char Temp;
	unsigned int Index = 0;
	p_data = Char_TAB + a*Font_Wrod;	//要写字符的首地址
	j = 0;
	while((j ++) < Y_Witch)
	{
		if(y > Dis_Y_MAX) break;
		i = 0;
		while(i < X_Witch)
		{
			if((i&0x07)==0)

⌨️ 快捷键说明

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