?? gmumain.c
字號:
//******************************************************************************
//***eeprom里存儲的數(shù)據(jù):10高;20低;30倍率;40地址;50撥特率;60起始位;70兩次按下DS差值;80掉電保護
//********************************************************************************
#include <reg51.H>
#include <stdio.h>
#include <intrins.h>
#include <math.h>
#include <stdlib.h>
#include <absacc.h>
#include <string.h>
#define set_value 2
#define left_value 4
#define up_value 8
#define ds_value 16
#define dot_value 2
sbit watchdog = P1^0;
sbit set_key = P1^1;
sbit left_key = P1^2;
sbit up_key = P1^3;
sbit ds_key = P1^4;
sbit int0 = P3^2;
sbit int1 = P3^3;
//**********************************************************************
//**********************************************************************
//**********************************************************************
sbit a0=ACC^0; //定義ACC的位,利用ACC操作速度最快
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;
sbit sda = P3^6;
sbit scl = P3^7;
sbit low_alert = P1^5;
sbit high_alert = P1^6;
//**********************************************************************
//**********************************************************************
//**********************************************************************
code unsigned char tab_value[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
code unsigned char tab_asc2[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0x83,0xff,0xa1,0x86,0x23,0x33,0x89,0xff,0xff,0xff,0xc7,0x2f,0xff,0xff,0x8c,//A---0X41
0x8c,0xff,0xff,0xff,0xff,0xae,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0x83,0x2a,0xa1,0x86,0xff,0xff,0x89,0xff,0xbf,0xff,0xc7,0xff,0xff,0xba,0x8c, //a----0x61
0x8c,0x70,0xbb,0x62,0x2b,0x2c,0xff,0xff,0xe3,0x39,0xff,0xff,0xff,0xff,0xff,0xff,
};
idata unsigned char dis_big_value[7],zxg[6];
idata unsigned char dis_big_point;
idata unsigned char dis_bit;
idata unsigned char menu_exit_flag;
idata unsigned char d_flag;
idata char flash_times;
idata long high_limit; //h
idata long low_limit; //l
idata long offect_value; //d
idata long enlarge_ref; //b
idata unsigned char baut_set; //p
idata unsigned char address_set; //e
idata long power_off_value;
idata long tht_counter;
idata unsigned long zxg_counter;
idata char count_add_flag;
void disvalue_big_asc(unsigned char *temp);
void dis_value(long value_temp,unsigned char dot_add,unsigned char start_add);
unsigned char key_scan(void);
void delay(int delaytime);
void delayms(int delaytime);
void display_bit(unsigned char value_temp,unsigned char flash_bit,unsigned char dot_flag);
void setmenu_hld(unsigned char hld_flag);
void setmenu_b(void);
void setmenu_p(void);
void setmenu_e(void);
void menu_list(void);
//***************************************
void s24(void);
void p24(void);
unsigned char rd24(void);
void wd24(unsigned char dd);
unsigned char read(unsigned int address);
void write(unsigned int address,unsigned char dd);
unsigned int read_int(unsigned int address);
void write_int(unsigned int address,unsigned int dd);
long read_long(unsigned int address);
void write_long(unsigned int address,long dd);
void ini_judge_value(void);
//***************************************
void initial(void)
{
//IE=0x82;//只打開定時器0就可以可,不必打開撥特率發(fā)生器的定時器
IE=0x83; //只打開定時器0就可以可,不必打開撥特率發(fā)生器的定時器
TCON=0x05; //外部中斷打開,并為邊沿觸發(fā)
TMOD=0x20;
SCON=0x50;
TH1=0xf9;
TL1=0xf9;
PCON=0x80;
ES = 0;
TH0=0xB0; //顯示中斷
TL0=0xff;
TR0=1;
dis_big_point=1;
dis_bit = 0;
dis_big_value[0]=0xff;
dis_big_value[1]=0xff;
dis_big_value[2]=0xff;
dis_big_value[3]=0xff;
dis_big_value[4]=0xff;
dis_big_value[5]=0xff;
delayms(5);
ini_judge_value();
zxg_counter = 0;
high_alert = 1;
low_alert = 1;
}
void int_ex_0() interrupt 0
{
unsigned char i;
i = int1;
if(i==1){
zxg_counter = zxg_counter + 1;
count_add_flag = 1;
}
else {
zxg_counter = zxg_counter-1;
count_add_flag = 2;
}
if(zxg_counter<0) zxg_counter=0;
}
void inttime0() interrupt 1
{
TH0=0xdd; //這個是顯示中斷,每次先置顯示初值
TL0=0x00; //溢出很快的
dis_big_point = 1;
dis_big_point = dis_big_point<<dis_bit;
P0 = 0;
P2 = dis_big_value[dis_bit];
P0 = dis_big_point;
dis_bit = dis_bit + 1;
if (dis_bit > 5) dis_bit = 0;
watchdog = 0;
watchdog = 1;
}
void main(void)
{
unsigned char temp,j;
unsigned char ds_flag;
unsigned char power_off_flag;
long display_sub_value;
long display_temp;
long zxg_temp_value;
long zxg_ttt;
long zxg_hhh;
long i;
long qishi_1,qishi_2;
ds_flag = 0;
power_off_flag=0;
zxg_counter = 0;
initial();
qishi_1 = offect_value;
zxg_temp_value = power_off_value;
while(1){
qishi_2 = read_long(60);
if(qishi_2 != qishi_1){write_long(60,qishi_2);d_flag = 1;}
else d_flag = 0;
if(!power_off_flag){
power_off_flag = 1;
tht_counter = zxg_temp_value;
zxg_ttt = zxg_temp_value;
}
if(power_off_flag){
if(d_flag == 1){
d_flag = 0;
// write_long(80,0);
tht_counter = zxg_counter*(zxg[3]*100+zxg[2]*10+zxg[1]) + qishi_2*10;
}
else
tht_counter = zxg_counter*(zxg[3]*100+zxg[2]*10+zxg[1]) + zxg_ttt;
}
if(tht_counter > 99900 || tht_counter<0) tht_counter=0;
if(count_add_flag == 2) dis_big_value[5] = 0xbf;
else dis_big_value[5] = 0xff;
if(zxg_temp_value != tht_counter)
{
zxg_temp_value = tht_counter;
write_long(80,zxg_temp_value);
}
if((tht_counter/10)>high_limit) high_alert = 0;
else high_alert = 1;
if((tht_counter/10)< low_limit) low_alert = 0;
else low_alert = 1;
temp = key_scan();
if(temp == set_value) menu_list();
if(temp == ds_value){
if(ds_flag == 0){
ds_flag = 1;
display_temp = 0;
zxg_counter = 0;
}
else {
ds_flag = 0;
zxg_counter = 0;
for(j = 0; j<5; j++){
for(i = 0;i <100; i++){
disvalue_big_asc(" ");
delay(10);
}
for(i = 0;i <100; i++){
dis_value(display_temp ,3,1);
delay(10);
}
}
write_long(70, display_temp); //l
}
}
if(temp== left_value){
display_sub_value = read_long(70);
dis_value(display_sub_value,3,1);
delayms(500);
}
if(ds_flag == 0) dis_value(tht_counter ,3,1);
else {//ds_flag=1;
if(count_add_flag == 1){
count_add_flag = 0;
display_temp = zxg_counter*(zxg[3]*100+zxg[2]*10+zxg[1]);
dis_big_value[5] = 0xff;
//display_sub_value = display_temp;
}
if(count_add_flag == 2){
count_add_flag = 0;
display_temp = zxg_counter*(zxg[3]*100+zxg[2]*10+zxg[1]);
dis_big_value[5] = 0xbf;
//display_sub_value = display_temp - tht_counter;
}
dis_value(display_temp ,3,1);
// delayms(700);
}
}
}
void ini_judge_value(void)
{
high_limit = read_long(10); //h
low_limit = read_long(20); //l
enlarge_ref = read_long(30); //b
address_set = read(40); //e
baut_set = read(50); //p
offect_value = read_long(60); //d
power_off_value = read_long(80);
zxg[1] = enlarge_ref%10;
enlarge_ref = enlarge_ref/10;
zxg[2] = enlarge_ref%10;
enlarge_ref = enlarge_ref/10;
zxg[3] = enlarge_ref%10;
enlarge_ref = enlarge_ref/10;
zxg[4] = enlarge_ref%10;
enlarge_ref = enlarge_ref/10;
zxg[5] = enlarge_ref%10;
}
void disvalue_big_asc(unsigned char *temp)
{
unsigned char tempp[7];
unsigned char i;
for(i=1;i<7;i++)
{
tempp[i]=0xff;
tempp[i]=tab_asc2[*temp];
temp++;
}
dis_big_value[0] = tempp[6];
dis_big_value[1] = tempp[5];
dis_big_value[2] = tempp[4];
dis_big_value[3] = tempp[3];
dis_big_value[4] = tempp[2];
dis_big_value[5] = tempp[1];
}
void dis_value(long value_temp,unsigned char dot_add,unsigned char start_add)
{
unsigned char temp[6];
unsigned char tht_temp;
long thttht;
char i;
char j;
thttht = value_temp;
tht_temp = dot_add;
temp[1] = tab_value[thttht%10]; //個位
thttht=thttht/10;
temp[2] = tab_value[thttht%10]; //十位
thttht=thttht/10;
temp[3] = tab_value[thttht%10]; //百位
thttht=thttht/10;
temp[4] = tab_value[thttht%10]; //千位
thttht=thttht/10;
temp[5] = tab_value[thttht%10]; //萬位
switch(tht_temp){//點亮小數(shù)點;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -