打印
[51单片机]

请各位大佬帮忙看看程序,谢谢

[复制链接]
464|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
monkop|  楼主 | 2019-4-19 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小菜鸟一枚,照着书里的程序稍微改了一下放到keil里,编译无错误,但是仿真板上的显示不符合设计要求,请大佬们帮忙看看,谢谢了~

程序目的:实现读取端口电压,在LCD1602上实现读数显示。

问题:端口调用无问题,LCD上也能显示读数,但是读数明显和实际不符。

程序如下:

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DIN=P3^4;
sbit CS=P3^5;
sbit DCLK=P3^6;
sbit DOUT=P3^7;
sbit LCDRS=P2^6;
sbit LCDRW=P2^5;
sbit LCDE=P2^7;
uchar VOL[4];

SPI_Write(uchar value)
{
  uchar i;
  DCLK=0;
  for(i=0;i<8;i++)
     {
       DIN=value>>7;
       value=value<<1;
       DCLK=0;
       DCLK=1;
     }
}

uint SPI_Read()
{
  uint i,value=0;
  DCLK=0;
  for(i=0;i<12;i++)
     {
       value=value<<1;
       value|=DOUT;
       DCLK=1;
       DCLK=0;
      }
  return value;
}

Read_AD_Value(uchar cmd)
{
  uchar i;
  uint dat;
  CS=0;
  DCLK=0;
  SPI_Write(cmd);
  for(i=0;i<6;i++)
  DCLK=1;
  _nop_();
  _nop_();
  DCLK=0;
  _nop_();
  _nop_();
  dat=SPI_Read;
  CS=1;
  return dat;
}

void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}

void LCDBE()
{
LCD_Code(0x38);
LCD_Code(0x0c);
LCD_Code(0x06);
LCD_Code(0x01);
LCD_Code(0x80);
}

void LCD_Code(uchar com)
{
LCDRS=0;
LCDRW=0;
LCDE=0;
P0=com;
delay(1);
LCDE=1;
delay(5);
LCDE=0;
}

void LCD_Data(uchar dat)
{
LCDRS=1;
LCDRW=0;
LCDE=0;
P0=dat;
delay(1);
LCDE=1;
delay(5);
LCDE=0;
}

void main()
{
  uchar i;
  uint count,AD_Value;
  LCDBE();
  while(1)
  {
    if(count==50)
      {
       count=0;
       AD_Value=Read_AD_Data(0x94);
       VOL[3]=0x30+(AD_Value/1000);
       VOL[2]=0x30+(AD_Value%1000/100);
       VOL[1]=0x30+(AD_Value%100/10);
       VOL[0]=0x30+(AD_Value%10);
       for(i=0;i<4;i++)
       LCD_Data(VOL[i]);
      }
    count++;
    LCD_Code(0x80);
   }
}

===========================================

请各位大佬看看,谢谢了

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝