📄 lcd.c
字号:
/***************************
16:11 2004-7-28 键盘输入调试程序--将输入的键盘数值赋给变量k
***************************/
/***address defined***/
#include "F2407_c.h"
#include "stdlib.h"
unsigned char lcd_data[64];/*数组定义*/
char lcd_data1[1];
int pData[4];
int a=100;
/*系统 初始化子程序*/
initial()
{
asm(" setc INTM ");
asm (" setc SXM");/*抑制符号位扩展*/
asm (" clrc OVM");/*累加器中结果正常溢出*/
asm (" clrc CNF");/*B0被配置为数据存储空间*/
WDCR=0x6F;
WSGR=0x04;
SCSR1=0x86FF; /*CLKIN=15M*/
IMR=0X0000;
IFR=0x0FFFF;
MCRA=0x0000; /*IOPA5~7 配置为一般I/O功能*/
PADATDIR=0x0F700;/*IOPA1~6配置为输出方式.IOPA0配置为输入方式*/
PBDATDIR=0x0FFFF;/*IOPB配置为输出方式*/
MCRC=0x0FB71; /*IOPE1~3,IOPF2配置为一般I/O口*/
PEDATDIR=0x8000;
PFDATDIR=0x0000;
}
/*中断屏蔽子程序*/
void inline disable()
{
asm (" setc INTM ");
}
/*中断使能子程序*/
void inline enable()
{
asm (" clrc INTM ");
}
/*延时子程序*/
void Delay(int count)
{
int ii;
int jj;
for (ii=0;ii<=50;ii++)
{
jj=count;
while(jj > 0)
jj--;
}
}
/*发送数据子程序*/
void SendData()
{
Delay(30);/*等待数据稳定*//*本句必须有*/
PADATDIR=(PADATDIR | 0x0010);/*发送请求*/
loop:
/*检测BUSY位是否为1,即数据是否处理完*/
if(!(PADATDIR & 0x0008))
goto loop;
PADATDIR=(PADATDIR & 0x0FFEF);/*撤消请求*/
Delay(30);/*等待模块内部处理完成*/
/*本句也必须有,否则虽然能够正常显示汉字,但会不时的有闪烁*/
}
/*液晶复位清屏子程序*/
void ResetLCD(void)
{
PBDATDIR=0x0FFF4;
SendData(); /*以上两句为清屏,向数据口送清屏指令#F4H*/
}
/*显示汉字*/
void hanzi()
{
int comd;int adres_x;int adres_y;unsigned char_qu;unsigned char_wei;
unsigned i;
unsigned j;
unsigned m;
strcpy(lcd_data," 当前按键 欢迎使用闻亭科技");
comd=0x0fff0;
for(i=0;i<4;i++)
{ for(j=2;j<10;j++)
{ adres_x=j;
adres_y=i;
char_qu=lcd_data[i*16+(j-2)*2]-0x0a0;
char_wei=lcd_data[i*16+(j-2)*2+1]-0x0a0;
pData[0]=comd;
pData[1]=adres_x|0x0ff00;
pData[2]=adres_y|0x0ff00;
pData[3]=char_qu|0x0ff00;
pData[4]=char_wei|0x0ff00;
for(m=0;m<5;m++)
{PBDATDIR=pData[m];SendData();}
}
}
}
/*欢迎界面*/
void hanzi1()
{
int comd;int adres_x;int adres_y;unsigned char_qu;unsigned char_wei;
unsigned i;
unsigned j;
unsigned m;
strcpy(lcd_data," 闻亭科技 发展责任有限公司 追求卓越品质 欢迎使用 ");
comd=0x0fff0;
for(i=0;i<4;i++)
{ for(j=2;j<10;j++)
{ adres_x=j;
adres_y=i;
char_qu=lcd_data[i*16+(j-2)*2]-0x0a0;
char_wei=lcd_data[i*16+(j-2)*2+1]-0x0a0;
pData[0]=comd;
pData[1]=adres_x|0x0ff00;
pData[2]=adres_y|0x0ff00;
pData[3]=char_qu|0x0ff00;
pData[4]=char_wei|0x0ff00;
for(m=0;m<5;m++)
{PBDATDIR=pData[m];SendData();}
}
}
}
/*ASCII码显示程序*/
void ASCII1()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"1");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII2()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"2");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII3()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"3");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII4()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"4");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII5()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"5");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII6()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"6");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII7()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"7");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII8()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"8");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII9()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"9");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII0()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"0");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII10()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"A");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII11()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"B");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII12()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"C");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII13()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"D");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII14()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"E");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*ASCII码显示程序*/
void ASCII15()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
int m;
strcpy(lcd_data1,"F");
comd=0x0fff9;
adres_x=0x0ff0C;
adres_y=0x0ff20;
ASCII_code=lcd_data1[0];
pData[0]=comd;
pData[1]=adres_x;
pData[2]=adres_y;
pData[3]=ASCII_code|0x0ff00;
for(m=0;m<4;m++)
{PBDATDIR=pData[m];SendData();}
}
/*键盘扫描子程序*/
int keyscan()
{
int k,j;
if ((PEDATDIR&0x000E)|PFDATDIR&0x0004==0) /*读入键盘输入键值*/
k=0;
else k=1; /*有键按下则k=1*/
if (k==1)
{
for (j=3;j>0;j--) j=j; /*延时消抖,判断是否还有键按下*/
if ((PEDATDIR&0x000E)|PFDATDIR&0x0004==0) /*读入键盘输入键值*/
k=0;
else k=1; /*若还有键按下则k=1*/
}
return (k);/*返回k值*/
}
/*键盘服务子程序*/
int keyserve()
{
PADATDIR=PADATDIR&0x0FF7F; /*IOPA7=0*/
Delay(200);
if (!(PFDATDIR & 0x0004))
{a=1;}/*检测IOPF2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0008))
{a=2;}/*检测IOE3是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0004))
{a=3;}/*检测IOPE2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0002))
{a=4;}/*检测IOPE1是否为0*/
Delay(2);
PADATDIR=PADATDIR|0x0080;
PADATDIR=PADATDIR&0x0FFBF; /*IOPA6=0*/
Delay(200);
if (!(PFDATDIR & 0x0004))
{a=5;}/*检测IOPF2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0008))
{a=6;}/*检测IOE3是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0004))
{a=7;}/*检测IOPE2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0002))
{a=8;}/*检测IOPE1是否为0*/
Delay(2);
PADATDIR=PADATDIR|0x0040;
PADATDIR=PADATDIR&0x0FFDF; /*IOPA5=0*/
Delay(200);
if (!(PFDATDIR & 0x0004))
{a=9;}/*检测IOPF2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0008))
{a=0;}/*检测IOPE3是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0004))
{a=10;}/*检测IOPE2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0002))
{a=11;}/*检测IOPE1是否为0*/
Delay(2);
PADATDIR=PADATDIR|0x0020;
PEDATDIR=PEDATDIR&0x0FF7F; /*IOPE7=0*/
Delay(200);
if (!(PFDATDIR & 0x0004))
{a=12;}/*检测IOPF2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0008))
{a=13;}/*检测IOPE3是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0004))
{a=14;}/*检测IOPE2是否为0*/
Delay(2);
if (!(PEDATDIR & 0x0002))
{a=15;}/*检测IOPE1是否为0*/
Delay(2);
PEDATDIR=PEDATDIR|0x0080;
return (a);
}
void interrupt nothing()/*假中断程序*/
{
return;
}
/*********************************************************************************
主程序
**********************************************************************************/
main()
{
disable();//禁止所有中断
initial();//系统初始化
ResetLCD();//液晶清屏
Delay(10000);
Delay(10000);
hanzi1();//欢迎界面
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
ResetLCD();
Delay(10000);
hanzi();
Delay(10000);
while(1)
{
int i;
i=0;
i=keyscan();
if (i==1)
keyserve();
a=keyserve();
if (a==1) {ASCII15();}
if (a==2) {ASCII14();}
if (a==3) {ASCII13();}
if (a==4) {ASCII12();}
if (a==5) {ASCII11();}
if (a==6) {ASCII10();}
if (a==7) {ASCII0();}
if (a==8) {ASCII9();}
if (a==9) {ASCII8();}
if (a==0) {ASCII7();}
if (a==10) {ASCII6();}
if (a==11) {ASCII5();}
if (a==12) {ASCII4();}
if (a==13) {ASCII3();}
if (a==14) {ASCII2();}
if (a==15) {ASCII1();}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -