用89c51实现一个电子秤的设计
用ADC0808,89C51,键盘矩阵,LCD1602(128*64),RESPACK-8,我已经用protues进行仿真,可是用keil进行编程时出现了问题,我就编出了一部分,版主帮帮忙,我怎么才能完成,请指点一下。下面是我自己的程序,要实现这个总体的运行,还需要什么啊?LCD显示程序:
void pulse()
{
e=1;e=0;
}
void busy_check(char right)
{
P0=0xff;
if (right==1)
{
P2=0x13; // P2=0x13;
while(!busy);
}
if(right==0)
{
P2=0x0b; //0b
while(!busy);
}
}
void cmd_w(char cmd,char right)
{
busy_check(right);
if (right==1)
P2=0x10;
if (right==0)
{
P2=0x08;
P2=0x08;
}
P0=cmd;
pulse();
}
void data_w(char dat,char right)
{
busy_check(right);
if(right==1)
P2=0x14; //0x14
if(right==0)
P2=0x0c; //0c
P0=dat;
pulse();
}
void lcd_init()
{
uint i;
cmd_w(0x3e+1,0);//显示开关
cmd_w(0xc0+0,0);//修改显示起始行
cmd_w(0xb8+0,0);//修改页地址
cmd_w(0x40+0,0);//修改列地址
cmd_w(0x3e+1,1);
cmd_w(0xc0+0,1);
cmd_w(0xb8+0,1);
cmd_w(0x40+0,1);
for(i=0;i<256;i++)
data_w(0x00,0);
cmd_w(0xb8+4,0);
cmd_w(0x40+8,0);
for(i=0;i<256;i++)
data_w(0x00,0);
for(i=0;i<256;i++)
data_w(0x00,1);
cmd_w(0xb8+4,1);
cmd_w(0x40+8,1);
for(i=0;i<256;i++)
data_w(0x00,1);
}
char chang(char a)
{
char temp,i;
for(i=0;i<8;i++)
{
temp<<=1;
temp|=(a&0x01);
a>>=1;
}
return(temp);
}
键盘服务程序
void key()
{
uchar a;
delay(60);
a=P3&0x0f0;
a=a>>4;
switch(a)
{
case 0:b[ii]=7;break;
case 1:b[ii]=4;break;
case 2:b[ii]=1;break;
case 3:b[10]=10;break; // 清除
case 4:b[ii]=8;break;
case 5:b[ii]=5;break;
case 6:b[ii]=2;break;
case 7:b[ii]=0;break;
case 8:b[ii]=9;break;
case 9:b[ii]=6;break;
case 10:b[ii]=3;break;
case 11:b[10]=11;break; //确认
case 12:b[11]=12;break; //退出
case 13:b[12]=13;break; //模式转换
case 14:b[13]=14;break; //去皮
case 15:b[13]=15;break; //累加
}
if(b[12]==0&&ii<=2&&!(a==3||a==11||a==12||a==13||a==14||a==15))
ii++;
}
模数转换程序
uint ADTransform()
{
uint Result;
START=1; //启动AD转换。
START=0;
while(EOC==0); //等待转换结束。
Result=ADOUT; //读入转换结果。
Result=(uint)(39.2118*Result); //处理运算结果。
return Result;
}