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

📄 ledctrl.c

📁 基于H83664的手机模块TC35i短信收发系统 at_cmd01.c/LEDctrl.c/read_sms.c/rec_sms.c/send_sms.c/sms.c
💻 C
字号:
/***********************************************************************/
/*                                                                     */
/*  FILE        :LcdTest.c                                             */
/*  DATE        :Mon, Sep 06, 2004                                     */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :H8/3664F                                              */
/*                                                                     */
/*  This file is generated by Hitachi Project Generator (Ver.2.1).     */
/*                                                                     */
/***********************************************************************/
                  

#include <header3664.h>
#include <machine.h>
#include <string.h>

//端口5的P50--P57和LCD的DB0--DB7连接,端口1的P10,P11和P12连接LCD的E,RS,R/W;

#define E IO.PDR1.BIT.B0
#define RS IO.PDR1.BIT.B1
#define RW IO.PDR1.BIT.B2

void LCDupdate(void);			//LCD显示子程序
void LCDinit(void);				//LCD初始化
void LCD_Busy(void);			//LCD判忙子程序
void LCD_Print(void);			//LCD写程序
void LcdStrUpdate(void);		//LCD显示内容更新

extern unsigned char LcdStr[32];
int LcdBusy = 0;
int delaya = 0;					//延时变量
int delayb = 0;
int delayc = 0;
extern int LCDk;

void LCD(char LCD_pr)
{
	IO.PCR1 = 0x0ff;
	IIC.ICCR.BIT.ICE = 0;		//选择端口5为通用IO
	IO.PMR5.BYTE = 0;
	LCDinit();
	LcdStr[LCDk] = LCD_pr;
	LCDk++;
	LCDupdate();
}

/*--------------------------------------------------------------------------

Function:					void LCD_Busy(void)
Purpose:					判断LCD是否可写	

---------------------------------------------------------------------------*/

void LCD_Busy(void)
{
	RS = 0;
	RW = 1;
	
	IO.PCR5 = 0;				//选择端口5为输入端口
	E = 1;
	LcdBusy = IO.PDR5.BIT.B7;
	E = 0;

	for(;LcdBusy == 1;)
	{
		IO.PCR5 = 0;
		E = 1;
		LcdBusy = IO.PDR5.BIT.B7;
		E = 0;
	}
	return;
}

/*--------------------------------------------------------------------------

Function:					void LCD_Print(void)
Purpose:					LCD写程序	

---------------------------------------------------------------------------*/

void LCD_Print(void)
{
	delaya = 0;
	RW = 0;
	E = 1;
	E = 0;
	for(delaya = 0;delaya++<1000;);
	return;
}

/*--------------------------------------------------------------------------

Function:					void LCDinit(void)
Purpose:					初始化LCD,准备接收输入	

---------------------------------------------------------------------------*/

void LCDinit(void)
{
	int i = 0;
		
	set_imask_ccr(1);
	RS = 0;
	RW = 0;
	
	IO.PCR5 = 0x0ff;				//选择端口5为输出管脚
	IO.PDR5.BYTE = 0x30;

	for(i = 3;i > 0;i--)
	{
		E = 1;
		E = 0;
		for(delayb = 0;delayb++<8000;);
	}

	IO.PDR5.BYTE = 0x38;
	LCD_Print();
	
	IO.PDR5.BYTE = 0x01;
	LCD_Print();

	IO.PDR5.BYTE = 0x06;
	LCD_Print();

	IO.PDR5.BYTE = 0x0f;
	LCD_Print();
	set_imask_ccr(0);
	return;
}

/*--------------------------------------------------------------------------

Function:					void LCDupdate(void)
Purpose:					使LCD显示相应内容	

---------------------------------------------------------------------------*/

void LCDupdate(void)
{
	int i = 0;
	set_imask_ccr(1);
	RS = 0;
	IO.PCR5 = 0x0ff;
	IO.PDR5.BYTE = 0x01;
	LCD_Print();

	for(i = 0;i <=32; i++)
	{
		LCD_Busy();
		RS = 1;
		
		IO.PCR5 = 0x0ff;
		IO.PDR5.BYTE = LcdStr[i];
		LCD_Print();

		if(i == 15)
		{
			for(delayc = 0;delayc<4000;delayc++);
			RS = 0;
			IO.PDR5.BYTE = 0x0c0;
			LCD_Print();
		}
	}
	set_imask_ccr(0);
	return;
}

void LCDDisplay(char dis_con[], int len, int cl){
	int i, dl;
	if (len == 0) dl = strlen(dis_con);
	else dl = len;
	if (cl == 1){
		clear_arr(LcdStr, 32, 0x20);
		LCDk = 0;
	}
	for (i = 0; i < dl; i++){
		LCD(dis_con[i]);
		delay();
	}
}

⌨️ 快捷键说明

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