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

📄 shiyan73.c

📁 用中断的方式控制lcd的显示
💻 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>

//端口5的P50--P57和LCD的DB0--DB7连接,端口8的P80,P81和P82连接LCD的E,RS,R/W;

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

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

unsigned char LcdStr[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
int LcdBusy = 0;
int delaya = 0;					//延时变量
int delayb = 0;
int delayc = 0;
int m=100;
int n=0;
void main(void)
{
	set_imask_ccr(1);
	IO.PMR1.BIT.IRQ1=1;	//P14为irq1输入
	IEGR1.BIT.IEG1=1;	//irq1上升沿触发
	IRR1.BIT.IRRI1=0;		//清irq1中断标志
	IENR1.BIT.IEN1=1;		//允许irq1中断

	IO.PCR8 = 0x0ff;
	IIC.ICCR.BIT.ICE = 0;		
	IO.PMR5.BYTE = 0;	//选择端口5为通用IO
	clear();
	set_imask_ccr(0);
	while(1)
	{	
		for(delaya=0;delaya<1000;delaya++);
		delaya=0;
		if (n==1)
		{
		LCDinit();
		LCDupdate();
		}
		n=0;
	}
}

void abort(void)
{
	
}
/*--------------------------------------------------------------------------

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;delaya++);
	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();

	
	
		LCD_Busy();
		
		RS = 1;
		if (m==26)m=0;
		IO.PCR5 = 0x0ff;
		IO.PDR5.BYTE = LcdStr[m];
		LCD_Print();
		

/*		if(i == 7)
		{
			for(delayc = 0;delayc++ <4000;);
			RS = 0;
			IO.PDR5.BYTE = 0x0c0;
			LCD_Print();
		}*/
	
	set_imask_ccr(0);
	return;
}
void clear()
{
	int i = 0;
	set_imask_ccr(1);
	RS = 0;
	IO.PCR5 = 0x0ff;
	IO.PDR5.BYTE = 0x01;
	LCD_Print();
}

void int1()
{
	IRR1.BIT.IRRI1=0;
	m++;
	if(m==101)m=0;
	
	clear();
	n=1;
	n=1;
}

⌨️ 快捷键说明

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