标题:用89c51实现一个电子秤的设计
取消只看楼主
D调的happy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-6-1
 问题点数:0 回复次数:0 
用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;
}
搜索更多相关主题的帖子: void 
2013-06-01 22:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-414222-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046824 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved