⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qq.c

📁 为一个油量测量系统的源程序,可以对任意形状的油箱进行设置匹配
💻 C
📖 第 1 页 / 共 3 页
字号:
//#define   clock
//#define   remind
//#define   clear
//#define   check

#define xingyan

#ifdef xingyan
#include<inc/absacc.h>
#include<inc/ctype.h>
#include<inc/stdio.h>
#include<inc/string.h>
#include<inc/stdlib.h>
#include<inc/math.h>
#include<inc/intrins.h>
#include<inc/stdarg.h>
#include<inc/setjmp.h>
#include<inc/reg52.h>
#else
#include<absacc.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<intrins.h>
#include<stdarg.h>
#include<setjmp.h>
#include<reg52.h>
#endif
	
#define  uchar  unsigned   char     
#define  uint   unsigned   int
#define  ulong  unsigned   long

#define  null      0      
      
#define maxdata 999                                   /*加减变量的最大数*/
                                                                  
                                                        
#define  hold_data_address                500         /*锁存数据地址,一个字*/
#define  gas_max_address                  502         /*存储最大数值的地址,一个字节*/
#define  gas_min_address                  504         /*最小值地址,一个字节*/
#define  gas_zero_address                 0           /*零点时候的频率存储所在的地址, 一个字*/
#define  gas_set_address                  4           /*设置所在的起始地址,一个字节的升数,一个字的频率值,依次排列*/
#define  f_begin_address                  0           /*设置中的频率的起始地址,一个字节的升数,一个字的频率值,依次排列*/
#define  gas_set_all                      510
                                              
#define  hold_flash_time                  1000

#define  esc                          0
#define  menu_main                   11
#define  menu_max                     1                                                                                              
#define  menu_zero                    13
#define  menu_min                     2
#define  menu_set                     3
#define  zero_zero                   55

#define  zero_zero_set               6

#define  t0_int_index               1                 /*中断号*/
#define  t0_int_reg_index           1                 /*中断所使用的寄存区*/

#define  circle_init_t0             max_data                /*循环测量的次数*/
#define  circle_init                min_data
#define  max_f                      2000
#define  max_l                      2000




#define  tmod_init                  1                 /*初始化参数*/    
#define  tl0_init                   1
#define  tl1_init                   1
#define  th0_init                   1
#define  th1_init                   1

#define  scon_init                 1
#define  power_on_init               1

#define  display_reflush            1
#define  data_reflush               2




#define  key                       P2

#define  alt              223                   /*按键*/
#define  hold             239
#define  mode             254
#define  up               253
#define  down             251
#define  set              247

#define  mode_led         P00                 /*指示灯名称*/
#define  run_led          P01
#define  eror_led         P02
#define  current_led      P03
#define  hold_led         P04
#define  min_led          P07

#define  led_on           0                    /*指示灯开关*/
#define  led_off          1

#define  true             1
#define  false            0


#define  display1                         0x9f
#define  display2                         0x25
#define  display3                         0x0d
#define  display4                         0x99
#define  display5                         0x49
#define  display6                         0x41
#define  display7                         0x1f
#define  display8                         0x01
#define  display9                         0x09
#define  display0                         0x03
#define  displaym                         0x13
#define  displayn                         0x0d5
#define  displayx                         0x93 
#define  displayi                         0x0f
#define  displaye                         0x61
#define  displayt                         0x73       
#define  displayr                         0x0f5   
#define  dis_off                          0x0ff



#define x25045_cs     P10		/*p10*/
#define x25045_sck    P11		/*p11*/
#define x25045_si     P12		/*p12*/
#define x25045_so     P13		/*p13*/
#define x25045_wp     P14		/*p14*/




#ifdef   clock
void    t2_init();
void    do_clock();
void    clock_dis();
#endif 


#ifdef   remind
  #ifndef  clock
  void    t2_init();
  #endif
void    do_remind();
#endif

#ifdef   check
void  do_check();
#endif

#ifdef   clear
void     do_clear();
#endif

#ifdef  clock
#define tt
#else
  #ifdef    remind
  #define tt
  #endif
#endif
  




/***********************x25045***************************************/
union twowords_bytes{ulong twowords;struct{uchar b0;uchar b1;uchar b2;uchar b3;}bytes;};	
union word_bytes{uint word;struct{uchar b0;uchar b1;}bytes;};

void x25045_init();                                     /*看门狗初始化*/                      
void x25045_feed();                                     /*喂狗*/

void x25045_write_word(uint address,uint indata);      /*写和读某个地址的一个字的数据*/
uint x25045_read_word(uint address);

void x25045_wrbt(uint address,uchar indata);           /*写和读某个地址的一个字节的数据*/
uchar x25045_rdbt(uint address);


void  x25045_outb(uchar indata);
void jiance_data();
void init();

/*********************************************************************************/
void bin_bcd(uint tem);               /*二进制转换为bcd码*/
void bcd_dis_four();                  /*四位bcd码转换为四位显示数据码*/
uchar bcd_dis_one(uchar bcd);         /*一位bcd码转换为一位显示数据码*/

void delay(uint delaytime);           /*延时子程序*/  
void init();                          /*初始化程序*/

void  display();                     /*显示程序--显示缓冲区内的数据*/
void warn();                         /*报警;指示灯程序*/	
void dis();


/***************键盘服务方面的程序**************************************/
void  key_mode_srv();               /*模式设定*/
void  key_alt_srv();                /*当前值,锁存值转换程序*/
void  key_hold_srv();               /*当前值锁存程序*/
void  key_srv();                    /*键盘服务程序*/
void  key_data();                   /*键盘数据扫描程序*/
void  display_init();               /*进入按键服务程序后的显示初始化*/
void  display_srv();                /*显示服务程序*/     
                             
void menu_main_dis(); 
 
/***************************全局变量定义********************************/
uchar    dispdata[4];
uint     chiefdata;		            /*主数据,chiefdata=count_image/circle_init */
ulong    count;                     /*频率计数存储单元,累计记录circle_init 次*/                     
ulong    count_image;               /*存储单元映象,count累计记录circle_init 次满后放入该映象*/    
uchar    circle;                    /*频率计数周期循环次数标志,circle=circle_init,每记录一次减一*/


uchar    min_data;   
uchar    max_data;              
uchar    reflush;                    
uchar    menu;
uint     temp;
uchar    signal;
uchar    key_data_update;
uchar    times;

uchar    index;

uint     globe;

#ifdef tt
uchar hour;
uchar min;
#endif


/****************************************************************/
/**                                                            **/
/**                   函数 定义区                              **/                
/****************************************************************/



/*********************延时程序开始***********************************/
void delay(uint delaytime) 		/*延迟dealytime个毫秒*/
{uchar j;
  while(delaytime--) 
    {	x25045_feed();
	for (j=0;j<125;j++)
	{;}
    }
}	
/***延时程序结束******/
            
        
        

/*二进制转换为bcd码模块开始++++++++++++++++++++++++++++++++++++++++++*/
void bin_bcd(uint tem)	/*二进制转换为四位bcd码*/
{
x25045_feed();	
dispdata[3]=tem/1000;			/*高位*/
tem=tem-dispdata[3]*1000;
dispdata[2]=tem/100;
tem=tem-dispdata[2]*100;
dispdata[1]=tem/10;
dispdata[0]=tem%10;			/*低位*/
}
/*二进制转换为bcd码模块结束++*/



/*bcd码转换为显示数字模块开始++转换一个++++++++++++++++++++++++++++++++++++++++*/
uchar bcd_dis_one(uchar bcd)
{
	x25045_feed();	
	 switch (bcd)
     {
      case 0:  bcd=display0; break;
      case 1:  bcd=display1; break;
      case 2:  bcd=display2; break;
      case 3:  bcd=display3; break;
      case 4:  bcd=display4; break;
      case 5:  bcd=display5; break;
      case 6:  bcd=display6; break;
      case 7:  bcd=display7; break;
      case 8:  bcd=display8; break;
      case 9:  bcd=display9; break;
      default: bcd=dis_off;  break;
     }
     return(bcd);
}

/*bcd码转换为显示数字模块结束*/




/*bcd码转换为显示数字模块开始++转换四个++++++++++++++++++++++++++++++++++++++++*/

void bcd_dis_four()
{
dispdata[0]=bcd_dis_one(dispdata[0]);
dispdata[1]=bcd_dis_one(dispdata[1]);
dispdata[2]=bcd_dis_one(dispdata[2]);
dispdata[3]=bcd_dis_one(dispdata[3]);   
}

/*bcd码转换为显示数字模块结束*/




/******************显示程序开始***********************************************/

void display()              /*显示缓冲区的数据*/
{
uchar i;
x25045_feed();	
for (i=0;i<9;i++)
{
SBUF=255;
while (!TI)  ;
TI=0;
}
SBUF=dispdata[3];
while (!TI)  ;
TI=0;
SBUF=dispdata[2];
while (!TI)  ;
TI=0;
SBUF=dispdata[1];
while (!TI)  ;
TI=0;
SBUF=dispdata[0];
while (!TI)  ;
TI=0;
}


void dis()                /*将chiefdata中的数据变换后显示*/      

{
x25045_feed();	
bin_bcd(chiefdata);
bcd_dis_four();
display();
}


/**显示程序结束***********/


/*初始化开始++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

void init()		
{
 x25045_feed();		
 TMOD = 0x51;;              /*定时器t1作为计数,t0作为定时*/
 TL0  = 0; 
 TL1  = 0;
 TH0  = 0x00;
 TH1  = 0;
 
 menu=0;
 
 
 circle=circle_init_t0;
 
 SCON=0x00;
 ET0=1;
 ET1=0;
 ES=0;
 EA=1;
 TR0=1;
 
}

#ifdef tt

void t2_init()
{ 




}

#endif
/***********初始化结束******/




/*中断服务程序开始++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

T0_int()  interrupt t0_int_index  using  t0_int_reg_index
 {

uint irol;
x25045_feed();	
TR1=0;                                                      /*计数停止,已备读入t1数据*/
irol = TH1;
irol = _irol_(irol,8);
irol = irol + TL1;
count +=irol; 
TH1 = 0;
TL1 = 0;                                
circle--;
   if (!circle)
   {
   circle=circle_init_t0;	
   count_image = count;
   count = 0;
   reflush = data_reflush;
   }

TH0  = 0x00;
TL0  = 0;
TR1=1;

}

#ifdef tt

T2_int()  interrupt 6  using  2
{




}

#endif



/*中断服务程序结束***********/







/*报警处理模块开始++++++++++++++++++++++++++++++++++++++++++++++++++*/
void warn()				/*报警;指示灯程序*/	
{
if(chiefdata<=min_data*10)
min_led = led_on;

else 
min_led = led_off;			
 
run_led = led_on;
mode_led = led_off;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -