找回密码
 立即注册

QQ登录

只需一步,快速开始

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

仿真正常,但是lcd1602显示出一列白色方块,求大神看看怎么回事

[复制链接]
跳转到指定楼层
楼主
ID:895329 发表于 2021-3-23 08:59 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
做的是酒精传感器
#include<pic.h>
//__CONFIG(0x3F3A);
//__CONFIG(0x1832);  
__CONFIG(FOSC_HS & WDTE_OFF );             


char cc1[]=" Alcohol Tester ";

#define   RS RE0
#define   RW RE1
#define   EN RE2
#define   LCD_BUS PORTD

#define   BEEP RC2


unsigned int CMQ3=0;
unsigned char Vol=0;
unsigned int AlarmVol=20;

void delayms(unsigned int ms)                 //延时xx毫秒
{
        unsigned char i;
        while(ms--)
        {
                 for(i=0;i<120;i++);
        }
}

void command(unsigned int com)         //LCD写指令
{
   RS=0;                                             //RS为0
   LCD_BUS=com;                     //装载指令
   delayms(2);                            //延时2ms
   EN=1;                                            //LCD使能
   delayms(2);                           //延时2ms
   EN=0;                                           //LCD不使能
}

void write_dat(unsigned char dat)          //LCD写数据
{
   RS=1;                                           //RS为1
   LCD_BUS=dat;                   //装载数据
   delayms(2);                           //延时2ms
   EN=1;                                           //LCD使能
   delayms(2);                           //延时2ms
   EN=0;                                           //LCD不使能
}

void writestring(unsigned char x,unsigned char y,unsigned char *s) //LCD 写字符串
{     
        if (y == 0)  command(0x80 + x);     //表示第一行
        else         command(0xC0 + x);      //表示第二行
      
        while (*s)                         //判断是否字符串的结尾
        {     
     write_dat( *s);    //显示当前字符
                s ++;                             //字符串地址加1
        }
}

void writeChar(unsigned char x,unsigned char y,unsigned char s) //LCD 写字符串
{     
        if (y == 0)  command(0x80 + x);     //表示第一行
        else         command(0xC0 + x);      //表示第二行
      
        {     
     write_dat( s);    //显示当前字符
        }
}


void LCD_Initial(void)                //LCD初始化
{
   EN=0;                                   //LCD不使能
   RW=0;                                   //RW为0
   command(0x38);                //发送初始化指令
   command(0x0c);                //发送初始化指令
   command(0x06);           //发送初始化指令
   command(0x01);           //发送初始化指令
   command(0x80);           //发送LCD初始位置
}

   


interrupt ISR(void)        //中断子程序
{
   if(ADIE &&  ADIF==1)        //AD转换中断
   {
      ADIF=0;                 // A/D标志位清零
           Vol=ADRESH;         // 高八位送PORTD  
      //GO_nDONE =1;         // 启动下一次A/D转换ADGO          
   }
}

void main(void)
{
        unsigned char i=0;
        unsigned int temp1=0;
        float Dat=0;
        TRISD=0x00;
        TRISC=0X00;
        TRISE=0x00;
        ADCON1=0X0e;
        TRISA=0x01;
   ADCON0=0X01;
        BEEP=1;
        TRISB=0xff;
        OPTION_REG&=0x7f;
       
        ADCS1=1;
   ADCS0=0;                 // A/D转换时钟32分频
   CHS2=0;
   CHS1=0;
   CHS0=0;                 // CHS2:CHS0=001,

89411CEF-E388-4302-8537-12B23179DD1E.jpeg (991.35 KB, 下载次数: 35)

89411CEF-E388-4302-8537-12B23179DD1E.jpeg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2021-3-23 10:04 | 只看该作者
检查接线先(现成的套件查接口定义),然后查延时(非板带程例可能单片机速度不一样),最后看时序。
回复

使用道具 举报

板凳
ID:824490 发表于 2021-3-23 11:16 | 只看该作者
这种图形出现,是典型的LCD初始化不成功导致的,看你的代码中没有调用初始化函数

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:390416 发表于 2021-3-23 13:13 | 只看该作者
可以肯定的是 仿真肯定正常,因为仿真软件不管你实物怎么样的。
初始化失败了,先清屏 延迟很长时间,然后再写第一条指令和最后一条指令。就可以清屏复位了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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