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

📄 main.c

📁 基于51的单片机设计的电容计的完整源代码
💻 C
字号:
/******************************************************************
   本程序只供学习使用,未经作者许可,不得用于其它任何用途
      我的邮箱:computer-lov@tom.com
        欢迎访问我的blog:  http://computer00.21ic.org

Main.C  file

Created by Computer-lov
Date: 2004.11.12

Edit date:2006.3.2

Version V1.1
Copyright(C) Computer-lov 2004-2014
All rigths reserved      
*******************************************************************/


#include "main.h"
#include "hardware.h"
#include "LCD1602.H"
#include "square_wave_generator.h"
#include "measure_capacity.h"
#include "system_initial.h"
#include "isr.h"
#include "measure_frequency.h"

unsigned char buffer[17];
unsigned char TVH0;
unsigned char status=0;
unsigned long int result;
unsigned char menu_value;
unsigned char NO_2401=0;

struct
{
 unsigned char flag;
 unsigned char last_status;
 unsigned char mode;
 unsigned char capacity_scope;
 unsigned char wave_value;
 unsigned int  zero_offset[5];
}settings_value;

code unsigned char TEXT[6][17]={
                              "Select Function:",
                              "1. Capacity",
                              "2. Frequency",
                              "3. Square Wave",
                              "4. Settings",
                              "5. Help"
                               };


void delayXms(unsigned int x)
{
 unsigned int i,j;
 for(i=0;i<x;i++)
  for(j=0;j<240;j++);
}

void Display_menu(void)
{
 LCD_cls();
 LCD_prints(TEXT[0]);
 LCD_set_position(40);
 LCD_prints(TEXT[menu_value]);
}

void Main_menu(void)
{
 unsigned char i;
 Display_menu();
 while(status==MAIN_MENU)
  {
   while(!key);
   switch(key)
    {
     case     KEY_MENU: menu_value=1;Display_menu();break;
     case       KEY_UP: if(menu_value==1)menu_value=5;else menu_value--;Display_menu();break;
     case     KEY_DOWN: if(menu_value==5)menu_value=1;else menu_value++;Display_menu();break;
     case    KEY_ENTER: 
      {
       switch(menu_value)
        {
         case 1: 
          {
           i=1;
           LCD_cls();
           LCD_prints("Mode select:");
           LCD_set_position(40);
           LCD_prints("1. Manual mode");
           settings_value.mode=MANUAL_MODE;
           key=0;
           while(i)
            {
             while(!key);
             switch(key)
              {
               case    KEY_UP: LCD_cls();LCD_prints("Mode select:");LCD_set_position(40);LCD_prints("1. Manual mode");settings_value.mode=MANUAL_MODE;break;
               case  KEY_DOWN: LCD_cls();LCD_prints("Mode select:");LCD_set_position(40);LCD_prints("2. Auto mode");settings_value.mode=AUTO_MODE;break;
               case KEY_ENTER: 
                {
                 status=MEASURE_CAPACITY;
                 Write_a_EEPROM_data(EEPROM_Addr,0x01,status);
                 Write_a_EEPROM_data(EEPROM_Addr,0x02,settings_value.mode);
                 i=0;
                 break;
                }
               case  KEY_MENU: i=0;break;
               default: break;
              }
             key=0;
            }
           break;
          }
         case 2: status=MEASURE_FREQUENCY;Write_a_EEPROM_data(EEPROM_Addr,0x01,status);break;
         case 3: status=SQUARE_WAVE_GENERATOR;Write_a_EEPROM_data(EEPROM_Addr,0x01,status);break;
         case 4: status=SETTINGS;/*Write_a_EEPROM_data(EEPROM_Addr,0x01,status);*/break;
         case 5: status=HELP;/*Write_a_EEPROM_data(EEPROM_Addr,0x01,status);*/break;
         default: break;
        }
      }break;
     default: break;
    }
   key=0;
  }
}

unsigned char code adjust_zero_text[][17]=
                                          {
                                           "Addjust zero",
                                           "Are you sure?"
                                          };

void adjust_zero(void)
{
 unsigned char i,temp;
 for(i=0;i<5;i++)
  {
   scope_select=SCOPE_STOP;
   delayXms(400);
   capacity_measure_end=0;
   TVH0=0;
   TH0=0;
   TL0=0;
   switch(i)
    {
     case 0: temp=SCOPE_1;break;
     case 1: temp=SCOPE_2;break;
     case 2: temp=SCOPE_3;break;
     case 3: temp=SCOPE_4;break;
     case 4: temp=SCOPE_5;break;
     default: break;
    }
   scope_select=temp;                 //开始测量
   TR0=1;
   while(!capacity_measure_end)if(TVH0>0){scope_select=SCOPE_STOP;LCD_cls();LCD_prints("Error! Please   ");LCD_set_position(40);LCD_prints("check input port");key=0;delayXms(2000);while(!key);return;}
   scope_select=SCOPE_STOP;
   ((unsigned char *)&settings_value.zero_offset[i])[0]=TH0;
   ((unsigned char *)&settings_value.zero_offset[i])[1]=TL0;
   Write_a_EEPROM_data(EEPROM_Addr,0x05+i*2,TH0);
   Write_a_EEPROM_data(EEPROM_Addr,0x05+i*2+1,TL0);
  }
}

void Settings(void)
{
 LCD_cls();
 LCD_prints(adjust_zero_text[0]);
 LCD_set_position(40);
 LCD_prints(adjust_zero_text[1]);
 while(status==SETTINGS)
  {
   while(!key);
   switch(key)
    {
     case  KEY_MENU: status=MAIN_MENU;break;
     case KEY_ENTER: LCD_cls();LCD_prints("Adjustting...");LCD_set_position(40);LCD_prints("Pleas wait...");adjust_zero();status=MAIN_MENU;break;
     default: break;
    }
   key=0;
  }
}

unsigned char code help_text[][17]=
                              {
                               "About version",
                               "----V1.1-----",
                               "About designer",
                               "Computer-lov",
                               "QQ:156872359",
                               "Email:",
                               "Computer-lov",
                               "@163.com"
                               };

void Help(void)
{
 unsigned char i=0;
 LCD_cls();
 LCD_prints(help_text[0]);
 LCD_set_position(40);
 LCD_prints(help_text[1]);
 while(status==HELP)
  {
   while(!key);
   switch(key)
    {
     case  KEY_MENU:
     case KEY_ENTER: status=MAIN_MENU;break;
     case    KEY_UP: if(i>0){i--;LCD_cls();LCD_prints(help_text[i]);LCD_set_position(40);LCD_prints(help_text[i+1]);}break; 
     case  KEY_DOWN: if(i<6){i++;LCD_cls();LCD_prints(help_text[i]);LCD_set_position(40);LCD_prints(help_text[i+1]);}break;
     default: break;
    }
   key=0;
  }
}

void main(void)
{
 System_initial();
 while(1)
  {
   switch(status)
    {
     case      MEASURE_CAPACITY: Measure_capacity();break;
     case     MEASURE_FREQUENCY: Measure_frequency();break;
     case SQUARE_WAVE_GENERATOR: Square_wave_generator();break;
     case              SETTINGS: Settings();break;
     case                  HELP: Help();break;
     case             MAIN_MENU: Main_menu();break;
                        default: break;
    }
  }
}

⌨️ 快捷键说明

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