📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 温度传感器LM35全量程应用测试.
//-----------------------------------------------------------------
// 说明: 本例运行时,连接在AN0模拟输入通道的LM35温度传感器温度值将显示
// 在6位的数码管上.
//
//-----------------------------------------------------------------
#include <pic.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 1000000UL
//译码器使能位
#define EN_74LS138 RC5
//共阳数码管0~9的数字段码,最后4位为"-(10)/°(11)/C(12)/黑屏(13)"的段码
const INT8U SEG_CODE[] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0x9C,0xC6,0xFF};
//温度显示缓冲,显示格式示例:1/2- XXX℃
volatile INT8U a[] = {0,0,0,0,11,12};
//整型与浮点型电压变量
float f_Volt; int i_Volt;
//-----------------------------------------------------------------
// 获取指定通道的温度值,分解后存入显示缓冲
//-----------------------------------------------------------------
void Get_Temperature(INT8U Channel)
{
INT8U i,sign = 0;
//设置ADCON0寄存器的通道选择位CHS[2..0]=Channel(0~7)
//开始转换--->等待,直到一次转换结束(ADGO还可替换成GODONE)
//读取转换结果,计算出AN0通道输入电压
//求出LM35当前输出电压并放大1000倍,以便分解数据送数码管显示
//调理电路将LM35电压提升了2V,误差值根据实际情况设定
//判断符号位,并将结果转为非负数
//温度值分解
//依次处理百位,十位数的0屏蔽(个数为0不屏蔽)
//负温度符号显示
//对于负温度,由于最大值为-55,即-055℃,对于三位的整数,其最高位总是0
//上面的循环至少循环一次才会退出,即i至少为1
//因而下面的语句中在第i个非0数前面(i-1)加负号的语句内,
//不会出现i-1=-1的负数下标.
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
//初始时关闭译码器,否则将在开机瞬间数据管会出现无效数据显示
//设置ADCON1寄存器中的端口配置控制位PCFG[3..0]为0010,AD4~AN0为模拟通道
//以下配置用于TMR0定时器刷新数码管显示
while(1) //获取AN0通道温度值
{
}
}
//-----------------------------------------------------------------
// TMR0定时器溢出中断控制数码管刷新显示温度
//-----------------------------------------------------------------
void interrupt TMR0_ISR( )
{
static INT8U i = 0;
if (T0IF)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -