線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:911
推到 Plurk!
推到 Facebook!

at89s52接adc0804量測電壓問題

尚未結案
bo55664
一般會員


發表:1
回覆:0
積分:0
註冊:2013-01-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-01-16 16:41:15 IP:118.163.xxx.xxx 訂閱
程式碼與街腳如下,量測時LCD有字幕顯示,但給電壓時LCD還是00.0V沒有變化,不知道問題出在哪,麻請各位高手解答

#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
//------------------------------------------------------------
#define DataPort P1 //LCD接口
#define ReadPort P0 //AD
sbit RS = P3^2; //LCD控制
sbit RW = P3^1;
sbit EN = P3^0;
sbit cs=P2^7;
sbit rd=P3^7;
sbit wr=P3^6;
//------------------------------------------------------------
uchar code tab0[] = {" Voltage test "};
uchar code tab1[] = {" = 00.0 V "};
void delay(uint ms) // 1毫秒
{
uint t;
while(ms--)
{ for(t=0;t<112;t ){} }
}
//////////////////// 以下是LCD操作子函? //////////////////////
//================函名:LCD忙碌====================//
void WaitEnable(void)
{
DataPort = 0xff;
RS = 0; RW = 1; _nop_();
EN=1;
_nop_(); _nop_();
while(DataPort&0x80);
EN=0;
}
//------------------- 函名:命令到LCD -------------------//
void WriteCommand(uchar Order,uchar Attribc)
{
if(Attribc)WaitEnable();
RS = 0; RW = 0; _nop_();
DataPort=Order; _nop_();
EN = 1;
_nop_(); _nop_();
EN = 0;
}
//------------------- 函名: LCD据 --------------------//
void WriteData(uchar dataW)
{
WaitEnable();
RS = 1; RW = 0; _nop_();
DataPort=dataW; _nop_();
EN = 1;
_nop_(); _nop_();
EN = 0;
}
//----------------- 函名: LCD初始化 --------------------//
void InitLcd()
{
WriteCommand(0x38,1);
WriteCommand(0x08,1);
WriteCommand(0x01,1);
WriteCommand(0x06,1);
WriteCommand(0x0c,1);
}
//------------ 函名:示指定坐的一字符 -------------//
void DisplayOne(uchar X,uchar Y,uchar DData)
{
Y&=1;
X&=15;
if(Y)X|= 0x40;
X|= 0x80;
WriteCommand(X,0);
WriteData(DData);
}
//------------- 函名:示指定坐?的一串字符 --------------//
void DisplayList(uchar X,uchar Y,uchar code *DData)
{
uchar ListLength=0;
Y&= 0x1;
X&= 0xF;
while(X<=15)
{
DisplayOne(X,Y,DData[ListLength]);
ListLength ;
X ;
}
}
//////////////////// 以下是ADC0804操作子函 ////////////////
/*************AD0804 子程序*******************************/
unsigned char adc0804( void )
{
uchar read_ad;
rd = 1; wr = 1; //ADC
ReadPort = 0xff; //P1置位
cs=0;
wr = 0; wr = 1; //ADC
rd=0; //始后?据
_nop_(); _nop_(); //
read_ad = ReadPort; //
rd = 1;
cs = 1; //
return(read_ad);//返回最后?出的?据
}
//============= 函名:据?理及LCD示函? ==============//
void display(uint ad_data)
{
uint qian,bai,shi,ge; //定量
qian= ad_data/51 0x30; //千位?
bai = ad_dataQ*10/51 0x30; //百位?
shi = ad_dataQ*10Q*10/51 0x30; //十位?
ge = ad_dataQ*10Q*10Q*10/51 0x30; //?位?
//以下??示位置
DisplayOne(4,1,qian);_nop_(); //百
DisplayOne(5,1,bai);_nop_();
DisplayOne(7,1,shi);_nop_();
//?位?示省略
}
//==================== 函名:主函========================//
void main(void)
{
char i;
InitLcd(); //LCD初始化
for(i=15;i>=0;i--)
{
DisplayList(i,0,tab0);
DisplayList(i,1,tab1);
delay(60);
}
while(1) display(adc0804()); //用示
}
handystudio
高階會員


發表:1
回覆:81
積分:106
註冊:2005-03-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-03-16 01:32:34 IP:1.163.xxx.xxx 未訂閱
你po的程式工整程度,看起來應該網路下載或是書隨附的範例程式,所以應該是沒問題的,既然程式沒問題,那問題應該是在硬體上,看程式是看不出的,電路接錯的成份較高,po電路圖較好給意見,比方adc0804的輸入沒接,當然讀到0
===================引 用 bo55664 文 章===================
程式碼與街腳如下,量測時LCD有字幕顯示,但給電壓時LCD還是00.0V沒有變化,不知道問題出在哪,麻請各位高手解答

#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
//------------------------------------------------------------
#define DataPort P1 //LCD接口
#define ReadPort P0 //AD
sbit RS = P3^2; //LCD控制
sbit RW = P3^1;
sbit EN = P3^0;
sbit cs=P2^7;
sbit rd=P3^7;
sbit wr=P3^6;
//------------------------------------------------------------
uchar code tab0[] = {" Voltage test "};
uchar code tab1[] = {" = 00.0 V "};
void delay(uint ms) // 1毫秒
{
uint t;
while(ms--)
{ for(t=0;t<112;t ){} }
}
//////////////////// 以下是LCD操作子函? //////////////////////
//================函名:LCD忙碌====================//
void WaitEnable(void)
{
DataPort = 0xff;
RS = 0; RW = 1; _nop_();
EN=1;
_nop_(); _nop_();
while(DataPort&0x80);
EN=0;
}
//------------------- 函名:命令到LCD -------------------//
void WriteCommand(uchar Order,uchar Attribc)
{
if(Attribc)WaitEnable();
RS = 0; RW = 0; _nop_();
DataPort=Order; _nop_();
EN = 1;
_nop_(); _nop_();
EN = 0;
}
//------------------- 函名: LCD据 --------------------//
void WriteData(uchar dataW)
{
WaitEnable();
RS = 1; RW = 0; _nop_();
DataPort=dataW; _nop_();
EN = 1;
_nop_(); _nop_();
EN = 0;
}
//----------------- 函名: LCD初始化 --------------------//
void InitLcd()
{
WriteCommand(0x38,1);
WriteCommand(0x08,1);
WriteCommand(0x01,1);
WriteCommand(0x06,1);
WriteCommand(0x0c,1);
}
//------------ 函名:示指定坐的一字符 -------------//
void DisplayOne(uchar X,uchar Y,uchar DData)
{
Y&=1;
X&=15;
if(Y)X|= 0x40;
X|= 0x80;
WriteCommand(X,0);
WriteData(DData);
}
//------------- 函名:示指定坐?的一串字符 --------------//
void DisplayList(uchar X,uchar Y,uchar code *DData)
{
uchar ListLength=0;
Y&= 0x1;
X&= 0xF;
while(X<=15)
{
DisplayOne(X,Y,DData[ListLength]);
ListLength ;
X ;
}
}
//////////////////// 以下是ADC0804操作子函 ////////////////
/*************AD0804 子程序*******************************/
unsigned char adc0804( void )
{
uchar read_ad;
rd = 1; wr = 1; //ADC
ReadPort = 0xff; //P1置位
cs=0;
wr = 0; wr = 1; //ADC
rd=0; //始后?据
_nop_(); _nop_(); //
read_ad = ReadPort; //
rd = 1;
cs = 1; //
return(read_ad);//返回最后?出的?据
}
//============= 函名:据?理及LCD示函? ==============//
void display(uint ad_data)
{
uint qian,bai,shi,ge; //定量
qian= ad_data/51 0x30; //千位?
bai = ad_dataQ*10/51 0x30; //百位?
shi = ad_dataQ*10Q*10/51 0x30; //十位?
ge = ad_dataQ*10Q*10Q*10/51 0x30; //?位?
//以下??示位置
DisplayOne(4,1,qian);_nop_(); //百
DisplayOne(5,1,bai);_nop_();
DisplayOne(7,1,shi);_nop_();
//?位?示省略
}
//==================== 函名:主函========================//
void main(void)
{
char i;
InitLcd(); //LCD初始化
for(i=15;i>=0;i--)
{
DisplayList(i,0,tab0);
DisplayList(i,1,tab1);
delay(60);
}
while(1) display(adc0804()); //用示
}
------
歡迎光臨 輕巧工作室
網站 http://www.handystudio.tw
控制電路板客製設計、製作交貨
8051專題製作/專題客製
系統時間:2017-10-23 8:58:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!