打印

求自动转换量程电压表程序,我的程序仿真不出结果啊

[复制链接]
1646|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小弟初学者,改了一下别人的程序。就是加了一个自动转 换量程的程序,没有语法错误,但是就是仿真不出结果,求指教!程序如下:


#include<reg52.h>
#include<absacc.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

#define TRUE  1
#define FALSE 0

#define disp_dot  0x2e
#define disp_V   0x56

#define disp_W   0x57

#define data1602 P0               //定义LCD1602数据接口

uchar code disp_code[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

ulong voltage_data;
ulong ad;
void disp_data(void);


sbit rs1602 = P2^0;                  
sbit rw1602 = P2^1;
sbit e1602  = P2^2;

sbit SDI     = P2^0;
sbit CONV  = P2^5;
sbit SCK    = P2^4;
sbit SDO   = P2^3;

sbit RS_SWH_1=P3^7;

sbit RS_SWH_2=P3^6;

sbit LED=P3^5;       //超量程标示



/*******************************************************************************
函数名称:delay(uchar n)
功能描述:延时
调用函数:
写入值  :n
返回值  :
*******************************************************************************/

void delay(uchar n)
{
uchar i,j;
for(i=n;i>0;i--)
for(j=250;j>0;j--);
}


/******************************************************************************
函数名称: write_1602(uchar wdata)
功能描述: LCD1602写入数据
调用函数: delay()
写入值  : wdata
返回值  :   
******************************************************************************/

void write_1602(uchar wdata)
{
data1602 = wdata;
rs1602   = 1;
rw1602   = 0;
e1602    = 1;
delay(4);
e1602    = 0;
}

/******************************************************************************
函数名称: write_order(uchar odata)
功能描述: LCD1602写命令
调用函数: delay()
写入值  : odata
返回值  :   
******************************************************************************/

void write_order(uchar odata)
{
data1602 = odata;
rs1602   = 0;
rw1602   = 0;
e1602    = 1;
delay(4);
e1602    = 0;
}

/******************************************************************************
函数名称: init_1602()
功能描述: LCD1602初始化
调用函数: write_order(uchar odata)
写入值  :
返回值  :   
******************************************************************************/

void init_1602(void)
{
write_order(0x01);                                            // 清屏幕
write_order(0x38);                                                // 数据长度为8位,双行显示,5*7字符
write_order(0x0c);                                                // 打开显示开关,光标不闪烁
write_order(0x06);                                                // 地址计数递增,显示屏不移动

}

******************************************************************************
函数名称: position(uchar row,uchar colum)
功能描述: LCD1602写位置
调用函数: write_order()
写入值  : row,colum
返回值  :   
******************************************************************************/
position(uchar row,uchar colum)
{
uchar pos;
if(row==1)
   {
         pos=0x80+colum;
   }
else
   {
     pos=0xC0+colum;   

   }
write_order(pos);
}


/******************************************************************************
函数名称: write_byte(uchar *s)
功能描述: LCD1602字符串
调用函数: write_1602()
写入值  : *s
返回值  :   
******************************************************************************/

write_byte(uchar *s)
{
for(;*s!='\0';s++)
   {
     write_1602(*s);
   }
}

/******************************************************************************
函数名称: read_adc_ch0()
功能描述: 读LTC1865通道0的AD值
调用函数:
写入值  :
返回值  :   
******************************************************************************/

void read_adc_ch0(void)
{
uchar j;
SDO = 1;
CONV = 1;                                       // 开启AD转换
SCK  = 1;
CONV = 0;
SCK  = 0;
for(j=15;j>0;j--)
   {
    SCK = 0;
        if(j == 15)
          {
            SDI = 1;
          }
        if(j == 14)
          {
            SDI = 0;
          }
        if(SDO==1)
          {
           voltage_data = voltage_data + 1;
          }   
        voltage_data <<= 1;
        SCK = 1;
   }
  CONV = 1;
  SCK  = 1;
}

/******************************************************************************
函数名称: disp_voltage()
功能描述: 显示电压
调用函数: read_adc_ch0(),write_1602(),write_order()
写入值  :
返回值  :   
******************************************************************************/

void disp_voltage(void)
{
ad = 0;
ad=voltage_data;

if(ad>4)
{
         if(RS_SWH_1==0&&RS_SWH_2==0)
         {
                 LED=1;

         }                                             
         else
         {       RS_SWH_1=0;
                  RS_SWH_2=0;

                 

         }

}
else
{
         if(ad>0.04)
                 {
                         if(ad>0.4)
                         {
                                disp_data();
                         }
                         else
                         {
                                 RS_SWH_1=0;
                                 RS_SWH_2=1;
                         }



                 }
                 else
                 {
                         if(ad>0.004)
                         {
                                 RS_SWH_1=1;
                                 RS_SWH_2=0;

                         }
                         else
                         {
                                 RS_SWH_1=1;
                                 RS_SWH_2=1;

                         }
                 }


}

read_adc_ch0();

voltage_data = (voltage_data*5000)/65535;                 // AD?????
if(RS_SWH_1==1)
{
        if(RS_SWH_2==1)
        {
                voltage_data=voltage_data/10;

        }
        else
        {
                ;
        }

}
else
{
        if(RS_SWH_2==1)
        {
                voltage_data=voltage_data*100;

        }
        else
        {
                voltage_data=voltage_data*10;

        }

}


write_order(0x89);
write_1602(disp_code[voltage_data/1000]);
write_order(0x8b);
write_1602(disp_code[voltage_data%1000/100]);
write_order(0x8c);
write_1602(disp_code[voltage_data%1000%100/10]);
write_order(0x8d);
write_1602(disp_code[voltage_data%1000%100%10]);
}



/******************************************************************************
函数名称: disp_data()
功能描述: 显示电压电流
调用函数: write_1602(),position(),disp_voltage(),disp_current()
写入值  :
返回值  :   
******************************************************************************/

void disp_data(void)
{
position(1,10);
write_1602(disp_dot);
position(1,15);
write_1602(disp_V);


disp_voltage();

}

/******************************************************************************
函数名称: main()
功能描述: 主函数
调用函数:
写入值  :
返回值  :   
******************************************************************************/

void main(void)
{
  RS_SWH_1=0;
  RS_SWH_2=0;
  LED=0;


init_1602();
position(1,0);
write_byte("VOLTAGE=");

while(1)
   {
        disp_data();
   }
}

相关帖子

沙发
长风破浪119|  楼主 | 2013-8-10 22:04 | 只看该作者
没人回复?我先占个沙发,求高手

使用特权

评论回复
板凳
tzq3434hr| | 2014-2-15 22:52 | 只看该作者
走过路过,过来看啊可能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝