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

📄 func.c.bak

📁 NEC单片机0537demo开发板的程序
💻 BAK
字号:
/*********************** (C) COPYRIGHT 2008 GETSOON************************
* File Name					: func.c
* Author						: Tsinming
* Date First Issued	: 08/08/2008
* Description				: function program body
***************************************************************************
* History:
* 09/18/2008: V1.0
* 08/08/2008: V0.1
**************************************************************************/
#include "ke2demo.h"

/* Constant defintion----------------------------------------------------*/
// ledchar8_tab: 0,1,2,3,4,5,6,7,8,9
const u8 ledchar8_tab[10] = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B};
// lcdchar8_tab: 0,1,2,3,4,5,6,7,8,9
const u8 lcdchar8_tab[10] = {0xBE, 0x06, 0x7C, 0x5E, 0xC6, 0xDA, 0xFA, 0x0E, 0xFE, 0xDE};

/* Variable defintion----------------------------------------------------*/
sreg	u8	LedLData, LcdData0, LcdData1, LcdData2, LcdData3, LcdData4, 
					LcdData5, LcdData6, LcdData7, LcdData8, LcdData9, LcdData10, 
					LcdData11, LcdData12;
sreg	u16	ADSign;
u8	LedDisData[8], LcdNum[10], LcdDisData[13], CalYear, CalMonth, CalData, CalWeek, 
		TimeHour, TimeMin, TimeSenc, ConfPara, ConfMenu;
u32	LedNum;
bit	lcd_point1, lcd_point2, lcd_point3, lcd_point4, lcd_data, 
		lcd_time, lcd_temp, lcd_key, lcd_comm, lcd_batt;

/* Functions defintion---------------------------------------------------*/
void eepwrite(void);
void eepread(void);
void ledlight(void);
void lcddisplay(void);
void lcdinit(void);
void lcddriver(void);
void leddisplay(void);
void ledinit(void);
void leddriver(void);
void ledsendbyte(u8 data_byte);
void datanum(void);
void timenum(void);
void datadrive(void);
void timedrive(void);
void tempdrive(void);
void config(void);
void RestrictArea(u8 *Para, u8 Min, u8 Max);

/* EEPROMDRIVE-----------------------------------------------------------*/
void eepwrite(void)
{
	IICData[0] = CalYear;
	IICData[1] = CalMonth;
	IICData[2] = CalData;
	IICData[3] = CalWeek;
	IICData[4] = TimeHour;
	IICData[5] = TimeMin;
	IICData[6] = TimeSenc;
}

void eepread(void)
{
	CalYear  = IICData[0];
	CalMonth = IICData[1];
	CalData  = IICData[2];
	CalWeek  = IICData[3];
	TimeHour = IICData[4];
	TimeMin  = IICData[5];
	TimeSenc = IICData[6];	
}

/* ----------------------------------------------------------------------*/
void config(void)
{
	lcd_point1 = 0;
	lcd_point2 = 0;
	lcd_point3 = 0;
	lcd_point4 = 0;
	LcdNum[1] = 0x0;
	LcdNum[2] = 0x0;
	LcdNum[3] = 0x0;
	LcdNum[4] = 0x0;
	LcdNum[5] = 0x0;
	LcdNum[6] = 0x0;
	LcdNum[7] = 0x0;
	LcdNum[8] = lcdchar8_tab[((ConfPara / 10) % 10)];
	LcdNum[9] = lcdchar8_tab[(ConfPara % 10)];
	switch(ConfMenu)
	{
	case 0:
		LcdNum[0] = 0x72;
		LcdNum[1] = 0x72;
		LcdNum[2] = lcdchar8_tab[1];
		CalYear = ConfPara;
		break;
	case 1:
		LcdNum[0] = 0x72;
		LcdNum[1] = 0x72;
		LcdNum[2] = lcdchar8_tab[2];
		CalMonth = ConfPara;
		break;
	case 2:
		LcdNum[0] = 0x72;
		LcdNum[1] = 0x72;
		LcdNum[2] = lcdchar8_tab[3];
		CalData = ConfPara;
		break;
	case 3:
		LcdNum[0] = 0x72;
		LcdNum[1] = 0x72;
		LcdNum[2] = lcdchar8_tab[4];
		CalWeek = ConfPara;
		break;
	case 4:
		LcdNum[0] = 0x72;
		LcdNum[1] = 0x72;
		LcdNum[2] = lcdchar8_tab[5];
		TimeHour = ConfPara;
		break;
	case 5:
		LcdNum[0] = 0x72;
		LcdNum[1] = 0x72;
		LcdNum[2] = lcdchar8_tab[6];
		TimeMin = ConfPara;
		break;
	case 6:
		LcdNum[0] = 0x72;
		LcdNum[1] = 0x72;
		LcdNum[2] = lcdchar8_tab[7];
		TimeSenc = ConfPara;
		break;
	default:
		break;
	}
}

/* ----------------------------------------------------------------------*/
void datanum(void)
{
	if(CalWeek >= 8)
	{
		CalWeek = 1;
	}
	if(CalYear >= 20)
	{
		CalYear = 0x0;
	}
	if(CalMonth >= 13)
	{
		CalYear++;
		CalMonth = 1;
	}
	if(CalData >= 31)
	{
		CalMonth++;
		CalData = 1;
	}
}

void datadrive(void)
{
	LcdNum[0] = lcdchar8_tab[CalWeek];
	LcdNum[1] = 0x0;
	LcdNum[2] = lcdchar8_tab[2];
	LcdNum[3] = lcdchar8_tab[0];
	LcdNum[4] = lcdchar8_tab[(CalYear / 10) % 10];
	LcdNum[5] = lcdchar8_tab[CalYear % 10];
	LcdNum[6] = lcdchar8_tab[((CalMonth / 10) % 10)];
	LcdNum[7] = lcdchar8_tab[(CalMonth % 10)];
	LcdNum[8] = lcdchar8_tab[((CalData / 10) % 10)];
	LcdNum[9] = lcdchar8_tab[(CalData % 10)];
	lcd_point1 = 0;
	lcd_point2 = 0;
	lcd_point3 = 0;
	lcd_point4 = 0;
	lcd_time = 0;
	lcd_data = 1;
	lcd_temp = 0;
}

/* ----------------------------------------------------------------------*/
void timenum(void)
{
	if(TimeSenc >= 60)
	{
		TimeMin++;
		TimeSenc = 0x0;
	}
	if(TimeMin >= 60)
	{
		TimeHour++;
		TimeMin = 0x0;
	}
	if(TimeHour >= 24)
	{
		CalData++;
		TimeSenc = 0x0;
		TimeMin = 0x0;
		TimeHour = 0x0;
	}
}

void timedrive(void)
{
	LcdNum[0] = lcdchar8_tab[CalWeek];
	LcdNum[1] = 0x0;
	LcdNum[2] = 0x0;
	LcdNum[3] = 0x0;
	LcdNum[4] = lcdchar8_tab[((TimeHour / 10) % 10)];
	LcdNum[5] = lcdchar8_tab[(TimeHour % 10)];
	LcdNum[6] = lcdchar8_tab[((TimeMin / 10) % 10)];
	LcdNum[7] = lcdchar8_tab[(TimeMin % 10)];
	LcdNum[8] = lcdchar8_tab[((TimeSenc / 10) % 10)];
	LcdNum[9] = lcdchar8_tab[(TimeSenc % 10)];
	lcd_point1 = 1;
	lcd_point2 = 1;
	lcd_point3 = 1;
	lcd_point4 = 1;
	lcd_time = 1;
}

/* ----------------------------------------------------------------------*/
void tempdrive(void)
{
	LcdNum[0] = 0x0;
	LcdNum[1] = 0x0;
	LcdNum[2] = 0x0;
	LcdNum[3] = 0x0;
	LcdNum[4] = 0x0;
	LcdNum[5] = 0x0;
	LcdNum[6] = lcdchar8_tab[(LedNum / 10) % 10];
	LcdNum[7] = lcdchar8_tab[LedNum % 10];
	LcdNum[8] = lcdchar8_tab[(TempData.7 * 5)];
	LcdNum[9] = 0x0;
	lcd_point1 = 0;
	lcd_point2 = 0;
	lcd_point3 = 0;
	lcd_point4 = 1;
	lcd_temp = 1;
}

/* ----------------------------------------------------------------------*/
void RestrictArea(u8 *Para, u8 Min, u8 Max)
{
  if(*Para < Min)
    *Para = Max;
  else if(*Para > Max)
    *Para = Min;
}

/* LEDDISPLAY------------------------------------------------------------*/
void leddisplay(void)
{
	LedNum = (TempData >> 8);	//ADValue;
	LedDisData[0] = 0x46;			//T
	LedDisData[1] = 0x4F;			//E
	LedDisData[2] = 0x67;			//P
	LedDisData[3] = 0x0;
	LedDisData[4] = ledchar8_tab[(LedNum / 10) % 10];
	LedDisData[5] = ledchar8_tab[LedNum % 10];
	LedDisData[6] = 0x80;
	LedDisData[7] = ledchar8_tab[(TempData.7 * 5)];
}

void ledinit(void)
{
	LED_LOAD = 0;
	ledsendbyte(0x0C);		//shutdown control
	ledsendbyte(0x01);
	LED_LOAD = 1;
	delaynop();
	LED_LOAD = 0;
	ledsendbyte(0x0B);		//scanned limit(8)
	ledsendbyte(0x07);
	LED_LOAD = 1;
	delaynop();
	LED_LOAD = 0;
	ledsendbyte(0x09);		//decode enable
	ledsendbyte(0x00);
	LED_LOAD = 1;
	delaynop();
	LED_LOAD = 0;
	ledsendbyte(0x0A);		//intensity control
	ledsendbyte(0x0F);
	LED_LOAD = 1;
}

void leddriver(void)
{
	register u8 i;
	for(i = 0; i < 8; i++)
	{
		LED_LOAD = 0;
		ledsendbyte(i + 1);
		ledsendbyte(LedDisData[i]);
		LED_LOAD = 1;
	}
}
 
void ledsendbyte(u8 data_byte)
{
	register u8 i;
	for(i = 0; i < 8; i++)
	{
		LED_CLK = 0;
		if((data_byte << i) & 0x80)
		{LED_DIN = 1;}
		else
		{LED_DIN = 0;}
		LED_CLK = 1;
	}
}

/* LEDLIGHT--------------------------------------------------------------*/
void ledlight(void)
{
	u8 i;
	LedLData = 0xFF;
	i = (ADValue >> 5);
	for(; i > 0; i--)
	{LedLData &= (0xFE << i);}
	if((ADValue >> 4) == 1)
	{LedLData = 0xFE;}
	P2.3 = LedLData.7;
	P2.2 = LedLData.6;
	P2.1 = LedLData.5;				//P2.5 in KE2 v1.0
	P2.0 = LedLData.4;				//P2.4 in KE2 v1.0
	P4.3 = LedLData.3;
	P4.2 = LedLData.2;
	P4.1 = LedLData.1;
	P4.0 = LedLData.0;
}

/* LCD-------------------------------------------------------------------*/
void lcddisplay(void)
{
	LcdData0 = LcdNum[0];
	LcdData1 = LcdNum[1];
	LcdData2 = LcdNum[2];
	LcdData3 = LcdNum[3];
	LcdData4 = LcdNum[4];
	LcdData5 = LcdNum[5];
	LcdData6 = (LcdNum[6] >> 4);
	LcdData7 = (LcdNum[6] << 4);
	LcdData8 = (LcdNum[7] >> 4);
	LcdData9 = (LcdNum[7] << 4);
	LcdData10 = LcdNum[8];
	LcdData11 = LcdNum[9];
	
	LcdData6.6 = lcd_point1;
	LcdData6.5 = lcd_point2;
	LcdData9.2 = lcd_point3;
	LcdData9.1 = lcd_point4;
	LcdData12.0 = lcd_key;
	LcdData12.1 = lcd_comm;
	LcdData12.2 = lcd_batt;
	LcdData12.5 = lcd_data;
	LcdData12.6 = lcd_time;
	LcdData12.7 = lcd_temp;
	
	LcdData7.3 = ADSign.0;
	LcdData7.2 = ADSign.1;
	LcdData7.1 = ADSign.2;
	LcdData8.5 = ADSign.3;
	LcdData8.6 = ADSign.4;
	LcdData8.7 = ADSign.5;
	LcdData0.0 = ADSign.6;
	LcdData1.0 = ADSign.7;
	LcdData2.0 = ADSign.8;
	LcdData3.0 = ADSign.9;
	LcdData4.0 = ADSign.10;
	LcdData5.0 = ADSign.11;
	LcdData6.4 = ADSign.12;
	LcdData7.4 = ADSign.13;
	LcdData9.4 = ADSign.14;
	LcdData9.0 = ADSign.15;
	
	LcdData12.3 = 1;
	LcdData12.4 = 1;
	LcdData11.0 = 1;
	LcdData10.0 = 1;
	
	LcdDisData[0] = LcdData0;
	LcdDisData[1] = LcdData1;
	LcdDisData[2] = LcdData2;
	LcdDisData[3] = LcdData3;
	LcdDisData[4] = LcdData4;
	LcdDisData[5] = LcdData5;
	LcdDisData[6] = LcdData6;
	LcdDisData[7] = LcdData7;
	LcdDisData[8] = LcdData8;
	LcdDisData[9] = LcdData9;
	LcdDisData[10] = LcdData10;
	LcdDisData[11] = LcdData11;
	LcdDisData[12] = LcdData12;
} 

void lcdinit(void)
{
	iic_start();
	iic_sendbyte(0x7C);    //slave address
	iic_sendbyte(0xEA);    //software reset ICSET
	iic_sendbyte(0xBF);    //display ctrl  DISCTL
	iic_sendbyte(0xc8);    //display on
  iic_stop();
}
  
void lcddriver(void)
{ 
	u8 i;
	iic_start();
	iic_sendbyte(0x7C);    //slave address
	iic_sendbyte(0x00);
	for(i = 0; i < 13; i++)
	{
		iic_sendbyte(LcdDisData[i]);
	}
	iic_stop();
}


/********************** (C) COPYRIGHT 2008 GETSOON************************/

⌨️ 快捷键说明

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