?? 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 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 + -