欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

搜索
查看: 1771|回復(fù): 0
收起左側(cè)

ADC0808兩路采集,LM016L總是閃爍,時(shí)而顯示正確的數(shù),時(shí)而顯示錯(cuò)誤的數(shù),有人知道...

[復(fù)制鏈接]
ID:938888 發(fā)表于 2021-6-16 21:14 | 顯示全部樓層 |閱讀模式
#include"at89x51.h"
#include"absacc.h"


#define uchar unsigned char
#define uint unsigned int
#define IN7 XBYTE [0x7fff]//設(shè)置ADC0808的通道0的地址
#define IN0 XBYTE [0x7ff8]

sbit RS = P3 ^ 0;
sbit RW = P3 ^ 1;
sbit E = P3 ^ 5;


uchar ad_data;
uchar ad_dataa;
uint volt100,volt1000;
uchar bai, shi, ge;
uchar j;
uchar code welcode[] = {"--DC VOLTMETER--"}; //歡迎屏幕
uchar code number[] = {"0123456789"};
void delay(uchar i)
{
  while(i--);
}
//寫指令
void wr_cmd(uchar cmd)
{
  E = 0;
  RS = 0;
  RW = 0;
  P1 = cmd;
  E = 1;
  E = 0;
}
//寫數(shù)據(jù)
void wr_data(uchar dat)
{
  E = 0;
  RS = 1;
  RW = 0;
  P1 = dat;
  E = 1;
  E = 0;
}
//判忙
void  busy_lcd(void)
{
start:             //語句符號(hào)
  E = 0;       //使能端為低電平
  RS = 0;      //選擇指令寄存器
  RW = 1;      //讀操作
  P1 = 0xff;   //讀P口之前,應(yīng)先將P口全部置一
  E = 1;       //使能端由低電平變?yōu)楦唠娖剑M(jìn)行讀操作
  if (P1_7 == 0)
    return ;  //返回主調(diào)函數(shù)語句
  else
    goto start;//無條件跳轉(zhuǎn)到標(biāo)號(hào)為start的語句
}
//初始化
void LCD1602_initialize()
{
  busy_lcd();
  wr_cmd(0x38);
  busy_lcd();
  wr_cmd(0x08);
  busy_lcd();
  wr_cmd(0x01);
  busy_lcd();
  wr_cmd(0x06);
  busy_lcd();
  wr_cmd(0x0c);
}
//顯示第一行
void disp_welcode(void)
{
  uchar i = 0;
  busy_lcd();
  wr_cmd(0x80);//送第一行地址
  while (welcode != '\0')
  {
    busy_lcd();
    wr_data(welcode);
    i++;
  }
}
//轉(zhuǎn)換后的BCD處理
void data_BCD()
{
  j = volt100 / 100;
  bai = j + 48;
  j = volt100 % 100 / 10;
  shi = j + 48;
  j = volt100 % 10;
  ge = j + 48;
  /*
    bai=number[volt100/100];
    shi=number[volt100%100/10];
    ge=number[volt100%10];
  */
  /*
    bai=volt/100+0x30;
    shi=volt%100/10+0x30;
    ge=volt%10+0x30;

  */
}
void data_BCDD()
{
  j = volt1000 / 100;
  bai = j + 48;
  j = volt1000 % 100 / 10;
  shi = j + 48;
  j = volt1000 % 10;
  ge = j + 48;
}
//轉(zhuǎn)換后的數(shù)據(jù)第二行顯示
void disp_data(void)
{
  busy_lcd();
  wr_cmd(0xc0);


  busy_lcd();
  wr_data(bai);


  busy_lcd();
  wr_data('.');


  busy_lcd();
  wr_data(shi);


  busy_lcd();
  wr_data(ge);


  busy_lcd();
  wr_data('V');
}
//轉(zhuǎn)換后的數(shù)據(jù)第二個(gè)第二行顯示
void disp_dataa(void)
{
  busy_lcd();
  wr_cmd(0xc7);


  busy_lcd();
  wr_data(bai);


  busy_lcd();
  wr_data('.');


  busy_lcd();
  wr_data(shi);


  busy_lcd();
  wr_data(ge);


  busy_lcd();
  wr_data('V');
}

void main(void)
{
  uchar i;
  LCD1602_initialize();//液晶初始化
  disp_welcode();//歡迎屏幕

  while (1)
  {
        IN7 = 0x07; //寫操作        
    while(P3_2==1);//等待ADC0808轉(zhuǎn)換結(jié)束
    ad_data = IN7; //讀ADC轉(zhuǎn)換后的數(shù)字量數(shù)據(jù) IN0={0x00~0xff 即(0~255之間)}
          volt100 = ad_data * 100; //擴(kuò)大至0~25500之間        
         volt100 = volt100 / 51;        
    data_BCD();
        disp_data();
        
        for(i=0;i<20;i++)
        delay(50000);

        IN0 = 0x00;        
    while(P3_2==1);//等待ADC0808轉(zhuǎn)換結(jié)束        
    ad_dataa = IN0; //讀ADC轉(zhuǎn)換后的數(shù)字量數(shù)據(jù) IN0={0x00~0xff 即(0~255之間)}        
          volt1000 = ad_dataa * 100; //擴(kuò)大至0~25500之間        
         volt1000 = volt1000 / 51;        
    data_BCDD();        
    disp_dataa();
        for(i=0;i<20;i++)
        delay(50000);
        
  }

lm016l總是閃爍,顯示準(zhǔn)確

lm016l總是閃爍,顯示準(zhǔn)確




回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表