at89s52接adc0804量測電壓問題 |
尚未結案
|
bo55664
一般會員 發表:1 回覆:0 積分:0 註冊:2013-01-16 發送簡訊給我 |
程式碼與街腳如下,量測時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; //定量 |
handystudio
高階會員 發表:1 回覆:81 積分:106 註冊:2005-03-26 發送簡訊給我 |
你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; //定量
------
歡迎光臨 輕巧工作室 網站 http://www.handystudio.tw 控制電路板客製設計、製作交貨 8051專題製作/專題客製 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |