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

📄 main函第2次.txt

📁 基于51单片机的温度和电压采集与循环显示的控制程序
💻 TXT
字号:
#pragma cd db
#include <REG51.H>      //"D:\Keil\C51\INC\REG51.H
#include <ABSACC.H>
#include <INTRINS.H>
#include <LCD.H>

#include <ADC_TEMP.H>

// 定义显示缓冲区(由定时中断程序自动扫描)
extern uchar DispBuf[8];     //8位数码管显示的数字码(显示段码的偏移量)

extern uchar bdata key_flag;   //键盘状态定义
extern bit key_first_flag;
extern bit key_delay_flag;
extern bit key_valid_flag;

extern uchar key_value;    //key_value=0:no key,or key_value=1-8 stand for key1-key8

/*显示函数*/
extern void DispClear();//清除数码管的所有显示
extern void DsipP();    //显示p
extern void DispInit(); //数码管扫描显示初始化

/*I2C总线驱动函数*/

extern void I2C_Init();//I2C总线初始化,使总线处于空闲状态

extern bit I2C_Gets(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat);//主机通过I2C总线从从机接收多个字节数据

/*LM75A数字温度传感器函数*/
extern int LM75A_GetTemp();//读温度值
extern void DispTemp(int t);//显示温度值

/*TLC549ADC 驱动函数*/
extern unsigned char ReadAdc();//读ADC转化的数字量
extern void AdcInit();         //ADC初始化
extern void DispVol(unsigned char v); //将电压值输入Dispbuf中


/*LCD驱动函数************************************************/
extern sbit LCD_BL = P1^4;//定义背光控制信号
extern void LcdLightOn();
extern void LcdLightOff();
extern bit LcdGetBF();
extern void LcdWriteCmd(unsigned char cmd);
extern void LcdWriteDat(unsigned char dat);
extern unsigned char LcdReadDat();
extern void LcdSetAC(unsigned char ac);
extern void LcdClear();
extern void LcdDelay(unsigned char t);
extern void LcdInit();
extern void LcdCheckAC();
extern void LcdPutChar(unsigned char c);
extern void LcdPuts(unsigned char *s);
extern void LcdClearme(unsigned char ac);/*自定义函数************/


void SysInit();//主程序中单片机初始化
void delayms(unsigned int loop);//time=loop*1ms




uchar v1,v2;//旧电压值和新电压值
int t1,t2;//旧温度值和新温度值

void main(void)
{
  uchar key_value_process;
  SysInit();
  delayms(100);
  
  key_value=0;
  key_value_process=0;
  while(1)
   {   if(key_valid_flag)
         {   if(key_value==1||key_value==2||key_value==3||key_value==4||key_value==8)
                  key_value_process=key_value;
             key_value=0;
             key_valid_flag=0;
             key_delay_flag=0;
             key_first_flag=0;
         }
        delayms(100);
        
        switch(key_value_process)
          {   case 1:
                { DispClear();
                  DispVol(v1);
                  delayms(1000);
                  break;
                }
              case 2:
                { DispClear();
                  DispTemp(t1);
                  delayms(1000);
                  break;
                }
              case 3:
              case 4:
                { DispClear();
                  DispVol(v1);
                  if(key_value_process==4)
                    { LcdClearme(16); 
                      LcdPuts(DispBuf);
                    }
                  delayms(1000);
                  DispClear();
                  DispTemp(t1);
                  if(key_value_process==4)
                    { LcdClearme(48); 
                      LcdPuts(DispBuf);
                    } 
                  delayms(1000);
                  break;
                }
              case 8:{DispP();break;}
              default:break;
          }
   }
}

/*
函数:SysInit()
功能:系统初始化
*/
void SysInit()
{  TMOD&=0xfo;
   TMOD|=0x01;    //设置T0为16位定时器
   DispInit();    //数码管扫描显示初始化
   DispP();       //显示“待命”状态P
   I2C_Init();    //初始化I2C总线

   AdcInit();
   v1=0;
   t1=0;
   delayms(10);
}

void delayms(unsigned t)
{   do
    { TH0=0xDC;
      TL0=0x00;
      TR0=1;
      while(!TF0);
      TR0=0;
      TF0=0;
    }while(--t!=0); //fosc=11.0592MHz  延时0.01s~2.56s
}

⌨️ 快捷键说明

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