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

📄 main.c

📁 C8051F020单片机AD转换程序
💻 C
字号:

/************************************************************************************
*  Copyright (c) 2004,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* 文件名称: Main.C
* 文件标识: none
* 适用器件: C8051F020
* 
* 摘 要: 本文件是AD测试实验;使用外部22.1184MHz晶振.
* 		  功能:开机显示"铭朗科技,WWW.MLARM.COM"信息,为待机界面。
*		  数秒后在LCD上显示ADC1通道0和1电压及温度值,
*
* 当前版本:1.1
* 作 者:刘大伟
* 完成日期:2007年2月10日
*
*************************************************************************************/

/*******************************引用外部头文件***************************************/
#include "main.h"

/************************************************************************************/
#if		LCDA|LCDB
/*************************************************************************************
* 函数名称:Datashift;
*
* 函数功能描述:不同LCD显示Flash字库的数据顺序调整;
*              
* 输入参数:unsigned char类型i 取数据的相应位,unsigned char指针类型;
*
* 返回数据:unsigned char类型 返回的显示数据; 
*
* 注意:    none;
*************************************************************************************/
unsigned char Datashift (unsigned char i,unsigned char *p)
{
	unsigned char Datatemp[8];
	switch(i)
	{
		case 0x80:
			Datatemp[0]=((*p++)&i);
			Datatemp[1]=((*p++)&i)>>1;
			Datatemp[2]=((*p++)&i)>>2;
			Datatemp[3]=((*p++)&i)>>3;
			Datatemp[4]=((*p++)&i)>>4;
			Datatemp[5]=((*p++)&i)>>5;
			Datatemp[6]=((*p++)&i)>>6;
			Datatemp[7]=((*p++)&i)>>7;
			break;
		case 0x40:
			Datatemp[0]=((*p++)&i)<<1;
			Datatemp[1]=((*p++)&i);
			Datatemp[2]=((*p++)&i)>>1;
			Datatemp[3]=((*p++)&i)>>2;
			Datatemp[4]=((*p++)&i)>>3;
			Datatemp[5]=((*p++)&i)>>4;
			Datatemp[6]=((*p++)&i)>>5;
			Datatemp[7]=((*p++)&i)>>6;
			break;
		case 0x20:
			Datatemp[0]=((*p++)&i)<<2;
			Datatemp[1]=((*p++)&i)<<1;
			Datatemp[2]=((*p++)&i);
			Datatemp[3]=((*p++)&i)>>1;
			Datatemp[4]=((*p++)&i)>>2;
			Datatemp[5]=((*p++)&i)>>3;
			Datatemp[6]=((*p++)&i)>>4;
			Datatemp[7]=((*p++)&i)>>5;
			break;
		case 0x10:
			Datatemp[0]=((*p++)&i)<<3;
			Datatemp[1]=((*p++)&i)<<2;
			Datatemp[2]=((*p++)&i)<<1;
			Datatemp[3]=((*p++)&i);
			Datatemp[4]=((*p++)&i)>>1;
			Datatemp[5]=((*p++)&i)>>2;
			Datatemp[6]=((*p++)&i)>>3;
			Datatemp[7]=((*p++)&i)>>4;
			break;
		case 0x08:
			Datatemp[0]=((*p++)&i)<<4;
			Datatemp[1]=((*p++)&i)<<3;
			Datatemp[2]=((*p++)&i)<<2;
			Datatemp[3]=((*p++)&i)<<1;
			Datatemp[4]=((*p++)&i);
			Datatemp[5]=((*p++)&i)>>1;
			Datatemp[6]=((*p++)&i)>>2;
			Datatemp[7]=((*p++)&i)>>3;
			break;
		case 0x04:
			Datatemp[0]=((*p++)&i)<<5;
			Datatemp[1]=((*p++)&i)<<4;
			Datatemp[2]=((*p++)&i)<<3;
			Datatemp[3]=((*p++)&i)<<2;
			Datatemp[4]=((*p++)&i)<<1;
			Datatemp[5]=((*p++)&i);
			Datatemp[6]=((*p++)&i)>>1;
			Datatemp[7]=((*p++)&i)>>2;
			break;
		case 0x02:
			Datatemp[0]=((*p++)&i)<<6;
			Datatemp[1]=((*p++)&i)<<5;
			Datatemp[2]=((*p++)&i)<<4;
			Datatemp[3]=((*p++)&i)<<3;
			Datatemp[4]=((*p++)&i)<<2;
			Datatemp[5]=((*p++)&i)<<1;
			Datatemp[6]=((*p++)&i);
			Datatemp[7]=((*p++)&i)>>1;
			break;
		case 0x01:
			Datatemp[0]=((*p++)&i)<<7;
			Datatemp[1]=((*p++)&i)<<6;
			Datatemp[2]=((*p++)&i)<<5;
			Datatemp[3]=((*p++)&i)<<4;
			Datatemp[4]=((*p++)&i)<<3;
			Datatemp[5]=((*p++)&i)<<2;
			Datatemp[6]=((*p++)&i)<<1;
			Datatemp[7]=((*p++)&i);
			break;
		default:
			break;
	}
	return 	Datatemp[0]|
			Datatemp[1]|
			Datatemp[2]|
			Datatemp[3]|
			Datatemp[4]|
			Datatemp[5]|
			Datatemp[6]|
			Datatemp[7];
}
#endif

/*************************************************************************************
* 函数名称:Disp_Flash_Word;
*
* 函数功能描述:LCD单字显示Flash字库;
*              
* 输入参数:unsigned char类型page页,unsigned char类型local位置,BYTE类型坐标x,y;
*
* 返回数据:none;
*
* 注意:    none;
*************************************************************************************/
void Disp_Flash_Word (unsigned char page,local,x,y)
{
	unsigned long addrtemp;
	unsigned char xdata diptemp[32];

#if  	LCDA|LCDB
	unsigned char xdata contemp[32];
	unsigned char i,j,k;
#endif

	page--;
	local--;
	addrtemp = (unsigned long)(page*94+local)*32;
	Flash_DataRD (addrtemp, diptemp, 32);

#if		LCDA
	for(k=0;k<2;k++)
	{
		j=0;
		for(i=0x80;i!=0;i>>=1)
		{
			contemp[31-16*(1-k)-2*j]   = Datashift(i,&diptemp[16*k+8]);
			contemp[31-16*(1-k)-2*j-1] = Datashift(i,&diptemp[16*k+0]);
			j++;
		}
	}
	LCDA_ShowHZxy(y, x, 16, 16, contemp);
#elif	LCDB
	for(k=0;k<2;k++)
	{
		j=0;
		for(i=0x80;i!=0;i>>=1)
		{
			contemp[31-16*(1-k)-2*j]   = Datashift(i,&diptemp[16*k+8]);
			contemp[31-16*(1-k)-2*j-1] = Datashift(i,&diptemp[16*k+0]);
			j++;
		}
	}
	LCDB_ShowHZxy(y, x, 16, 16, contemp);
#elif	LCDC
	LCDC_DispFWord(x, y, diptemp, 2, 16, 1);
#endif

}

/*************************************************************************************
* 函数名称

⌨️ 快捷键说明

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