C语言求优化?
////////////////////////////////12864串口调试
//目的:通过12864串行方式显示
//
//编程人:赵升良
//编程时间:2012年5月23日
//
/////////////////////////////
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit cs=P3^0;
sbit sid=P3^1;
sbit e=P3^2;
void dly(uint z);//延时
void inin();//显示屏初始化
void xzl(uchar xzl);//显示屏写指令
void xsj(uchar xsj);//显示写数据
void jpsr();//键盘输入
void tzcx(uchar z);//开,关,确定,否定,跳转
void dyy();//显示进入页面“欢迎使用”
void szjm();//进入设置界面
void xplz();//写频率
void xmm();//写密码
void szpd(uchar c);//键盘数值判断
/////////////////////////////z
uchar num[]=" 欢迎使用 ";
uchar num1[]="0123456789.";
uchar num2[]=" 初值设定 ";
uchar num3[]="频率: M";
uchar num4[]="密码: 【 】";
uchar num5[]="确定 否定";
/*以上为第一页显示
/////////////////////////////
uchar num2[]="";
uchar num3[]="";
uchar num4[]=" ";
uchar num5[]=" ";
//以上为第二页显示
/////////////////////////////
*/
void main()
{ uint i;
inin();//显示进入初始化
dly(10);
/////////////////////////////
dyy();//开机界面
P2=0x0f;
while(P2==0x0f)
{
;
}//判断有没有按下按键,好进入下个页面进行操作
szjm();//有按下进入设置界面
while(1);
}
/////////以上为主程序
void dyy()
{ int i;
xzl(0x90);//显示在第二行
i=0;
while(i<16)
{
xsj(num[i]);
i++;
dly(1);
}
dly(1000);
}
/////////显示第一页第二行"欢迎使用"
void szjm()
{ uint i;
xzl(0x01);//清屏为清除“欢迎使用”
xzl(0x80);//起始地址
i=0;
while(i<16)
{
xsj(num2[i]);
i++;
dly(1);
}//写第二页第一排 显示初值设定
xzl(0x90);
i=0;
while(i<16)
{
xsj(num3[i]);
i++;
dly(1);
}//写第二页第二排 显示频率: M
xzl(0x88);
i=0;
while(i<16)
{
xsj(num4[i]);
i++;
dly(1);
}//写第二页第三排 显示密码:
xzl(0x98);
i=0;
while(i<16)
{
xsj(num5[i]);
i++;
dly(1);
}//写第二页第四排 显示确定和否定
xplz();//写频率值
xmm();//写密码
}
/////////////////以上为进入设置程序
void jpsr()
{
uchar a,b,c;
P2=0x0f;
while(P2==0x0f)//判断有没有按下按键
{
;//无意义
}
a=P2;
xzl(0x0d);
P2=0xf0;
while(P2==0xf0)
{
;//无意义
}
b=P2;
c=a+b;
szpd(c);
}
/////////////以上为键盘输入程序
void szpd(uchar c)
{
switch(c)
{
case 0xee:xsj(num1[1]);break;
case 0xde:xsj(num1[2]);break;
case 0xbe:xsj(num1[3]);break;
case 0x7e:tzcx(c);break;//不输出,此为下
case 0xed:xsj(num1[4]);break;
case 0xdd:xsj(num1[5]);break;
case 0xbd:xsj(num1[6]);break;
case 0x7d:tzcx(c);break;//不输出,此为下
case 0xeb:xsj(num1[7]);break;
case 0xdb:xsj(num1[8]);break;
case 0xbb:xsj(num1[9]);break;
case 0x7b:tzcx(c);break;//确定键,跳转到需要的指令
case 0xe7:tzcx(c);break;//是
case 0xd7:xsj(num1[0]);break;
case 0xb7:tzcx(c);break;//否
case 0x77:tzcx(c);break;//否定键,跳转到需要的指令
}
dly(500);
}
void tzcx(uchar z)
{
switch(z)
{
case 0x7e:xplz();break;//为上
case 0x7d:xmm();break;//为下
case 0xe7:xplz();break;//开
case 0xb7:xplz();break;//关
case 0x7b:xplz();break;//确定键,跳转到需要的指令
case 0x77:xplz();break;//否定键,跳转到需要的指令
}
}
///////////跳转程序
void xplz()
{
xzl(0x93);
jpsr();
jpsr();
jpsr();
xsj(num1[10]);
jpsr();
jpsr();
jpsr();
jpsr();
}
///////////////写频率
void xmm()
{
xzl(0x8c);
jpsr();
jpsr();
jpsr();
jpsr();
jpsr();
jpsr();
}
//////////////写密码,六位
void inin()
{
xzl(0x30);
xzl(0x0c);
xzl(0x01);
xzl(0x06);
}
/////////显示初始化
void xzl(uchar xzl)
{
uint a;
cs=1;
sid=1;
a=5;
while(a>0)
{ e=1;
e=0;
a--;
}//前五位确认码
sid=0;
a=3;
while(a>0)
{ e=1;
e=0;
a--;
}//设置后三位rw和rs还有个0
a=4;
while(a>0)
{ xzl<<=1;
sid=CY;
e=1;
e=0;
a--;
}//高四位数据
a=4;
while(a>0)
{ sid=0;
e=1;
e=0;
a--;
}//送四个0
a=4;
while(a>0)
{ xzl<<=1;
sid=CY;
e=1;
e=0;
a--;
}//低四位数据
a=4;
while(a>0)
{ sid=0;
e=1;
e=0;
a--;
}//送四个0
cs=0;
dly(1);
}
void xsj(uchar xsj)
{
uint a;
cs=1;
sid=1;
a=5;
while(a>0)
{ e=1;
e=0;
a--;
}//前五位确认码
sid=0;
e=1;
e=0;
sid=1;
e=1;
e=0;
sid=0;
e=1;
e=0;
a=4;
while(a>0)
{ xsj<<=1;
sid=CY;//把数据腻出送到传送数据
e=1;
e=0;
a--;
}//高四位数据
a=4;
while(a>0)
{ sid=0;
e=1;
e=0;
a--;
}//送四个0
a=4;
while(a>0)
{ xsj<<=1;
sid=CY;
e=1;
e=0;
a--;
}//低四位数据
a=4;
while(a>0)
{ sid=0;
e=1;
e=0;
a--;
}//送四个0
cs=0;
dly(1);
}
void dly(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=112;y>0;y--);
}
补充: 初学,求细化,,,只要指点一下,那里可以用占用空间小的语言代替就可以了。。。多谢