📄 qq.c
字号:
//#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 + -