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

📄 swutl.c

📁 一个瑞萨单片机的程序。。。供大家学习用。。。。。。。。。。。。。。。。。。
💻 C
字号:
/*""FILE COMMENT""*************************************************************
*  System Name : 偙偺僾儘僌儔儉偼嫵堢梡偱偡丅(揮梡晄壜)
*  File Name   : swutl.c
*  Contents    : SW,僉乕儅僩儕僋僗偺惂屼
*  Model       : OAKS8-LCD Board懳墳
*  CPU         : R8C/Tiny僔儕乕僘
*  Compiler    : NC30WA(V.5.30 Release 1)
*  OS          : 巊梡偣偢
*  Programer   : 儖僱僒僗敿摫懱僩儗乕僯儞僌僙儞僞乕
*  Note        : OAKS8-R5F21114FP(R8C/11僌儖乕僾,20MHz)懳墳
*******************************************************************************
* COPYRIGHT(C) 2004 RENESAS TECHNOLOGY CORPORATION
* AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED
*******************************************************************************
* History      : ---
*""FILE COMMENT END""*********************************************************/

/*===== 僀儞僋儖乕僪僼傽僀儖 =====*/
#include "defs.h"					/* 嫟捠偺僔儞儃儖掕媊					*/
#include "target.h"					/* SFR椞堟掕媊僼傽僀儖					*/
#include "swutl.h"					/* SW,僉乕儅僩儕僋僗惂屼梡僿僢僟僼傽僀儖*/

/*===== 儅僋儘柤掕媊 =====*/
#define ENTER_KEY	0x0B			/* ENTER僉乕							*/
#define CLEAR_KEY 	0x09			/* CLEAR僉乕							*/

typedef union{						/* 擖椡僨乕僞梡嫟梡懱偺宆掕媊			*/
	unsigned int all;
	struct {
		unsigned int DUMMY : 4;
		unsigned int sw0_B : 3;		/* SW00,SW10,SW20偺儕僞乕儞擖椡奿擺椞堟	*/
		unsigned int sw7_9 : 3;		/* SW01,SW11,SW21偺儕僞乕儞擖椡奿擺椞堟	*/
		unsigned int sw4_6 : 3;		/* SW02,SW12,SW22偺儕僞乕儞擖椡奿擺椞堟	*/
		unsigned int sw1_3 : 3;		/* SW03,SW13,SW23偺儕僞乕儞擖椡奿擺椞堟	*/
	}line;
}DEF_KEYMTX;

/*===== 娭悢尨宆(僾儘僩僞僀僾)愰尵 =====*/
static int judge_keyMTX(unsigned char *swdata);	/* SW敾掕惂屼娭悢			*/
static int keymatrix_EX(DEF_KEYMTX *swdata);	/* 僉乕儅僩儕僋僗惂屼娭悢	*/
static int detect_edge(unsigned int swdata);	/* 僄僢僕専弌惂屼娭悢		*/
static int cut_chat(unsigned int sw_input);	 	
										/* 僠儍僞儕儞僌&僲僀僘僼傿儖僞娭悢	*/
void INT_TimerY(void);			/* 僞僀儅Y妱傝崬傒娭悢(僒儞僾儕儞僌廃婜寁應)*/

/*===== 曄悢愰尵 =====*/
static int init_hard;					/* 僴乕僪僂僃傾弶婜壔娗棟曄悢		*/
										/* 0:枹弶婜壔丄1:弶婜壔嵪傒			*/

static volatile unsigned char sw_data ;	/* 墴偝傟偨SW偺斣崋					*/
static volatile int F_keyfix ;			/* 擖椡僨乕僞妋掕僼儔僌				*/
										/* 0:枹妋掕丄1:妋掕嵪傒				*/
static const unsigned char scan_table[] = {	/* 僗僉儍儞儔僀儞巜掕僨乕僞		*/
	0xFD , 0xFB , 0xF7 , 0xEF 
};

/*""FUNC COMMENT""*************************************************************
* ID		 : ---
* 娭悢柤	 : void	SW__initialize1(void)
* 婡擻		 : 僉乕儅僩儕僋僗丄僾僢僔儏僗僀僢僠惂屼娭楢偺弶婜壔
* 堷悢		 : 側偟
* 曉媝抣	 : 側偟
* 巊梡娭悢	 : 側偟
* 拲堄帠崁	 : 側偟
* History	 : ---
*""FUNC	COMMENT	END""*********************************************************/
void SW__initialize1(void)
{
	init_hard = TRUE;	/* SW乽弶婜壔嵪傒乿									*/

	/*----- 僉乕儅僩儕僋僗惂屼億乕僩偺弶婜壔 ----- */
	p0		= 0xFD;			/* SW00,SW10,SW20偺僗僉儍儞儔僀儞傪傾僋僥傿僽偵偡傞	*/
	prc2	= 1;			/* 億乕僩P0曽岦儗僕僗僞僾儘僥僋僩夝彍				*/
	pd0		= 0x1E;			/* 僉乕儅僩儕僋僗僗僉儍儞儔僀儞傪弌椡偵愝掕			*/
	prc2	= 0;			/* 億乕僩P0曽岦儗僕僗僞僾儘僥僋僩愝掕				*/
	pu06	= 1;			/* 僉乕儅僩儕僋僗儕僞乕儞儔僀儞
							(億乕僩P30乣億乕僩P33)偵僾儖傾僢僾邟飴R愙懕			*/
	pu11	= 1 ; 			/* 僉乕儅僩儕僋僗儕僞乕儞儔僀儞
							(億乕僩P45)偵僾儖傾僢僾掞峈愙懕						*/
	
	SW__initialize2();		/* 僾僢僔儏僗僀僢僠SW5偺弶婜愝掕					*/
	
	/*----- 僞僀儅Y偺弶婜壔 ----- */
	tyzmr &= 0xF0;					/* 僞僀儅YZ儌乕僪儗僕僗僞偺愝掕			 */
									/* ????0000								 */
									/* |||||||+ 僞僀儅儌乕僪				 */
									/* |||||++- 巊梡偣偢					 */
									/* ||||+--- 僇僂儞僩掆巭				 */
									/* ++++---- 僞僀儅Z娭楢價僢僩			 */
	tcss |= 0x04;					/* 僞僀儅僇僂儞僩僜乕僗愝掕價僢僩		 */
									/* ????01??								 */
									/* ||||||++ 僞僀儅X娭楢價僢僩			 */
									/* ||||++-- f8(400ns)傪慖戰				 */
									/* ||++---- 僞僀儅Z娭楢價僢僩			 */
									/* ++------ 梊栺價僢僩					 */
	prey = 50-1;					/* 僇僂儞僩抣愝掕						 */
	typr = 100-1;					/* 		2ms = 400ns亊(50亊100)			 */
	tyic = 0x02;					/* 妱傝崬傒傪愝掕(桪愭儗儀儖:2)			 */

	tys  = 1; 						/* 僇僂儞僩奐巒							 */
}


/*""FUNC COMMENT""*************************************************************
* ID		 : ---
* 娭悢柤	 : void	SW__initialize2(void)
* 婡擻		 : 僾僢僔儏僗僀僢僠SW5惂屼娭楢偺弶婜壔
* 堷悢		 : 側偟
* 曉媝抣	 : 側偟
* 巊梡娭悢	 : 側偟
* 拲堄帠崁	 : 側偟
* History	 : ---
*""FUNC	COMMENT	END""*********************************************************/
void SW__initialize2(void)
{
	prc2	= 1;		/* 億乕僩P0曽岦儗僕僗僞僾儘僥僋僩夝彍				*/
	pd0_5	= 0;		/* 億乕僩P0價僢僩5(僾僢僔儏僗僀僢僠SW5擖椡億乕僩)
													傪擖椡偵愝掕			*/
	prc2	= 0;		/* 億乕僩P0曽岦儗僕僗僞僾儘僥僋僩愝掕				*/

	pu01	= 1;		/* 僾僢僔儏僗僀僢僠SW5擖椡億乕僩偵僾儖傾僢僾掞峈愙懕*/
}


/*""FUNC COMMENT""*************************************************************
* ID		 : ---
* 娭悢柤	 : int	SW__getchar(void)
* 婡擻		 : 塸帤偺擖椡
*            : SW23:'A'  SW22:'B'  SW21:'C'  SW20:'#'
*            : SW13:'D'  SW12:'E'  SW11:'F'  SW10:'0'
*            : SW03:'G'  SW02:'H'  SW01:'I'  SW00:'*'
*            : 僉乕儅僩儕僋僗偵妱傝摉偰傜傟偨暥帤('A'偐傜'I'傑偱偺暥帤)偲偟偰
*            : ASCII僐乕僪乮0x41偐傜0x49傑偱偺抣乯傪曉偡丅
*            : SW傪惂屼偡傞億乕僩傪弶婜壔偟偰偄側偄偲偒偼丄ERR傪曉偡丅
* 堷悢		 : 側偟
* 曉媝抣	 : 僉乕儅僩儕僋僗偐傜擖椡偟偨塸帤('A'乣'L')
* 巊梡娭悢	 : 側偟
* 拲堄帠崁	 : 戝堟(僌儘乕僶儖)曄悢sw_data,F_keyfix傪巊梡
* History	 : ---
*""FUNC	COMMENT	END""*********************************************************/
int SW__getchar(void)
{
	unsigned char  key_arrenge[] = {	/* 僉乕攝抲僨乕僞(ACCII僐乕僪)		*/
		'A' , 'D' , 'G' , 
		'B' , 'E' , 'H' , 
		'C' , 'F' , 'I' , 
		'#' , '0' , '*' 
	};

	if(init_hard){					/* 弶婜壔嵪傒偱偁傟偽					*/
		while(!F_keyfix);			/* 擖椡妋掕懸偪							*/
		F_keyfix = FALSE;			/* 擖椡僨乕僞妋掕僼儔僌僋儕傾			*/
		return ((int)key_arrenge[sw_data]);	
									/* ACCII僐乕僪偵曄姺偟偰曉偡			*/
	}
									/* 枹弶婜壔偱偁傟偽					 	*/
	return	ERR;					/* 	僄儔乕抣傪曉偡					 	*/
}


/*""FUNC COMMENT""*************************************************************
* ID		 : ---
* 娭悢柤	 : int	SW__gets(unsigned char *s)
* 婡擻		 : 暥帤楍偺擖椡
*            : SW23:'A'  SW22:'B'  SW21:'C'  SW20:'#'
*            : SW13:'D'  SW12:'E'  SW11:'F'  SW10:'0'
*            : SW03:'G'  SW02:'H'  SW01:'I'  SW00:'*'
*            : 僉乕儅僩儕僋僗偵妱傝摉偰傜傟偨暥帤('A'乣'I')傪ENTER僉乕傑偱
*            : 楢懕偟偰擖椡偟丄擖椡偟偨暥帤悢傪曉偡丅擖椡偟偨暥帤楍偺廔抂偵偼
*            : '\0'晅壛偡傞丅
*            : ENTER偺傒偺擖椡偼丄抣0傪曉偟'\0'偺傒奿擺偡傞丅
*            : SW傪惂屼偡傞億乕僩傪弶婜壔偟偰偄側偄偲偒偼丄ERR傪曉偡丅
* 堷悢		 : const unsigned char *s : 暥帤楍傪奿擺偡傞椞堟傊偺億僀儞僞
* 曉媝抣	 : 擖椡偟偨暥帤悢
* 巊梡娭悢	 : 側偟
* 拲堄帠崁	 : 戝堟(僌儘乕僶儖)曄悢sw_data,F_keyfix傪巊梡
* History	 : ---
*""FUNC	COMMENT	END""*********************************************************/
int SW__gets(unsigned char *s)
{
	unsigned char  key_arrenge[] = {	/* 僉乕攝抲僨乕僞(ACCII僐乕僪)		*/
		'A' , 'D' , 'G' , 
		'B' , 'E' , 'H' , 
		'C' , 'F' , 'I' , 
		'#' , '0' , '*' 
	};

	unsigned char i ;				/* 暥帤悢僇僂儞僩梡曄悢					*/

	if(init_hard){					/* 弶婜愝掕嵪傒偱偁傟偽					*/
		for(i = 0; ; i++){
			while(!F_keyfix);		/* 擖椡妋掕懸偪							*/
			F_keyfix = FALSE;		/* 擖椡僨乕僞妋掕僼儔僌僋儕傾			*/

			if(ENTER_KEY == sw_data) break;	/* ENTER僉乕偺擖椡偱姰椆		*/
			*(s + i) = key_arrenge[sw_data];/* ACCII僐乕僪偵曄姺偟偰		*/
											/* 僶僢僼傽偵奿擺				*/
		} 									
		*(s + i) = '\0';			/* 嵟屻偵僰儖僐乕僪傪奿擺				*/
		
		return i;					/* 暥帤悢傪曉偡							*/
	}
									/* 枹弶婜壔偱偁傟偽					 	*/
	return	ERR;					/* 僄儔乕抣傪曉偡					 	*/
}


/*""FUNC COMMENT""*************************************************************
* ID		 : ---
* 娭悢柤	 : int	SW__getnum(void)
* 婡擻		 : SW斣崋0乣9偺擖椡
*            : SW23:1  SW22:2  SW21:3  SW20:'#'
*            : SW13:4  SW12:5  SW11:6  SW10:0
*            : SW03:7  SW02:8  SW01:9  SW00:'*'
*            : SW傪惂屼偡傞億乕僩傪弶婜壔偟偰偄側偄偲偒偼丄ERR傪曉偡丅
* 堷悢		 : 側偟
* 曉媝抣	 : 僉乕儅僩儕僋僗偐傜擖椡偟偨SW斣崋(0乣11)
* 巊梡娭悢	 : 側偟
* 拲堄帠崁	 : 戝堟(僌儘乕僶儖)曄悢'sw_data','F_keyfix'傪巊梡
* History	 : ---
*""FUNC	COMMENT	END""*********************************************************/
int SW__getnum(void)
{
	unsigned char  key_arrenge[] = {	/* 僉乕攝抲僨乕僞(悢抣)				*/
		 1   , 4 ,  7   , 
		 2   , 5 ,  8   , 
		 3   , 6 ,  9   , 
		'#'  , 0 , '*' 
	};

	if(init_hard){					/* 弶婜壔嵪傒偱偁傟偽					*/
		while(!F_keyfix);			/* 擖椡妋掕懸偪							*/
		F_keyfix = FALSE;			/* 擖椡僨乕僞妋掕僼儔僌僋儕傾			*/
		return ((int)key_arrenge[sw_data]);	
									/* SW偺斣崋傪曉偡						*/
	}
									/* 枹弶婜壔偱偁傟偽					 	*/
	return	ERR;					/* 僄儔乕抣傪曉偡					 	*/
}


/*""FUNC COMMENT""*************************************************************
* ID		 : ---
* 娭悢柤	 : int	SW__getdec(void)
* 婡擻		 : 10恑悢抣偺擖椡
*            : SW23:1  SW22:2  SW21:3  SW20:'#'
*            : SW13:4  SW12:5  SW11:6  SW10:0
*            : SW03:7  SW02:8  SW01:9  SW00:'*'
*            : 0乣32767偺10恑悢抣傪擖椡偡傞丅ENTER傑偱擖椡偡傞丅
*            : ENTER偺傒偺擖椡偼丄抣0傪曉偡丅
*            : 斖埻(0乣32767)埲奜偺抣傪擖椡偟偨傜丄ERR傪曉偡丅
*            : SW傪惂屼偡傞億乕僩傪弶婜壔偟偰偄側偄偲偒偼丄ERR傪曉偡丅
* 堷悢		 : 側偟
* 曉媝抣	 : 僉乕儅僩儕僋僗偐傜擖椡偟偨10恑悢抣
* 巊梡娭悢	 : 側偟
* 拲堄帠崁	 : 戝堟(僌儘乕僶儖)曄悢sw_data,F_keyfix傪巊梡
* History	 : ---
*""FUNC	COMMENT	END""*********************************************************/
int SW__getdec(void)
{
	unsigned char  key_arrenge[] = {	/* 僉乕攝抲僨乕僞(悢抣)				*/
		 1   , 4 ,  7   , 
		 2   , 5 ,  8   , 
		 3   , 6 ,  9   , 
		'#'  , 0 , '*' 					/*'#':CLEAR僉乕丄'*':ENTER僉乕		*/
	};
	long out_dec = 0;					/* 曄姺寢壥(10恑悢抣) 				*/
	unsigned char i;

	if(init_hard){					/* 弶婜壔嵪傒偱偁傟偽					*/
		for(i = 0;  ;i++){			/* 僉乕儅僩儕僋僗偐傜擖椡				*/
			while(!F_keyfix);		/* 擖椡妋掕懸偪 						*/
			F_keyfix = FALSE;		/* 擖椡僨乕僞妋掕僼儔僌僋儕傾			*/
			
			if(ENTER_KEY == sw_data) break;	/* ENTER僉乕偺擖椡偱姰椆		*/
			if(CLEAR_KEY == sw_data){		/* CLEAR僉乕偑擖椡偝傟偨傜		*/
				out_dec = 0;				/* 僶僢僼傽僋儕傾屻丄嵞擖椡傊	*/
			 	continue ;
			}	
			else{							/* 悢帤偑擖椡偝傟偨帪偩偗墘嶼	*/
				out_dec = out_dec * 10 + (long)key_arrenge[sw_data];
			}
		}
		if((i>5) || (out_dec > 32767)){		/* 斖埻偺僠僃僢僋				 */
			return ERR;
		}
		else{
			return ((int)out_dec);			/* 悢抣傪曉偡					 */
		}
	}
									/* 枹弶婜壔偱偁傟偽					 	*/
	return	ERR;					/* 	僄儔乕抣傪曉偡					 	*/
}


/* #############################################################################
 * ###	岞奐偟側偄娭悢
 */


/*""FUNC COMMENT""*************************************************************
* ID		 : ---
* 娭悢柤	 : static int	judge_keyMTXr(char *swdata)
* 婡擻		 : 僉乕儅僩儕僋僗惂屼
* 堷悢		 : char  *swdata : 	墴偝傟偨SW斣崋傪奿擺偡傞椞堟傊偺億僀儞僞
* 曉媝抣	 : int OK	; 惓忢廔椆
*			 :     ERR	; 枹弶婜壔
* 巊梡娭悢	 : unsigned char keymatrix_EX( DEF_KEYMTX * ) ; 钒夏馗綋鼦蛫謵

⌨️ 快捷键说明

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