📄 shiyan82f.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.PDR2.BIT.B0
#define RS IO.PDR2.BIT.B1
#define RW IO.PDR2.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();
//unsigned char LcdStr[] = {"How are you! "};
int LcdBusy = 0;
int delaya = 0; //延时变量
int delayb = 0;
int delayc = 0;
//////
unsigned char tab[]={0x77,0x7b,0x7d,0x7e,0x0b7,0x0bb,0x0bd,0x0be,
0x0d7,0x0db,0x0dd,0x0de,0x0e7,0x0eb,0x0ed,0x0ee}; /*键码表*/
unsigned char LcdStr[]={"0123456789ABCDEF"};
unsigned char j;
//端口8的P80~P83与键盘的列Y4~Y1连,端口1的P14~P17与键盘的行X4~X0连
delay(unsigned long int i)
{ unsigned long int y;
for (y=0;y<i;y++);
}
////
void main(void)
{
unsigned char i,a,b;
IO.PCR2 = 0x0ff;
IIC.ICCR.BIT.ICE = 0; //选择端口5为通用IO
IO.PMR5.BYTE = 0;
//
while(1)
{
//进入查询是否有键按下
//for (delaya=0;delaya<10000;delaya++);
IO.PCR2 = 0x0ff;
IIC.ICCR.BIT.ICE = 0; //选择端口5为通用IO
IO.PMR5.BYTE = 0;
a=0xf0; //键盘无输入时的初始值
delay(1000);
IO.PCR8 = 0x0f; //端口8低4位输出
IO.PDR8.BYTE=0; //端口8输出列线低电平
while( a==0xf0)
{
delay(5000); //延时,去抖
IO.PCR1=0x0f; //端口1高4位输入,低4位输出
a=IO.PDR1.BYTE; //读入行线值
a=a & 0xf0; //保留高4位值
};
//有键按下
b=a; //先保存高4位
a=a|0x0f; //高4位不变,低4位置1,准备从行线输出
IO.PCR1=0xff; //端口1高4位输出,低4位输出
IO.PDR1.BYTE=a;
delay(5000); //延时,去抖
//读入列线的值
IO.PCR8 = 0x00; //端口8低4位输入
delay(5000);
b=b|(IO.PDR8.BYTE&0x0f); //合并行线与列线的值
//在键码表中查找相应的键码,并计算在段码中的位置
i=0; //计数器清零
a=tab[0];
while (i<16&b!=a)
{
i++;
a=tab[i];
}
j=i;
//
LCDinit();
LCDupdate();
//delay(9999);
}
}
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;);
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 < 16; i++)
// {
LCD_Busy();
RS = 1;
//clear();
IO.PCR5 = 0x0ff;
IO.PDR5.BYTE = LcdStr[j];
//IO.PDR5.BYTE = a;
LCD_Print();
delay(4000);
/* 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();
set_imask_ccr(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -