久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1990|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)adc0832獲取光照強(qiáng)度,lcd一直顯示255

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
uchar ADC_read_data(uchar CH)
{
    uchar i,test,adval;
    adval = 0x00;
    test = 0x00;
    CLK = 0;       //初始化
    DATI = 1;
    _nop_();
    CS = 0;
    _nop_();
    CLK = 1;
    _nop_();
   
   
    if ( CH == 0x00 )      //通道選擇
    {
        CLK = 0;
        DATI = 1;      //通道0的第一位
        _nop_();
        CLK = 1;
        _nop_();
        CLK = 0;
        DATI = 0;      //通道0的第二位
        _nop_();
        CLK = 1;
        _nop_();
    }
    else
    {
        CLK = 0;
        DATI = 1;      //通道1的第一位
        _nop_();
        CLK = 1;
        _nop_();
        CLK = 0;
        DATI = 1;      //通道1的第二位
        _nop_();
        CLK = 1;
        _nop_();
    }
   
    CLK = 0;
    DATI = 1;
    for( i = 0;i < 8;i++ )      //讀取前8位的值
    {
        _nop_();
        adval <<= 1;
        CLK = 1;
        _nop_();
        CLK = 0;
        if (DATO)
        adval |= 0x01;
        else
        adval |= 0x00;
    }
    for (i = 0; i < 8; i++)      //讀取后8位的值
    {
        test >>= 1;
        if (DATO)
        test |= 0x80;
        else
        test |= 0x00;
        _nop_();
        CLK = 1;
        _nop_();
        CLK = 0;
    }
//    if (adval == test)      //比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請(qǐng)將該行去掉
    dat = test;
    nop_();
    CS = 1;        //釋放ADC0832
    DATO = 1;
    CLK = 1;
    return dat;
}




void main()
{
uchar adc = 0;
uint voltage = 0;
uchar LED_buffer1[16] = {"    ADC:        "};//ADC顯示緩沖
uchar LED_buffer2[16] = {"voltage:      V "};//電壓顯示緩沖
LCD_Init(); // 初始化LCD

while(1){
    adc = ADC_read_data(0x00);//讀取adc值
    voltage = adc * 500.0 / 255;//將adc值換算成電壓
    LED_buffer1[9] = adc / 100 + '0';        //取adc百位
    LED_buffer1[10] = adc % 100 / 10 + '0';    //取adc十位
    LED_buffer1[11] = adc % 10 + '0';        //取adc個(gè)位
    LED_buffer2[9] = voltage / 100 + '0';        //取電壓個(gè)位
    LED_buffer2[10] = '.';//小數(shù)點(diǎn)
    LED_buffer2[11] = voltage / 10 % 10 + '0';    //取電壓十分位
    LED_buffer2[12] = voltage % 10 + '0';    //取電壓百分位
    LCD_ShowString(1, 1, &LED_buffer1[0]);    //顯示字符串
    LCD_ShowString(2, 1, &LED_buffer2[0]);    //顯示字符串
    }
}


3.png (64.28 KB, 下載次數(shù): 73)

3.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:155507 發(fā)表于 2023-3-25 15:06 | 只看該作者
應(yīng)該是時(shí)序的問題。


  1. unsigned char Get_AD_Result()
  2. {
  3.         unsigned char i,dat1=0,dat2=0;
  4.         CS  = 0; //起始控制位
  5.         CLK = 0;
  6.         DIO = 1; _nop_(); _nop_();
  7.         CLK = 1; _nop_(); _nop_();
  8.         CLK = 0;DIO = 1; _nop_(); _nop_(); //第一個(gè)下降沿之前,設(shè)DI= 1/0
  9.         CLK = 1; _nop_(); _nop_();         //軒子單端/差分(SGL/DIF)模式中的單端輸入模式
  10.         CLK = 0;DIO = 1; _nop_(); _nop_(); //第二個(gè)下降沿之前,設(shè)DI = 0/1,選擇CH0/CH1
  11.         CLK = 1;DIO = 1; _nop_(); _nop_();
  12.         CLK = 0;DIO = 1; _nop_(); _nop_(); //第三個(gè)下降沿之前,設(shè)DI = 1
  13.         for(i=0;i<8;i++)    //第4~11個(gè)下降沿讀數(shù)據(jù)(MSB->LSB)
  14.         {
  15.                  CLK = 1; _nop_(); _nop_();
  16.                 CLK = 0; _nop_(); _nop_();
  17.                 dat1 = dat1 << 1 | DIO;       
  18.         }
  19.         for(i=0;i<8;i++)  //第11~18個(gè)下降沿讀數(shù)據(jù)(LSB->MSB)
  20.         {
  21.                  dat2 = dat2 << ((unsigned char)(DIO)<<i);
  22.                 CLK = 1; _nop_(); _nop_();
  23.                 CLK = 0; _nop_(); _nop_();
  24.         }
  25.         CS = 1;
  26.         return (dat1 == dat2) ? dat1:0; //如果MSB->LSB和LSB->MSB讀取的結(jié)果相同,則返回讀取的結(jié)果,否則返回0
  27. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:915071 發(fā)表于 2023-3-26 15:00 | 只看該作者
感覺沒什么問題呀,我跟你一樣的adc讀取程序,除了顯示部分有區(qū)別外,基本一致,我的能正常顯示。
#include "reg51.h"
#include<intrins.h>
#include "lcd.h"
#define uint unsigned int
#define uchar unsigned char


uchar getdata=0;
unsigned char dat = 0;
unsigned long int voltage = 0;
sbit CLK = P2^0;
sbit CS = P2^1;
sbit dio1 = P2^2;
sbit dio0 = P2^2;

uchar ADC0832_Read(uchar CH)
{
        unsigned char adval,test,i;
        adval = 0x00;
        test = 0x00;
        CLK = 0;
        dio1 = 1;
        _nop_();
        CS = 0;
        _nop_();
        CLK = 1;
        _nop_();
        if(CH == 0x00)
        {
                CLK = 0;
                dio1 = 1;
                _nop_();
                CLK = 1;
                _nop_();
                CLK = 0;
                dio1 = 0;
                _nop_();
                CLK = 1;
                _nop_();
        }
        else
        {
                CLK = 0;
                dio1 = 1;
                _nop_();
                CLK = 1;
                _nop_();
                CLK = 0;
                dio1 = 1;
                _nop_();
                CLK = 1;
                _nop_();       
        }
        CLK = 0;
        dio1 = 1;
        for(i=0;i<8;i++)
        {
                _nop_();
                adval<<=1;
                CLK = 1;
                _nop_();
                CLK = 0;
                if(dio0)
                adval |= 0x01;
                else
                adval |= 0x00;
        }
        for(i=0;i<8;i++)
        {
                test>>=1;
                if(dio0)
                test |= 0x80;
                else
                test |= 0x00;
                _nop_();
                CLK = 1;
                _nop_();
                CLK = 0;
        }
//        if(test == adval)
        getdata = test;
        _nop_();
        CS = 1;
        dio0 = 1;
        CLK = 1;
        return getdata;

}

void ADC_change(uchar input)
{
        unsigned char ADC[4] = {0};
       
        voltage = input*5000.0/255;

         ADC[0] = voltage/1000;
         ADC[1] = voltage/100%10;
         ADC[2] = voltage/10%10;
         ADC[3] = voltage%10;
         LcdWriteCom(0x80);
         //LcdWriteCom(0x81);
         LcdWriteData('0'+ADC[0]);
         //LcdWriteCom(0x82);
         LcdWriteData('0'+ADC[1]);
         //LcdWriteCom(0x83);
         LcdWriteData('0'+ADC[2]);
        // LcdWriteCom(0x84);
         LcdWriteData('0'+ADC[3]);
         //LcdWriteCom(0x86);
         LcdWriteData('m');
         LcdWriteData('v');
}

void main()
{
        LcdInit();
        while(1)
        {
                dat = ADC0832_Read(0x00);
                ADC_change(dat);       
        }
}
回復(fù)

使用道具 舉報(bào)

地板
ID:757219 發(fā)表于 2023-3-26 17:16 | 只看該作者
angmall 發(fā)表于 2023-3-25 15:06
應(yīng)該是時(shí)序的問題。

我用了您的程序并沒有得到解決。我認(rèn)為是adc0832程序讀取的問題,使電阻改變lcd得不到改變,不知您有什么見解
回復(fù)

使用道具 舉報(bào)

5#
ID:757219 發(fā)表于 2023-3-26 17:38 | 只看該作者
我用了別人的光照程序依舊不變,我已經(jīng)開始懷疑是proteus的問題了,但我換了一個(gè)proteus8.13還是沒用
回復(fù)

使用道具 舉報(bào)

6#
ID:757219 發(fā)表于 2023-3-26 17:55 | 只看該作者
已解決,換了一個(gè)ADC0832.dll文件
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产午夜精品福利 | 国产精品国产三级国产aⅴ无密码 | 一区二区三区视频在线 | 久久综合欧美 | 国产黄色av网站 | 久久精品国产久精国产 | 久久国产免费 | 欧美中文字幕在线观看 | 91精品国产一区二区三区 | 影音先锋中文字幕在线观看 | caoporn国产精品免费公开 | 成人在线欧美 | 91精品国产综合久久精品 | 中文字幕在线观看一区 | 国产高清精品一区二区三区 | 色综合99 | 99久久精品国产毛片 | 国产精品明星裸体写真集 | 日韩一区二区三区在线观看 | 先锋资源在线 | 国产福利资源在线 | 成人久久久久 | 日日操av| 欧美高清一区 | 国产精品视频一二三区 | 中文成人无字幕乱码精品 | 日韩成人在线电影 | 日韩成人免费视频 | 秋霞性生活| 成年免费在线观看 | 在线91| 亚洲综合三区 | 丝袜毛片| 精品视频一区二区在线观看 | av一二三区 | 国产精品一二三区在线观看 | 美女黄网站 | 欧美色偷拍 | 久久综合一区 | 天天色综 | 国产成人免费视频网站视频社区 |