打印

帮我看以下这个程序

[复制链接]
1700|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eleven1314|  楼主 | 2007-3-20 11:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <math.h>
#include <string.h>
#include <STDIO.H>
#include <absacc.h>
#include "fileshow.h"

extern volatile unsigned char whole_state=0;//目前系统状态,0为测量,1为输入密码状态,2为设定状态,3为标定状态 ,4为系统参数设定
extern volatile unsigned char whole_display_state=0;//为显示状态下的自状态 0流量状态,1流量热能,2掉电状态,3流量热量报表1,4流量热量报表2
extern volatile unsigned char whole_currentchannel=0;//目前系统所处的通道,最大为CHANNEL_MAX
extern volatile unsigned int  whole_historydatacursor=0;//在测量状态下,显示历史数据的指针
extern volatile unsigned char whole_setcursor=0;//目前正在设定参数的指针00开始
extern volatile unsigned char whole_setnumber=0;//目前正在设定的参数编号
extern volatile unsigned char print_buffer[9];
extern volatile bit whole_lcdclear=TRUE;
extern volatile unsigned char whole_setbuffer[3]={0,0,0};//设定的参数临时存储器
extern volatile unsigned char whole_time[TIME_BLOCK]={0,0,0,0,0,0,0};//存储系统的瞬时时间
                            //year,6;day,5;month,4;date,3;hour,2;minute,1;second,0;
/////////////////////////////////////////////////////////////////////
//外数据空间数据 1024b    使用前先 STARTUP。ASM进行设置
//STARTUP。ASM   是由   STARTUP。A51  改后缀然后拷贝到本目录下,再加入到项目中
//通道数据全局变量
  // 大小等于MAX×28   最大5×28= 140 地址范围是0000-008B
static volatile float xdata whole_data[CHANNEL_MAX][7] _at_ 0x00;
static volatile float xdata whole_data2[2];
float xdata gd_t[CHANNEL_MAX],gd_p[CHANNEL_MAX],gd_q[CHANNEL_MAX],gd_h[CHANNEL_MAX],gd_tq[CHANNEL_MAX],gd_th[CHANNEL_MAX];
unsigned char xdata temp[1];
int xdata  i;
nsigned   char xdata Address=0x11;//串行通讯地址
static int idata main_timecount=0; //计时时使用



////////////////////////////////////////////////////////////////////
//全局外部函数
extern void time_init(void);
extern void time_readclock(unsigned char current_clock[]);
extern void key(void);
extern void eeprom_read(unsigned int e_address,unsigned char r_data[],unsigned char r_long);
extern void eeprom_write(unsigned int e_address,unsigned char e_data);
///////////////////////////////////////////////////////////////////////
//本程序使用的
void lcd_display(void);
void lcd_init(unsigned int tempi);
void calculate_data(unsigned char channel);
void db2str(char * cBuf,int dpoint,double db,int kd) ;
void lcd_delayus(unsigned char us);
void lcd_delayms(unsigned char ms);
unsigned char xdata  dec_t[3],dec_p[3],dec_q[3],dec_h[3],dec_tq[3],dec_th[3];

void main()
{
  key ();
  lcd_display();
  }
void lcd_delayus(unsigned char us)       //延时us的程序 ;
{  
   us=us/8;
   for(; us>0;us--)
     {;}
}

void lcd_delayms(unsigned char ms)       //延时ms的程序;
{
  register unsigned int i;
  for(;ms>0;ms--)
   {
      for(i=125;i>0;i--)
        {;}
    }
}


void lcd_write_asc(unsigned int asc_code)
{
   lcd_writedata(asc_code,DATA_WRITE);
   lcd_delayus(72);
}

void lcd_write_china(unsigned int sino_code)
{
    unsigned char temp;
    temp=(char)((sino_code>>8)&0x00ff);
    lcd_writedata(temp,DATA_WRITE);
    lcd_delayus(72);//72US
    temp=(char)(sino_code&0x00ff); //取后八位
    lcd_writedata(temp,DATA_WRITE);
    lcd_delayus(72);//72us
}
void lcd_writebyte(unsigned char w_data)
{
   register unsigned char i;
   for (i=0;i<8;i++)
       {
         LCD_SCLK=LOW;
         LCD_IO=(bit)(w_data&0x80);
         LCD_SCLK=HIGH;
         w_data=w_data<<1;
       }
}
//ww_data 是要写入的数据,w_cmd=DATA_WRITE(写入数据)或是CMD_WRITE(写入命令)
void lcd_writedata(unsigned char ww_data,unsigned char w_cmd)
{
   unsigned char temp;
   P2=LCD_CS;//片选
   lcd_writebyte(w_cmd);
   temp=ww_data&0xf0;
   lcd_writebyte(temp);
   temp=ww_data<<4;
   temp=temp&0xf0;
   lcd_writebyte(temp);
   P2=LCD_STOP;
}

void lcd_setlocation(unsigned char xy)
{
   lcd_writedata(xy,CMD_WRITE);
   lcd_delayus(72); //72us
}
extern void lcd_display(void);
{  unsigned char  lcd_high,lcd_low;
   unsigned char i,j;
   unsigned char decimal;
   float temp2;
   float tempfloat;
   unsigned char temp[4];
   if(whole_lcdclear==TRUE)
     {  whole_lcdclear=fulse;
        lcd_writedata(0x01,CMD_WRITE);
        lcd_delayms(6);
      }
    lcd_writedata(0x0c,CMD_WRITE);
    delayus(72);
    switch(whole_display_state)
      {
       case0:
            { lcd_setlocation(LCD_FIRST);
              lcd_write_china(lcd_china_ll[0]);
              lcd_write_china(lcd_china_ll[1]);
              lcd_write_asc(lcd_asc_kb[0]);
              lcd_write_asc(lcd_asc_kb[0]);
              lcd_write_asc(lcd_asc_lldw[0]);
              lcd_write_asc(lcd_asc_lldw[1]);
              lcd_write_asc(lcd_asc_lldw[2]);
              lcd_setlocation(LCD_SECOND
 eeprom_readEEPROM_ORIGIN+whole_currentchannel*EEPROM_SIZE*EEPROM_NUMBER+10*EEPROM_SIZE+1,temp,1);

               decimal=(temp[0]>>4)&0xff;
tempfloat=whole_data[whole_currentchannel][0];
               for(i=decimal;i>0;i--)
                  {tempfloat=tempfloat*10.0;
                   }
                 for(i=4;i>i--)
                   {temp2=1;
                    for(j=0;j<(i-1);j++)
                       {
                        temp2=temp2*10.0;
                        }
                     lcd_low=tempfloat/temp2;
                     if(lcd_low>=10)&&(i==4)
                       { goto text0;}
                       tempfloat=tempfloat-temp2*lcd_low;
                       if(i==decimal)
                         {

                          lcd_write(lcd_dian[8*8]);
                          lcd_write(lcd_sz[lcd_low]);



                          }
                      else{ lcd_write(lcd_sz[lcd_low]);  }
                   }
              text0:for(i=4;i>0;i--)
                      {
                  if( i==decimal)
               {lcd_write(lcd_dian[8*8]);
               lcd_write(lcd_sz[5][72]);

                         }
                        else
                        {        lcd_write(lcd_sz[5][72]);
                        } 
                         }    
             }//case0  over

         case1:
              { lcd_setlocation(LCD_FIRST);
                lcd_write_china(lcd_china_wd[0]);
                lcd_write_china(lcd_china_wd[1]);
                lcd_write_asc(lcd_asc_kb[0]);
                lcd_write_asc(lcd_asc_kb[0]);
                lcd_write_asc(lcd_asc_wddw[0]);
eeprom_read(EEPROM_ORIGIN+whole_currentchannel*EEPROM_SIZE*EEPROM_NUMBER+10*EEPROM_SIZE+2,temp,1);

               decimal=(temp[0]>>4)&0xff;
               tempfloat=whole_data[whole_currentchannel][1];

                for(i=decimal;i>0;i--)
                  {tempfloat=tempfloat*10.0;
                   }
                 for(i=4;i>i--)
                   {temp2=1;
                    for(j=0;j<(i-1);j++)
                       {
                        temp2=temp2*10.0;
                        }
                     lcd_low=tempfloat/temp2;
                     if(lcd_low>=10)&&(i==4)
                       { goto text1;}
                       tempfloat=tempfloat-temp2*lcd_low;
                       if(i==decimal)
                         {
                               lcd_write(lcd_dian[8*8]);
                              lcd_write(lcd_sz[lcd_low]);



                          }
                        else{
                              lcd_write(lcd_sz[lcd_low])
                             }
                     }
                text1:for(i=4;i>0;i--)
                      {
                       if( i==decimal)
                         {  lcd_write(lcd_dian[8*8]);
                          lcd_write(lcd_sz[5][72]);
                          }
                        else
                            {
                             lcd_write(lcd_sz[5][72]);
                             }
                        }

                   }// case1 over

           case2:
                 {lcd_setlocation(LCD_FIRST);
                  lcd_write_china(lcd_china_yl[0]);
                  lcd_write_china(lcd_china_yl[1]);
                  lcd_write_asc(lcd_asc_kb[0]);
                  lcd_write_asc(lcd_asc_kb[0]);
                  lcd_write_asc(lcd_asc_yldw[0]);
                     lcd_write_asc(lcd_asc_yldw[1]);
                  lcd_write_asc(lcd_asc_yldw[2]);

                 eeprom_read(EEPROM_ORIGIN+whole_currentchannel*EEPROM_SIZE*EEPROM_NUMBER+10*EEPROM_SIZE+2,temp,1);

               decimal=(temp[0]>>4)&0xff;
               tempfloat=whole_data[whole_currentchannel][3];

                   tempfloat=tempfloat-0.101325;
                   for(i=decimal;i>0;i--)
                     {tempfloat=tempfloat*10.0;
                      }
                 for(i=4;i>i--)
                   {temp2=1;
                    for(j=0;j<(i-1);j++)
                       {
                        temp2=temp2*10.0;
                        }
                     lcd_low=tempfloat/temp2;
                     if(lcd_low>=10)&&(i==4)
                       { goto text2;}
                       tempfloat=tempfloat-temp2*lcd_low;
                       if(i==decimal)
                         {

                           lcd_write(lcd_dian[8*8]);
                           lcd_write(lcd_sz[lcd_low]);

                          }
                        else{
                             lcd_write(lcd_sz[lcd_low])
                             }
                     }
              text1:for(i=4;i>0;i--)
                      {
                       if( i==decimal)
                         {
                           lcd_write(lcd_dian[8*8]);
                           lcd_write(lcd_sz[5][72]);
                           }


                        else
                            {     lcd_write(lcd_sz[5][72]);
                             }
                        }

                   }// case2 over

           }     //SWICH OVER
   }


相关帖子

沙发
ayb_ice| | 2007-3-20 13:21 | 只看该作者

随便说说

  声明的外部变量不能有初始化,自己修改一下就可以了...

使用特权

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

本版积分规则

10

主题

19

帖子

0

粉丝