📄 ledctrl.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 + -