📄 main函第2次.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 + -