久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機電壓表代碼 lcd1602顯示
[打印本頁]
作者:
sxk
時間:
2017-6-25 10:58
標題:
單片機電壓表代碼 lcd1602顯示
電壓表代碼
0.png
(47.49 KB, 下載次數: 140)
下載附件
2017-6-26 02:36 上傳
單片機源程序如下:
/*=======================================================
<<<<<<<<<<<<<<<<<<< 愛普雷德技術團隊 >>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<< 我們一起追求卓越 >>>>>>>>>>>>>>>>>>>>
---------------------------------------------------------
官方郵箱: njaplid@163.com
技術QQ1: 535676091
技術QQ2: 1915624375
技術QQ3: 154211813
---------------------------------------------------------
All right reserved.2013.01
---------------------------------------------------------
文件名: main.c
描述: 液晶1602主程序文件
作者:
=========================================================
-----------------------------------------------------------------------------------------------------------*/
#include "LCD1602_drv.h"
#include "ads1115.h"
/**********************************************
功能:
延時函數
輸入參數:
n: 延時時長
輸出參數:
無
返回值:
**********************************************/
static void Delay(uint16 n)
{
uint16 i;
while(n--)
{
i=200;
while(i--);
}
}
/*---------------------------------------------------------------------------------------------------------*/
/**********************************************
主函數,LCD1602從0顯示到1000
**********************************************/
//void main()
//{
// uint16 i;
//
// LCD1602Init(); //液晶1602初始化
// Delay(20); //延時,保證顯示更穩定
// 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); //延時,保證顯示更穩定
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);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
電壓表代碼.rar
(99.21 KB, 下載次數: 34)
2017-6-25 10:58 上傳
點擊文件名下載附件
作者:
daizhi1970
時間:
2017-8-6 18:05
O(∩_∩)O謝謝學習辛苦
作者:
escle
時間:
2017-9-2 18:00
請問,我從哪里設置量程?0-5V,稍微有個電壓都報表了
作者:
escle
時間:
2017-9-2 19:34
樓主幫忙看一下,我的測量的數據要么是0xffff 要么是 0x0b58
換算5V量程 4.92 和0.21V,有個很小的電壓就顯示0XFFFF,
keil u4 +STCI SP (v6.33)+STC12C5A60S2 (40 PIN DIP)
還有個問題,主函數中有一句
InitADS1115(); 但是在子函數中這個需要參數,不知道這一句是否在執行。先出過編譯不過,后出的警告
/*********************************************************************************************
函數名:通過串口發送溫度與電壓隨時間變化
上位機軟件 LABVIEW 2015
返回值:2字節數據,溫度= (高8位*256+低8位)*0.25 ℃
2字節數據 ,電壓=(高8位*256+低8位)*0.00007539 V
備 注:振蕩晶體為11.0592MHz,PC串口端設置 [ 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; //轉換的數字量
unsigned int Config;
unsigned char Writebuff[4],Readbuff[3];
unsigned int Result[2];
/*********************************************************************************************
函數名:UART串口初始化函數
調 用:UART_init();
參 數:無
返回值:無
結 果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(占用)
備 注:振蕩晶體為11.0592MHz,PC串口端設置 [ 19200,8,無,1,無 ]
/**********************************************************************************************/
void UART_init (void){
EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
ES = 1; //允許UART串口的中斷
TMOD = 0x20; //定時器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
TH1 = 0xFD; //定時器初值高8位設置
TL1 = 0xFD; //定時器初值低8位設置
// PCON = 0x80; //波特率倍頻(屏蔽本句波特率為9600)
TR1 = 1; //定時器啟動
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:UART串口接收中斷處理函數
調 用:[SBUF收到數據后中斷處理]
參 數:無
返回值:無
結 果:UART串口接收到數據時產生中斷,用戶對數據進行處理(并發送回去)
備 注:過長的處理程序會影響后面數據的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4 using 1{ //切換寄存器組到1
unsigned char UART_data; //定義串口接收數據變量
RI = 0; //令接收中斷標志位為0(軟件清零)
UART_data = SBUF; //將接收到的數據送入變量 UART_data
flag=1;
//用戶函數內容(用戶可使用UART_data做數據處理)
//SBUF = UART_data; //將接收的數據發送回去(刪除//即生效)
//while(TI == 0); //檢查發送中斷標志位
//TI = 0; //令發送中斷標志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:UART串口發送函數
調 用:UART_T (?);
參 數:需要UART串口發送的數據(8位/1字節)
返回值:無
結 果:將參數中的數據發送給UART串口,確認發送完成后退出
備 注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定義串口發送數據變量
SBUF = UART_data; //將接收的數據發送回去
while(TI == 0); //檢查發送中斷標志位
TI = 0; //令發送中斷標志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:毫秒級CPU延時函數
調 用:DELAY_MS (?);
參 數:1~65535(參數不可為0)
返回值:無
結 果:占用CPU方式延時與參數數值相同的毫秒時間
備 注:應用于1T單片機時i<600,應用于12T單片機時i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
函數名:微秒級CPU延時函數
調 用:DELAY_MS (?);
參 數:1~65535(參數不可為0)
返回值:無
結 果:占用CPU方式延時與參數數值相同的毫秒時間
備 注:應用于1T單片機時i<600,應用于12T單片機時i<125
/*********************************************************************************************/
void delay_us (unsigned int a){
unsigned char i;
for(i = 0;i < a;i++)
_nop_();
}
/*********************************************************************************************
函數名:熱電偶溫度讀取
調 用:?=RE_CONVERT()
參 數:無
返回值:溫度
結 果:
備 注:
/**********************************************************************************************/
unsigned int Re_Convert() //熱電偶轉換
{
unsigned int i;
unsigned long Temp_2;
Temp_2=0;
CS = 0; //低電平使能,開始傳送數據
delayNOP();
SCK = 1; // 打開時鐘
delayNOP();
for(i=16;i>0;i--)// 讀取16位數據
{
Temp_2 = Temp_2<<1; // 左移一位
delayNOP();
SCK=1;
if(SO == 1){
Temp_2 = Temp_2|0x0001;} // 若接收到的位為1,則數據的最后一位置1
else
Temp_2 = Temp_2 & 0xffff; // 否則數據的最后一位保持不變,置0(前6行左移自動補0)
delayNOP();
SCK=0; //時鐘滴答一次
delayNOP(); //等待數據切換
}
CS=1;// 讀數完畢,關閉低電平使能
Temp_2=Temp_2<<1;
Temp_2=Temp_2>>4;
return(Temp_2);
}
/*********************************************************************************************
函數名:數據發送
調 用:DATA_SEND()
參 數:無
返回值:
結 果:
備 注:2字節數據
/**********************************************************************************************/
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); // 發送溫度高8位
UART_T(LOW_1); // 發送溫度低8位
UART_T(HI_2); // 發送電壓高8位
UART_T(LOW_2) ; // 發送電壓低8位
}
/******************************************************************************
STM32F103RCT6 Scorpio Ver5.1
By:天星科技
網址:gods-star.com
技術支持:天星科技.com
淘寶網店:gods-star.taobao.com
QQ:3184693939
******************************************************************************/
void ADS1115_Port_Init(void)
{
;
}
void ADS1115_SDAPort_IN(void)
{
;
}
void ADS1115_SDAPort_OUT(void)
{
;
}
///*******************************************
//函數名稱:Start
//功 能:完成IIC的起始條件操作
//參 數:無
//返回值 :無
//********************************************/
void Start(void)
{
SCL=1;
SDA=1;
delay_us(15);
SDA=0;
delay_us(15);
SCL=0;
delay_us(15);
}
//
///*******************************************
//函數名稱:Stop
//功 能:完成IIC的終止條件操作
//參 數:無
//返回值 :無
//********************************************/
void Stop(void)
{
SDA=0;
delay_us(15);
SCL=1;
delay_us(15);
SDA=1;
delay_us(15);
}
///*******************************************
//函數名稱:ACK
//功 能:完成IIC的主機應答操作
//參 數:無
//返回值 :無
//********************************************/
void ACK(void)
{
SDA=0;
delay_us(1);
SCL=1;
delay_us(15);
SCL=0;
delay_us(1);
SDA=1;
delay_us(15);
}
//*******************************************
//函數名稱:NACK
//功 能:完成IIC的主機無應答操作
//參 數:無
//返回值 :無
//********************************************/
void NACK(void)
{
SDA=1;
delay_us(1);
SCL=1;
delay_us(15);
SCL=0;
delay_us(1);
SDA=0;
delay_us(15);
}
//**********檢查應答信號函數******************/
///*如果返回值為1則證明有應答信號,反之沒有*/
///*******************************************
//函數名稱:Check
//功 能:檢查從機的應答操作
//參 數:無
//返回值 :從機是否有應答:1--有,0--無
//********************************************/
unsigned char Check(void)
{
unsigned char slaveack;
SDA=1;
delay_us(1);
SCL=1;
ADS1115_SDAPort_IN(); // SDA設置為輸入
delay_us(15);
slaveack = SDA_IN; //讀入SDA數值
SCL=0;
delay_us(15);
ADS1115_SDAPort_OUT(); // SDA設置為輸出
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設置為輸入
delay_us(15);
FLAG=SDA_IN;
data_Value <<= 1;
if( FLAG)
data_Value |= 0x01;
SCL=0;
delay_us(15);
ADS1115_SDAPort_OUT(); // SDA設置為輸出
}
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(); //不連續讀字節
else
ACK(); //連續讀字節
}
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個字節
do
{
t=Write_N_Byte(Writebuff,4);
}while(t==0);
}
//***************Read Word***********************/
void ReadWord(void)
{
int t;
Start(); //寫入2個字節
do
{
t=Write_N_Byte(Readbuff,2);
}while(t==0);
Start(); //寫入2個字節
do
{
t=Write_N_Byte(&Readbuff[2],1);
}while(t==0);
Read_N_Byte(Result,2); //讀出2個字節
}
//***************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]; //轉換的數字量
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的數值
P_Temp=Re_Convert(); //獲取溫度ADC值
DATA_SEND();// 將數據發送出去
DELAY_MS(1000);
}
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
99久久精品国产麻豆演员表
|
日韩三级在线
|
一级黄色毛片免费
|
色综合天天天天做夜夜夜夜做
|
999观看免费高清www
|
色综合天天天天做夜夜夜夜做
|
久久久激情
|
成人亚洲一区
|
国产精品伦理一区二区三区
|
久久看看
|
国产精品美女久久久久久久久久久
|
中日韩毛片
|
久久久久久看片
|
日本亚洲一区
|
欧美精品在线一区
|
久久亚洲高清
|
国产欧美一区二区三区另类精品
|
毛片99
|
成人在线播放网站
|
国产精品视频一区二区三区
|
久久久做
|
国产婷婷精品av在线
|
第一区在线观看免费国语入口
|
国产精品久久久久久久7电影
|
久久鲁视频
|
中文字幕日韩一区二区
|
一区二区av在线
|
91网站在线观看视频
|
亚洲精品乱码久久久久久按摩观
|
一级黄色录像片子
|
精品国产乱码久久久久久蜜柚
|
日韩欧美国产精品综合嫩v 一区中文字幕
|
亚洲永久精品国产
|
伊人一区
|
成人中文字幕在线观看
|
国内毛片毛片毛片毛片
|
久久久久精
|
国产中文一区二区三区
|
秋霞电影院午夜伦
|
久久久久国产一区二区三区四区
|
精品国产乱码久久久久久牛牛
|