?? c_code.c
字號:
#include <reg51.h>
#include <math.h>
#include <string.h>
#include <intrins.h>
#include <stdio.h>
#include "c_code.h"
#define Graphic 1
#define TXT 0
unsigned char code str_USB[];
unsigned char code str2[];
unsigned char code str3[];
unsigned char code str4[];
unsigned char code str5[];
unsigned char i;
unsigned int ihexs, iflag[3];
unsigned char disp_buffer[5];
extern unsigned int ad_convert();
unsigned char C;
void hextobcd(unsigned int hexs,unsigned char j);
void deoutlier(unsigned int x[4], unsigned int x0[4][2], char Bound);
void calibration(unsigned int x[4]);
void LcmDynWriteData(unsigned char x, unsigned char y, unsigned char CH_No,unsigned int ihex);
unsigned int new_value[4];
unsigned int value[4][2];
unsigned char menu_item;
void main(void)
{
menu_item = 0;
do
{
for(i = 0;i < 3; i++)
iflag[i] = 0; //程序跳轉標志
ACC = 0x01; //MOV A, #01h
Regstr = ACC; //MOV 30h, A
PortA000 = ACC; //MOV DPTR, #A000h MOV @DPTR, A
FPWR = 0; //CLR P1.5
ACC = Port6000;
ACC = ACC & 0x80;
if(ACC != 0x80) //電源POWER鍵按下
{
ACC = Port6000;
ACC = ACC & 0x80;
if(ACC != 0x00)
iflag[0] = 1;
else
{
FPWR = 1;
LcmInit();
LcmClear(0); //設置屏幕
LcmWriteCommand(0x9f);
PutString(0,0,str_Welcome); //顯示歡迎屏
Delay(10); //延遲并轉入菜單屏
PortA000 = 0x04;
ACC = Port6000;
ACC = ACC & 0x01;
if(ACC != 0x01) //檢測ESC鍵按下,則轉測量Start
{
//菜單共5條:日期、時間、量程、報警上限、報警下限,故0 <= menu_item <= 4
ACC = Port6000;
ACC = ACC & 0x10;
if(ACC == 0x10)
{
if(menu_item != 4)
menu_item ++; //若按Down鍵,menu_item ++,但其最大值為4
else
menu_item = 4;
}
ACC = Port6000;
ACC = ACC & 0x20;
if(ACC == 0x30)
{
if(menu_item != 0)
menu_item --; //若按UP鍵,menu_item --,但其最小值為0
else
menu_item = 0;
}
switch(menu_item) //下面每個設置必須按Enter確認
{
case 0: //日期設置
break;
case 1: //時間設置
break;
case 2: //量程設置
break;
case 3: //上限設置
break;
case 4: //下限設置
break;
}
ACC = Port6000;
ACC = ACC & 0x02;
if(ACC == 0x02) //校零鍵按下
{
}
}
}
}
else
{
ACC = Port6000;
ACC = ACC & 0x40;
if(ACC != 0x00) //交流電插入
{
FPWR = 1;
LcmInit();
LcmClear(0);
LcmWriteCommand(0x9f);
PutString(0,0,str_Charge);
Delay(1);
while(1)
{
AD_A0 = 1;
AD_A1 = 1;
ad_convert();
hextobcd(ihexs,5); //電源電壓轉換
//顯示
FCHRG = 1; //沒有寫完
}
iflag[1] = 1;
}
if(FUSB == 1) //USB插入
{
LcmInit();
LcmClear(0);
LcmWriteCommand(0x9f);
while(FUSB == 1)
{
//USB服務程序
PortA000 = 0x08;
ACC = Port6000;
ACC = ACC & 0x08;
if(ACC == 0x08) //Send鍵按下
{
}
}
Delay(1);
FPWR = 0;
iflag[2] = 1; //關機
}
if(iflag[1] == 0 || iflag[2] == 0) //沒有鍵按下
{
iflag[1] = 0;
iflag[2] = 0;
FPWR = 1; //置P1.5 = 1
LcmInit();
LcmClear(0);
LcmWriteCommand(0x9f);
PutString(0,0,str_Hibernate);
Delay(0);
}
}
}while(iflag[0]);
//Start 測量程序
do//測量前必須曾按過Power鍵
{ //程序跳轉標志
iflag[0] = 0;
LcmClear(1);
LcmWriteCommand(0x9f);
LcmClear(1);
for(i=0;i<4;i++)
{
value[i][0] = 0; //k-1時刻測量值
value[i][1] = 0; //k-2時刻測量值
new_value[i] = -1; //當前k時刻測量值
}
PortA000 = 0x81; //poweron();
Regstr = 0x81;
ACC = Regstr;
ACC = ACC & 0x0fE; //模擬電路休眠控制位,1休,0工作
Regstr = ACC;
PortA000 = ACC;
while(1)
{
AD_A0 = 0;
AD_A1 = 0;
new_value[0] = ad_convert(); //模擬輸入路1測量
do
{
C = AD_BUSY;
}while(C == 0);
Port10F4 = ACC; //啟動模擬轉換上一路,鎖存第當前路
do
{
C = AD_BUSY; //等待以前路轉換
}while(C == 0);
Port10F4 = ACC; //啟動模擬轉換第當前路,鎖存第當前路
do
{
C = AD_BUSY;
}while(C == 0); //等待當前路轉換結束;
ACC = Port10FF; //讀yiqian轉換的低字節;
new_value[1] = new_value[1] & ACC; //需要將賦給new_value[1]的低字節
ACC = Port10FB; //讀yiqian轉換的高字節
//做移位,將其賦給new_value[1]的高字節
AD_A0 = 1;
new_value[1] = ad_convert(); //模擬輸入路2測量
AD_A0 = 0;
AD_A1 = 1;
new_value[2] = ad_convert(); //模擬輸入路3測量
AD_A0 = 1;
new_value[3] = ad_convert(); //模擬輸入路4測量
Delay(1);
Delay(1);
FS = 1;
Delay(1);
Delay(1);
FS = 0; //ad_sample();
ACC = Port6000;
ACC = ACC & 0x80;
if(ACC != 0x80)
{
ACC = Regstr; //poweroff();
ACC = ACC | 0x01; //模擬電路休眠控制位,1休,0工作
Regstr = ACC;
PortA000 = ACC;
ACC = Regstr;
ACC = ACC & 0x7F; //模擬電路電源控制位,1供電,0斷電
Regstr = ACC;
PortA000 = ACC;
FPWR = 0;
iflag[0] = 1;
break;
}
calibration(new_value);
deoutlier(new_value, value, 10); //數據處理
LcmDynWriteData(0,0,0x11,ihexs); //顯示
DelayKey(2);
PortA000 = 0x08;
ACC = Port6000;
ACC = ACC & 0x10;
if(ACC == 0x10) //若SET鍵按下,可彈出上面的菜單
{
}
ACC = Port6000;
ACC = ACC & 0x08;
if(ACC == 0x08) //若FIND鍵按下,為查詢
{
}
ACC = Port6000;
ACC = ACC & 0x04;
if(ACC == 0x04) //DELETE鍵按下
{
}
PortA000 = 0x04;
ACC = Port6000;
ACC = ACC & 0x04;
if(ACC == 0x04) //SAVE鍵按下
{
}
ACC = Port6000;
ACC = ACC & 0x08;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -