找回密码
 立即注册

QQ登录

只需一步,快速开始

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

52单片机的lcd1602显示乱码,求解答

[复制链接]
跳转到指定楼层
楼主
ID:757927 发表于 2020-5-22 03:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code table[]="cm^2";
sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit lcdwr=P2^1;
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit adcs=P2^5;
uchar num,ad_val;
void delay(uint z)            //延时子函数
{
  uint x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void write_com(uchar com)          //写命令
{
  lcdrs=0;
  lcdwr=0;
     P0=com;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void write_data(uchar date)       //写数据
{
  lcdrs=1;
  lcdwr=0;
  P0=date;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void init()                       //液晶初始化
{
  lcden=0;
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
  write_com(0x01);
}
uchar get_ad()                      //A/D 启动和转换程序
   {
    uchar ad_val;
     adwr=1;
     _nop_();
     adwr=0;                 //一个向下的脉冲,启动 A/D 转换
            
     _nop_();
     adwr=1;               
  delay(5);               //延迟 5 微秒 A/D 转换留一定的时间
     P1=0xff;               //读取 P1 口之前先给其全写 1
     adrd=1;                //选通 ADCS
     _nop_();               
     adrd=0;
     _nop_();
     ad_val=P1;               //AD 数据赋给 P1 口
     adrd=1;
return ad_val;
}
void main()                      //主函数
{
    uint A1,A2,A3,A4;             //uint 的范围是 0-65535   
    ulong ad_val,ad_vo;            //ulong 的范围是 0~2^32-1
    adcs=0;                       //AD 的片选信号选通*/
    ad_val=get_ad();
    delay(10);              
    ad_val=ad_val*10000;
    ad_vo= (45574-ad_val)/3522     //本来是 y=(4.5574-x)/0.3522
    ad_vo=ad_vo*10000;     //浮点数不能差分,把它们扩大 10000 倍
    A1=ad_vo/100000;
    A2=ad_vo%100000/10000;
    A3=ad_vo%10000/1000;
    A4=ad_vo%1000/100;
    init();
    write_com(0x80);
  {      
       write_data(A1+48);
    write_data(A2+48);
       write_data('.');
    write_data(A3+48);
    write_data(A4+48);
    delay(5);
   }
  write_com(0x80+0x40);
      for(num=0;num<4;num++)
  {
   write_data(table[num]);
   delay(5);
  }
  while(1);      
}






十位数显示乱码其他正常。求大神解救

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

使用道具 举报

沙发
ID:584814 发表于 2020-5-22 16:02 | 只看该作者
一般1602能显示就正常乱码多是读数不失常 。
回复

使用道具 举报

板凳
ID:750954 发表于 2020-5-22 16:27 | 只看该作者
是不是初始化没做好,或者时序太快造成lcd的工作不稳定所以十位数显示乱码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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