2960|0

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请大家帮我看看程序吧~~要憋疯了又不知道哪错~~ [复制链接]

这个是要实现八路数据采集然后用LCD显示,可是无论如何调节AAD输入端电压输出端就是显示5V~不知道是程序哪里出了错误啊~

   #include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit adoe=P3^7;   //OE接3.7
sbit eoc=P3^3;    //EOC接3.1
sbit adstart=P3^6; //start接3.2
sbit a0=P3^0;   //A 3.3
sbit a1=P3^1;   //B 3.4
sbit a2=P3^2;   //C 3.5
sbit lcdrs=P3^5;   //LCD RS 3.6
sbit lcden=P3^4;   //LCD EN 3.7
sbit dula=P2^6;
sbit wela=P2^7;
long int advel,temp,b1,b2,b3,b4,b5;
uchar tt;
uchar code table[]="0123456789.V"; //显示电压
void delay(uint z)  //延时
{
  uint x,y;
  for(x=z;x>0;x--)
   for(y=100;y>0;y--);
}
void write_command(uchar com)//写命令
{
dula=0;
wela=0; 
lcdrs=0;  //输入指令
 P0=com;
 delay(5);
 lcden=1;   //读数据
 delay(5);
 lcden=0;   //写指令或者数据
}
void write_data(uchar date)//写数据
{
 lcdrs=1;   //输入数据
 P0=date;   //显示
 delay(5);
 lcden=1;   //读数据
 delay(5);
 lcden=0; //写指令或数据
}
void init()//初始化
{
 lcden=0; 
 write_command(0x38);//不可变,显示模式设置:16*2显示,5*7点阵,8位数据接口
 write_command(0x0c);//屏幕开启和光标闪烁
 write_command(0x06);//显示开关及光标设置
 write_command(0x01);//清屏

}
void start()  //开始AD转换
{
 adoe=0;  
 adstart=0;
  _nop_();
 adstart=1;
 _nop_();
 adstart=0;
 advel=P0;
                

void xianshi()  //AD转化结果显示
{   
 write_data(table[b1]);   //最高位
 delay(1);      //
 write_data(table[10]);   // 小数点
 delay(1);      //
 write_data(table[b2]);    //第二位
 delay(1);       //
 write_data(table[b3]);   // 第三位
 delay(1);       //
 write_data(table[11]);   // 电压V
 delay(1);   
}
void first_mark()  //0-4路通道的标号
{
 write_command(0x01);
 write_command(0x80);
 write_data('A');
 delay(1);
 write_command(0x80+0x01);
 write_data('=');
 delay(1);   
 write_command(0x80+0x09);
 write_data('B');
 delay(1);
 write_command(0x80+0x0a);
 write_data('=');
 delay(1);   
 write_command(0x80+0x40);
 write_data('C');
 delay(1);
 write_command(0x80+0x41);
 write_data('=');
 delay(1);   
 delay(1);write_command(0x80+0x49);
 write_data('D');
 delay(1);
 write_command(0x80+0x4a);
 write_data('=');
 delay(1); 
}
void second_mark()   //5-7路通道的标号
{
 write_command(0x01);
 write_command(0x80);
 write_data('E');
 delay(1);
 write_command(0x80+0x01);
 write_data('=');
 delay(1);   
 write_command(0x80+0x09);
 write_data('F');
 delay(1);
 write_command(0x80+0x0a);
 write_data('=');
 delay(1);   
 write_command(0x80+0x40);
 write_data('G');
 delay(1);
 write_command(0x80+0x41);
 write_data('=');
 delay(1);   
 delay(1);write_command(0x80+0x49);
 write_data('H');
 delay(1);
 write_command(0x80+0x4a);
 write_data('=');
 delay(1); 
}
void main()

 a2=0;
 init();  //调用LCD初始化子程序
 TMOD=0x01;
 EA=1;//开总中断
 TH0=(65535-1000)/256;
 TL0=(65535-1000)%256;  
 ET0=1;//开定时器0中断
 TR0=1;//定时器0置位  
 first_mark();
 while(1)
 {
    a0=0;   //0路或4路通道的AD转化
  a1=0;  
  start(); 
  while(!eoc);
     adoe=1;
        temp=P1;
  delay(3);
  adoe=0;
    b1=(temp*500/255)/100;    //最高位
  b2=(temp*500/255)%100/10;   //第二位
  b3=(temp*500/255)%10;   //第三位 
  write_command(0x80+0x02);
  xianshi();

  a0=1;   //1路或5路通道的AD转化
  a1=0;  
  start(); 
  while(!eoc);
     adoe=1;
   temp=P1;
  delay(3);
  adoe=0;
  b1=(temp*500/255)/100;    //最高位
  b2=(temp*500/255)%100/10;   //第二位
  b3=(temp*500/255)%10;    //第三位  
  write_command(0x80+0x0b);
  xianshi();

  a0=0;   //2路或6路通道的AD转化
  a1=1;
  start(); 
  while(!eoc);
     adoe=1;
  temp=P1;
  delay(3);
  adoe=0;
  b1=(temp*500/255)/100;    //最高位
  b2=(temp*500/255)%100/10;   //第二位
  b3=(temp*500/255)%10;    //第三位  
  write_command(0x80+0x42);
  xianshi();

  a0=1;   //3路或7路通道的AD转化
  a1=1;  
  start(); 
  while(!eoc);
     adoe=1;
  temp=P1;
  delay(3);
  adoe=0;
  b1=(temp*500/255)/100;    //最高位
  b2=(temp*500/255)%100/10;   //第二位
  b3=(temp*500/255)%10;    //第三位  
  write_command(0x80+0x4b);
  xianshi();    

 }

void timer0() interrupt 1 //什么意思?
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 tt++;
 if((a2==0&&tt==20)==1)  //LCD第二屏显示
  { 
   
   tt=0;
   a2=1;
   second_mark();
  }
     if((a2==1&&tt==20)==1)  //LCD第一屏显示
  { 
    
   tt=0;
   a2=0;
   first_mark();
  }
  
}

此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表