亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
MSP430單片機超級終端在電壓表自動校準中的應用實例
[打印本頁]
作者:
51hei單片
時間:
2016-3-14 20:01
標題:
MSP430單片機超級終端在電壓表自動校準中的應用實例
本程序是《MSP430系列單片機系統工程設計與實踐》書里面的源碼,(包含工程文件(例4.1.6))完整例程下載:
http://www.denmoz.com/bbs/dpj-46245-1.html
關于本程序的詳細解說大家可以點擊上圖下載電子書
/*
超級終端在電壓表自動校準中的應用實例
說明:該程序示范用超級終端進行電壓表校準的人機交互范例。
//=========================================================================
(C)西安電子科技大學 測控技術與儀器教研中心 編寫:謝楷 2008/06/24
*/
//******************************************************************************
//
// MSP430FE425
// +-----------------+
// | XIN|-
// | | 32kHz
// | XOUT|-
// | |
// | (TXD)P2.4|----------->(TTL/232)----> RXD(2)
// | | 4800 bps ,n,8,1
// | (RXD)P2.5|<-----------(TTL/232)<---- TXD(3) PC(DB9)
// | |
// | GND |---------------------------GND(5)
//
//******************************************************************************
#include "msp430x42x.h" /*430寄存器頭文件*/
#include "UART.h" /*串口通訊程序庫頭文件*/
#include "stdio.h" /*標準IO設備頭文件(printf/scanf函數所需)*/
#include "math.h" /*數學函數庫*/
#include "LCD_Display.h" /*LCD顯示函數庫頭文件*/
#include "ADC16.h" /*ADCc采樣函數庫頭文件*/
#include "Flash.h"
#include "BasicTimer.h"
int Voltage_Sample()
{
int ADC_Value,i;
ADC16_VrefOn(); // 打開基準源
Analog_On(); // 打開外設電源P2.2(如果有必要)
for(i=0;i<100;i++); // 略延遲,等待穩定
ADC_Value=ADC16_Sample(2,1); //ADC2單次采樣
ADC16_VrefOff(); // 打開基準源
Analog_Off(); //關閉外設電源P2.2(如果有必要)
return(ADC_Value); // 返回采樣結果
}
void Calibrate()
{
char Chr=0;
int ADC_Temp;
int Volt_FS;
printf("\f"); // 清屏
printf("1秒內按'C'鍵進入校準模式\n"); // 提示按'C'鍵進入校準模式
__delay_cycles(1000000); // 等待1秒
Chr=U0RXBUF; // 取出串口收到數據(未收到讀回0)
if((Chr=='C')||(Chr=='c')) // 如果收字符為'C'或'c',才進入校準模式
{
printf("校準開始\n"); // 提示校準開始
printf("請輸入0V電壓,然后按回車鍵繼續...\n");
while(getchar()!='\n'); // 等待回車鍵
ADC_Temp=Voltage_Sample(); // 采樣一次ADC讀數,作為零點數值
Flash_WriteWord(0,ADC_Temp); // 將結果保存在InfoFlash的0、1單元
printf("零點采樣值=%d\n",ADC_Temp);// 提示零點采樣結果
printf("校準輸入滿度校準電壓(5000=50.00V):");// 提示輸入滿度校準電壓值
scanf("%d",&Volt_FS); // 從計算機輸入滿度電壓值
Flash_WriteWord(2,Volt_FS); // 將結果保存在InfoFlash的2、3單元
printf("請輸入滿度電壓,然后按回車鍵繼續...\n");
while(getchar()!='\n'); // 等回車鍵
ADC_Temp=Voltage_Sample(); // 采樣一次ADC讀數,作為零點數值
Flash_WriteWord(4,ADC_Temp); // 將結果保存在InfoFlash的4、5單元
printf("滿度采樣值=%d\n",ADC_Temp);// 提示滿度采樣結果
printf("校準完畢!\n\7"); // 校準完畢,鳴響一聲(\7是鳴響符)
}
}
void main( void )
{
int ADC_0,ADC_F, VCAL,Voltage,ADC_Result;
WDTCTL=WDTPW+WDTHOLD; //停止看門狗
FLL_CTL0|=XCAP18PF; //配置晶振負載電容
P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4;
P2DIR|=BIT0+BIT1+BIT2+BIT3; //不用的IO設為輸出
P1OUT=0;P2OUT=0; //以免不確定電平造成額外耗電
BT_Init(2);
LCD_Init(); //初始化液晶顯示
UART_Init(4800,'n',8,1); //串口初始化,設置成4800bps,無校驗,8位數據,1位停止
ADC16_Init(2,0,'S',1); //ADC2設為外部輸入,數據格式有符號,1倍放大
Calibrate(); //校準
ADC_0=Flash_ReadWord(0); //讀取校準參數(零點)
ADC_F=Flash_ReadWord(4); //讀取校準參數(滿點)
VCAL=Flash_ReadWord(2); //讀取校準參數(滿點電壓值)
while(1)
{
Cpu_SleepWaitBT(); //等待被BT中斷喚醒,以下代碼每隔1/2秒執行一次
ADC_Result=Voltage_Sample(); //采樣一次
Voltage=((long)ADC_Result-ADC_0)*VCAL/((long)ADC_F-ADC_0);//計算電壓
LCD_DisplayDecimal(Voltage,2); //顯示電壓值,帶2位小數 (例2.5.10)
LCD_InsertChar(VV); // 尾部添加單位: V
}
}
復制代碼
作者:
liushiming82
時間:
2021-3-2 21:07
這句 ADC_F=Flash_ReadWord(4); //讀取校準參數(滿點) 是不是AD口要加上相應的電壓進行采集呀?
Voltage=((long)ADC_Result-ADC_0)*VCAL/((long)ADC_F-ADC_0);//計算電壓 這句是什么意思?
謝謝
作者:
山東好漢
時間:
2021-3-2 21:36
這個好復雜呀膜拜膜拜程序員
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1