找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1589|回复: 1
打印 上一主题 下一主题
收起左侧

为什么经过ADC0808转换后的,lcd1602没有变化一直显示0,求大神解答

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit rs=P2^0;
  5. sbit rw=P2^1;
  6. sbit en=P2^2;
  7. sbit START=P2^3;
  8. sbit ALE=P2^3;
  9. sbit CLK=P2^4;
  10. sbit OE=P2^5;
  11. sbit EOC=P2^6;
  12. uchar code table[]="Digital Ohmmeter";
  13. uchar code bby[]="(R)=";
  14. //uchar code abc[]={0,1,2,3,4,5,6,7,8,9};
  15. uchar num=0;
  16. uint  temp,getdata;
  17. uchar qian, bai, shi, ge;
  18. void delay(uint z)
  19.           {
  20.         uint x,y;
  21.           for(z=x;x>0;x--)
  22.           for(y=110;y>0;y--);
  23.           }
  24. bit lcd_busy_check()                                                        //1602状态检测是否忙碌
  25.         {
  26.           bit  result;
  27.           rs=0;
  28.           rw=1;
  29.           en=1;
  30.           delay(10);
  31.           result=(bit)(P0&0x80);
  32.           en=0;
  33.           return  result;
  34.         }

  35. void write_comd(uchar command)                                            //写LCD命令
  36.         {
  37.           while(lcd_busy_check());
  38.           rw=0;
  39.           rs=0;
  40.           en=0;
  41.           P0=command;
  42.           delay(5);
  43.           en=1;
  44.           delay(5);
  45.           en=0;
  46.         }

  47. void  write_data(uchar dat)                                             //向1602发送数据
  48.         {
  49.           while(lcd_busy_check());
  50.           rs=1;
  51.           rw=0;
  52.           en=0;
  53.           P0=dat;
  54.           delay(5);
  55.           en=1;
  56.           delay(5);
  57.           en=0;
  58.         }


  59. lcd_init()                                                                                                     //LCD1602初始化
  60.         {
  61.           write_comd(0x38);          //显示模式设置为16X2显示
  62.           write_comd(0x0c);   //开显示屏,关光标
  63.           write_comd(0x06);    //字符进入模式:屏幕不动,字符后移
  64.           write_comd(0x01);  //清屏
  65.           write_comd(0x80);
  66.         }
  67. lcd_display()
  68.         {
  69.         uint a,b;
  70.           for(a=0;a<16;a++)
  71.                           {
  72.                           write_data(table[a]);
  73.                           }
  74.                   //delay(200);
  75.                   write_comd(0x80+0x40+2);
  76.                   for(b=0;b<4;b++)
  77.                           {
  78.                           write_data(bby[b]);
  79.                           }
  80.                   //delay(200);
  81.                   write_comd(0x80+0x40+13);
  82.                           
  83.                           write_data(0xF4);//显示欧姆符号
  84.                         
  85.                  // delay(200);
  86.                  
  87.         }
  88.   adc0808_tra()      // AD转换
  89.                 {
  90.                    uint getdata;
  91.                  
  92.                   START=0;
  93.                   START=1;
  94.                   delay(1);
  95.                   START=0;
  96.                   delay(5);
  97.                   EOC=1;
  98.                   while(EOC==0);
  99.                   OE=1;
  100.                   
  101.                   getdata=P1;
  102.                   OE=0;
  103.                   return getdata;        
  104.                            
  105.                   }
  106.                
  107.         

  108. void data_display()
  109.                 {        
  110.                            temp=getdata*1.0/255*500;
  111.                     qian=temp/1000;
  112.            bai=temp%1000/100;
  113.                shi=temp%100/10;
  114.                   ge=temp%10;
  115.                   
  116.                 write_comd(0x80+0x40+7);
  117.                 write_data(qian+0x30);        //千位
  118.                 delay(5);
  119.                 write_comd(0x80+0x40+8);
  120.                 write_data(bai+0x30);//百位
  121.                 delay(5);
  122.                 write_comd(0x80+0x40+9);
  123.                 write_data(shi+0x30);        //十位
  124.                 delay(5);
  125.                 write_comd(0x80+0x40+10);
  126.                 write_data('.');
  127.                 delay(5);
  128.                 //write_comd(0x80+0x40+11);
  129.           write_data(ge+0x30);         //小数一位                        
  130.                 }
  131. void T0init()
  132.    {
  133.    TMOD=0x01;
  134.    TH0=(65536-200)/256;
  135.    TL0=(65536-200)%256;
  136.    EA=1;
  137.    ET0=1;
  138.    TR0=1;
  139.    //delay(20);
  140.    }
  141. void main()
  142.          {
  143.         
  144.           T0init();
  145.           lcd_init();
  146.             lcd_display();
  147.            while(1)
  148.            {
  149.                       adc0808_tra();
  150.               data_display();
  151.          }         
  152.          }
  153.    void timer() interrupt 1
  154.            {
  155.           TH0=(65536-200)/256;
  156.       TL0=(65536-200)%256;
  157.           CLK=~CLK;
  158.         }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:704545 发表于 2020-3-10 16:28 | 只看该作者
假如把仿真的图文件和程序打包放上来可能会有人帮你跑一下查找原因(前提是不要下载就扣黑币啊),这样找出问题的所在更准确更少花时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表