?? 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 + -