久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機(jī)電壓表代碼 lcd1602顯示
[打印本頁]
作者:
sxk
時(shí)間:
2017-6-25 10:58
標(biāo)題:
單片機(jī)電壓表代碼 lcd1602顯示
電壓表代碼
0.png
(47.49 KB, 下載次數(shù): 140)
下載附件
2017-6-26 02:36 上傳
單片機(jī)源程序如下:
/*=======================================================
<<<<<<<<<<<<<<<<<<< 愛普雷德技術(shù)團(tuán)隊(duì) >>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<< 我們一起追求卓越 >>>>>>>>>>>>>>>>>>>>
---------------------------------------------------------
官方郵箱: njaplid@163.com
技術(shù)QQ1: 535676091
技術(shù)QQ2: 1915624375
技術(shù)QQ3: 154211813
---------------------------------------------------------
All right reserved.2013.01
---------------------------------------------------------
文件名: main.c
描述: 液晶1602主程序文件
作者:
=========================================================
-----------------------------------------------------------------------------------------------------------*/
#include "LCD1602_drv.h"
#include "ads1115.h"
/**********************************************
功能:
延時(shí)函數(shù)
輸入?yún)?shù):
n: 延時(shí)時(shí)長
輸出參數(shù):
無
返回值:
**********************************************/
static void Delay(uint16 n)
{
uint16 i;
while(n--)
{
i=200;
while(i--);
}
}
/*---------------------------------------------------------------------------------------------------------*/
/**********************************************
主函數(shù),LCD1602從0顯示到1000
**********************************************/
//void main()
//{
// uint16 i;
//
// LCD1602Init(); //液晶1602初始化
// Delay(20); //延時(shí),保證顯示更穩(wěn)定
// ScreenClear(); //清屏
//
// StringPrint(0,0,"zhoudecong");
// Delay(10000);
// ScreenClear(); //清屏
//// StringDisplay(12,0,"周德聰");
// Delay(10000);
// ScreenClear(); //清屏
//
// while(1)
// {
// for(i=0;i<=1000;i++)
// {
// NumDisplay(0,0,i);
// Delay(100);
// }
// }
//}
int main(void)
{
u16 ADS1115_Value;
ADS1115_Port_Init(); // ADS1115端口初始化
LCD1602Init(); //液晶1602初始化
Delay(20); //延時(shí),保證顯示更穩(wěn)定
ScreenClear(); //清屏
InitADS1115();
while(1)
{
ADS1115_Value = ADS1115(0);
ScreenClear(); //清屏
NumDisplay(0,0,ADS1115_Value);
delay_ms(500);
// ADS1115_Value = ADS1115(1);
// ScreenClear(); //清屏
// NumDisplay(0,0,ADS1115_Value);
// delay_ms(5000);
// ADS1115_Value = ADS1115(3);
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
電壓表代碼.rar
(99.21 KB, 下載次數(shù): 34)
2017-6-25 10:58 上傳
點(diǎn)擊文件名下載附件
作者:
daizhi1970
時(shí)間:
2017-8-6 18:05
O(∩_∩)O謝謝學(xué)習(xí)辛苦
作者:
escle
時(shí)間:
2017-9-2 18:00
請(qǐng)問,我從哪里設(shè)置量程?0-5V,稍微有個(gè)電壓都報(bào)表了
作者:
escle
時(shí)間:
2017-9-2 19:34
樓主幫忙看一下,我的測(cè)量的數(shù)據(jù)要么是0xffff 要么是 0x0b58
換算5V量程 4.92 和0.21V,有個(gè)很小的電壓就顯示0XFFFF,
keil u4 +STCI SP (v6.33)+STC12C5A60S2 (40 PIN DIP)
還有個(gè)問題,主函數(shù)中有一句
InitADS1115(); 但是在子函數(shù)中這個(gè)需要參數(shù),不知道這一句是否在執(zhí)行。先出過編譯不過,后出的警告
/*********************************************************************************************
函數(shù)名:通過串口發(fā)送溫度與電壓隨時(shí)間變化
上位機(jī)軟件 LABVIEW 2015
返回值:2字節(jié)數(shù)據(jù),溫度= (高8位*256+低8位)*0.25 ℃
2字節(jié)數(shù)據(jù) ,電壓=(高8位*256+低8位)*0.00007539 V
備 注:振蕩晶體為11.0592MHz,PC串口端設(shè)置 [ 9600,8,無,1,無 ]
溫度傳感器芯片 max6675
電壓傳感芯片 ADS1115
/**********************************************************************************************/
#include <STC12C5A60S2.H>
#include <string.h>
#include<intrins.h >
#include<ads1115.h>
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
//定義全局變量與接口
bit flag;
unsigned char LOW_1;// 存放溫度低8位
unsigned char HI_1;//存放溫度高8位,其中4位未用
unsigned char LOW_2;// 存放電壓低8位
unsigned char HI_2;//存放電壓高8位
sbit SO=P0^2;//P0.2 與SO相連 6675
sbit CS= P0^1;//P0.1 與CS相連 6675
sbit SCK=P0^0;//P0.0與SCK相連 6675
unsigned int P_Temp;
sbit SDA= P2^0; //P2.0與SDA相連 1115
sbit SCL= P2^1; //P2.1與SCL相連 1115
// ADDR 與GND相連
// ALRT 空
//
char Channel_Value;
int D_ADS; //轉(zhuǎn)換的數(shù)字量
unsigned int Config;
unsigned char Writebuff[4],Readbuff[3];
unsigned int Result[2];
/*********************************************************************************************
函數(shù)名:UART串口初始化函數(shù)
調(diào) 用:UART_init();
參 數(shù):無
返回值:無
結(jié) 果:啟動(dòng)UART串口接收中斷,允許串口接收,啟動(dòng)T/C1產(chǎn)生波特率(占用)
備 注:振蕩晶體為11.0592MHz,PC串口端設(shè)置 [ 19200,8,無,1,無 ]
/**********************************************************************************************/
void UART_init (void){
EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
ES = 1; //允許UART串口的中斷
TMOD = 0x20; //定時(shí)器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時(shí)禁止串口接收)
TH1 = 0xFD; //定時(shí)器初值高8位設(shè)置
TL1 = 0xFD; //定時(shí)器初值低8位設(shè)置
// PCON = 0x80; //波特率倍頻(屏蔽本句波特率為9600)
TR1 = 1; //定時(shí)器啟動(dòng)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:UART串口接收中斷處理函數(shù)
調(diào) 用:[SBUF收到數(shù)據(jù)后中斷處理]
參 數(shù):無
返回值:無
結(jié) 果:UART串口接收到數(shù)據(jù)時(shí)產(chǎn)生中斷,用戶對(duì)數(shù)據(jù)進(jìn)行處理(并發(fā)送回去)
備 注:過長的處理程序會(huì)影響后面數(shù)據(jù)的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4 using 1{ //切換寄存器組到1
unsigned char UART_data; //定義串口接收數(shù)據(jù)變量
RI = 0; //令接收中斷標(biāo)志位為0(軟件清零)
UART_data = SBUF; //將接收到的數(shù)據(jù)送入變量 UART_data
flag=1;
//用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(shù)據(jù)處理)
//SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去(刪除//即生效)
//while(TI == 0); //檢查發(fā)送中斷標(biāo)志位
//TI = 0; //令發(fā)送中斷標(biāo)志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:UART串口發(fā)送函數(shù)
調(diào) 用:UART_T (?);
參 數(shù):需要UART串口發(fā)送的數(shù)據(jù)(8位/1字節(jié))
返回值:無
結(jié) 果:將參數(shù)中的數(shù)據(jù)發(fā)送給UART串口,確認(rèn)發(fā)送完成后退出
備 注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定義串口發(fā)送數(shù)據(jù)變量
SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去
while(TI == 0); //檢查發(fā)送中斷標(biāo)志位
TI = 0; //令發(fā)送中斷標(biāo)志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:毫秒級(jí)CPU延時(shí)函數(shù)
調(diào) 用:DELAY_MS (?);
參 數(shù):1~65535(參數(shù)不可為0)
返回值:無
結(jié) 果:占用CPU方式延時(shí)與參數(shù)數(shù)值相同的毫秒時(shí)間
備 注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
函數(shù)名:微秒級(jí)CPU延時(shí)函數(shù)
調(diào) 用:DELAY_MS (?);
參 數(shù):1~65535(參數(shù)不可為0)
返回值:無
結(jié) 果:占用CPU方式延時(shí)與參數(shù)數(shù)值相同的毫秒時(shí)間
備 注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125
/*********************************************************************************************/
void delay_us (unsigned int a){
unsigned char i;
for(i = 0;i < a;i++)
_nop_();
}
/*********************************************************************************************
函數(shù)名:熱電偶溫度讀取
調(diào) 用:?=RE_CONVERT()
參 數(shù):無
返回值:溫度
結(jié) 果:
備 注:
/**********************************************************************************************/
unsigned int Re_Convert() //熱電偶轉(zhuǎn)換
{
unsigned int i;
unsigned long Temp_2;
Temp_2=0;
CS = 0; //低電平使能,開始傳送數(shù)據(jù)
delayNOP();
SCK = 1; // 打開時(shí)鐘
delayNOP();
for(i=16;i>0;i--)// 讀取16位數(shù)據(jù)
{
Temp_2 = Temp_2<<1; // 左移一位
delayNOP();
SCK=1;
if(SO == 1){
Temp_2 = Temp_2|0x0001;} // 若接收到的位為1,則數(shù)據(jù)的最后一位置1
else
Temp_2 = Temp_2 & 0xffff; // 否則數(shù)據(jù)的最后一位保持不變,置0(前6行左移自動(dòng)補(bǔ)0)
delayNOP();
SCK=0; //時(shí)鐘滴答一次
delayNOP(); //等待數(shù)據(jù)切換
}
CS=1;// 讀數(shù)完畢,關(guān)閉低電平使能
Temp_2=Temp_2<<1;
Temp_2=Temp_2>>4;
return(Temp_2);
}
/*********************************************************************************************
函數(shù)名:數(shù)據(jù)發(fā)送
調(diào) 用:DATA_SEND()
參 數(shù):無
返回值:
結(jié) 果:
備 注:2字節(jié)數(shù)據(jù)
/**********************************************************************************************/
void DATA_SEND(){
LOW_1=P_Temp&0x000ff;// 獲取溫度低8位
P_Temp>>=8; //右移位,干掉低8位
HI_1=P_Temp&0x000ff;// 獲取溫度高8位
LOW_2 =D_ADS&0x000ff;// 獲取電壓低8位
D_ADS>>=8; //右移位,干掉低8位
HI_2=D_ADS&0x000ff;// 獲取電壓高8位
UART_T(HI_1); // 發(fā)送溫度高8位
UART_T(LOW_1); // 發(fā)送溫度低8位
UART_T(HI_2); // 發(fā)送電壓高8位
UART_T(LOW_2) ; // 發(fā)送電壓低8位
}
/******************************************************************************
STM32F103RCT6 Scorpio Ver5.1
By:天星科技
網(wǎng)址:gods-star.com
技術(shù)支持:天星科技.com
淘寶網(wǎng)店:gods-star.taobao.com
QQ:3184693939
******************************************************************************/
void ADS1115_Port_Init(void)
{
;
}
void ADS1115_SDAPort_IN(void)
{
;
}
void ADS1115_SDAPort_OUT(void)
{
;
}
///*******************************************
//函數(shù)名稱:Start
//功 能:完成IIC的起始條件操作
//參 數(shù):無
//返回值 :無
//********************************************/
void Start(void)
{
SCL=1;
SDA=1;
delay_us(15);
SDA=0;
delay_us(15);
SCL=0;
delay_us(15);
}
//
///*******************************************
//函數(shù)名稱:Stop
//功 能:完成IIC的終止條件操作
//參 數(shù):無
//返回值 :無
//********************************************/
void Stop(void)
{
SDA=0;
delay_us(15);
SCL=1;
delay_us(15);
SDA=1;
delay_us(15);
}
///*******************************************
//函數(shù)名稱:ACK
//功 能:完成IIC的主機(jī)應(yīng)答操作
//參 數(shù):無
//返回值 :無
//********************************************/
void ACK(void)
{
SDA=0;
delay_us(1);
SCL=1;
delay_us(15);
SCL=0;
delay_us(1);
SDA=1;
delay_us(15);
}
//*******************************************
//函數(shù)名稱:NACK
//功 能:完成IIC的主機(jī)無應(yīng)答操作
//參 數(shù):無
//返回值 :無
//********************************************/
void NACK(void)
{
SDA=1;
delay_us(1);
SCL=1;
delay_us(15);
SCL=0;
delay_us(1);
SDA=0;
delay_us(15);
}
//**********檢查應(yīng)答信號(hào)函數(shù)******************/
///*如果返回值為1則證明有應(yīng)答信號(hào),反之沒有*/
///*******************************************
//函數(shù)名稱:Check
//功 能:檢查從機(jī)的應(yīng)答操作
//參 數(shù):無
//返回值 :從機(jī)是否有應(yīng)答:1--有,0--無
//********************************************/
unsigned char Check(void)
{
unsigned char slaveack;
SDA=1;
delay_us(1);
SCL=1;
ADS1115_SDAPort_IN(); // SDA設(shè)置為輸入
delay_us(15);
slaveack = SDA_IN; //讀入SDA數(shù)值
SCL=0;
delay_us(15);
ADS1115_SDAPort_OUT(); // SDA設(shè)置為輸出
if(slaveack) return FALSE;
else return TRUE;
}
/***************Write a Byte****************/
void Write_1_Byte(unsigned char DataByte)
{
int i;
for(i=0;i<8;i++)
{
if(DataByte&0x80) //if((DataByte<<i)&0x80)
SDA=1;
else
SDA=0;
delay_us(15);
SCL=1;
delay_us(15);
SCL=0;
delay_us(15);
DataByte <<= 1;
}
SDA=1;
delay_us(1);
}
/***************Write N Byte****************/
unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n)
{
int i;
for(i=0;i<n;i++)
{
Write_1_Byte(*writebuffer);
if(Check())
{
writebuffer ++;
}
else
{
Stop();
return FALSE;
}
}
Stop();
return TRUE;
}
//***************Read a Byte****************/
unsigned char Read_1_Byte(void)
{
unsigned char data_Value = 0, FLAG, i;
for(i=0;i<8;i++)
{
SDA=1;
delay_us(15);
SCL=1;
ADS1115_SDAPort_IN(); // SDA設(shè)置為輸入
delay_us(15);
FLAG=SDA_IN;
data_Value <<= 1;
if( FLAG)
data_Value |= 0x01;
SCL=0;
delay_us(15);
ADS1115_SDAPort_OUT(); // SDA設(shè)置為輸出
}
return data_Value;
}
//***************Read N Byte****************/
void Read_N_Byte(unsigned int*readbuff, unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
readbuff[i]=Read_1_Byte();
if(i==n-1)
NACK(); //不連續(xù)讀字節(jié)
else
ACK(); //連續(xù)讀字節(jié)
}
Stop();
}
//*****************初始化******************/
void InitADS1115(unsigned char S_MUX_0, unsigned char S_MUX_1)
{
if (S_MUX_0 == 0 && S_MUX_1 == 0)
Config = OS+MUX_A0+PGA+DR+COMP_QUE+MODE;
if (S_MUX_0 == 0 && S_MUX_1 == 1)
Config = OS+MUX_A1+PGA+DR+COMP_QUE+MODE;
if (S_MUX_0 == 1 && S_MUX_1 == 0)
Config = OS+MUX_A2+PGA+DR+COMP_QUE+MODE;
if (S_MUX_0 == 1 && S_MUX_1 == 1)
Config = OS+MUX_A3+PGA+DR+COMP_QUE+MODE;
Writebuff[0]=ADDRESS_W;
Writebuff[1]=Pointer_1;
Writebuff[2]=Config/256;
Writebuff[3]=Config%256;
Readbuff[0]=ADDRESS_W;
Readbuff[1]=Pointer_0;
Readbuff[2]=ADDRESS_R;
}
//***************Write a Word***********************/
void WriteWord(void)
{
int t;
Start(); //寫入4個(gè)字節(jié)
do
{
t=Write_N_Byte(Writebuff,4);
}while(t==0);
}
//***************Read Word***********************/
void ReadWord(void)
{
int t;
Start(); //寫入2個(gè)字節(jié)
do
{
t=Write_N_Byte(Readbuff,2);
}while(t==0);
Start(); //寫入2個(gè)字節(jié)
do
{
t=Write_N_Byte(&Readbuff[2],1);
}while(t==0);
Read_N_Byte(Result,2); //讀出2個(gè)字節(jié)
}
//***************ADS1115********************/
unsigned int ADS1115(unsigned char Channel)
{
unsigned char S_MUX_0, S_MUX_1;
switch(Channel)
{
case 0:
S_MUX_0 = 0;
S_MUX_1 = 0;
Channel_Value = Channel + '0';
break;
case 1:
S_MUX_0 = 0;
S_MUX_1 = 1;
Channel_Value = Channel + '0';
break;
case 2:
S_MUX_0 = 1;
S_MUX_1 = 0;
Channel_Value = Channel + '0';
break;
case 3:
S_MUX_0 = 1;
S_MUX_1 = 1;
Channel_Value = Channel + '0';
break;
default :
break;
}
InitADS1115(S_MUX_0, S_MUX_1);
WriteWord();
DELAY_MS(1);
ReadWord();
D_ADS=Result[0]*256+Result[1]; //轉(zhuǎn)換的數(shù)字量
return D_ADS;
}
main(void)
{
unsigned int ADS1115_Value;
ADS1115_Port_Init(); // ADS1115端口初始化
InitADS1115();
UART_init();// 串口初始化
CS=1;
while(1)
{
ADS1115_Value = ADS1115(0); //通道0的數(shù)值
P_Temp=Re_Convert(); //獲取溫度ADC值
DATA_SEND();// 將數(shù)據(jù)發(fā)送出去
DELAY_MS(1000);
}
}
復(fù)制代碼
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
97国产在线观看
|
欧美激情自拍
|
99热这里
|
精品国产伦一区二区三区
|
国产6区
|
亚洲国产精品自拍
|
亚洲一区二区三区视频
|
日本免费视频
|
欧美亚洲一区二区三区
|
欧美一区二区三区在线观看
|
蜜乳av懂色av粉嫩av
|
国产成人精品免费视频
|
日韩精品一区二区在线
|
青青青草视频
|
久久视频一区二区
|
死神来了4无删减版在线观看
|
国内精品国产成人国产三级
|
久久日av
|
一区二区三区在线播放
|
欧美日韩国产成人
|
xxxx色
|
精品久久免费
|
欧美在线免费观看视频
|
手机福利视频
|
中文字幕亚洲精品
|
a免费视频
|
欧美九九九
|
www.99色
|
日韩一区二区视频在线观看
|
91狠狠干
|
精品久久免费视频
|
久久都是精品
|
久久久久国产视频
|
国产毛片在线
|
亚洲免费小视频
|
久久国内精品
|
四虎四虎
|
美女综合网
|
日韩一区二区中文字幕
|
国产精品天堂
|
22精品一区二区三区
|