打印

1602液晶 输入让显示A屏幕却显示C

[复制链接]
1445|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
与中国接轨|  楼主 | 2013-11-1 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcde=P2^7;
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
void init();
void delay(uint z);
void writecom(uchar com);
void writedate(uchar date);
void main()
{
init();
delay(100);
writedate('m');   //问题出在这里,输入'm',液晶屏幕上显示o          小弟调试了好长时间,延时加长,初始化也检查了几遍,  还是没解决问题,
delay(100);
writedate(0x44);  //问题出在这里,输入'D',液晶屏幕上显示F        求大神不吝赐教!现行拜谢!附上液晶PDF资料。
delay(100);
writedate('V');     
while(1);
}
void init()
{
lcde=0;
lcdrs=0;
lcdrw=0;
//writecom(0x02);
writecom(0x38);
  delay(100);
writecom(0x0e);
  delay(100);
writecom(0x06);
  delay(100);
writecom(0x01);
  delay(100);
lcdrs=1;
  delay(10);
}
void writecom(uchar com)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(100);
lcde=1;
delay(100);
lcde=0;  
}
void writedate(uchar date)
{
lcdrs=1;
lcdrw=0;
P0=date;
delay(100);
lcde=1;
delay(100);
lcde=0;  
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

相关帖子

沙发
lirunze| | 2013-11-1 12:49 | 只看该作者
检查一下硬件啊,数据线d0-d7之间有没有短路的额啊

使用特权

评论回复
板凳
与中国接轨|  楼主 | 2013-11-1 13:53 | 只看该作者
好像地址有问题,还不敢确定

使用特权

评论回复
地板
香水城主| | 2013-11-1 15:34 | 只看该作者
放个线路图,好像有条线短路,不是D1就是ADR1。

使用特权

评论回复
5
与中国接轨|  楼主 | 2013-11-1 16:26 | 只看该作者
用的是谱中的板子,现在可以确定是板子的问题,纠结啊!

使用特权

评论回复
6
ballack_linux| | 2013-11-1 22:29 | 只看该作者
给你一份51单片机,测试没问题的代码
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit dula=P2^6;
sbit wela=P2^7;
uchar i;
uchar code table[]="I love China!" ;
uchar code table1[]="Me too.";
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void init()
{
        dula=0;
        wela=0;
        lcden=0;
}               
void write_lcd(uchar com,bit j)
{
        lcdrs=j;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}       
void display_lcd(bit y,uchar x,uchar value)
{
        x&=0x0f;
        if(y)
        {
                 x+=0x40;
        }
        x+=0x80;
        write_lcd(x,0);
        write_lcd(value,1);

}
void main()
{
        init();       
        write_lcd(0x38,0);                         //        显示模式设置
        write_lcd(0x0c,0);                         // 显示开/关及光标设置                                                            
        write_lcd(0x01,0);                         // 使用前先将数据指针和所有显示清零

        for(i=0;i<13;i++)
        {
                display_lcd(0,i,table[i]);
                delay(5);
        }
        for(i=0;i<7;i++)
        {
                display_lcd(1,i+9,table1[i]);
                delay(5);
        }
        while(1);                                                 //使显示固定
}       

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
与中国接轨 + 1 谢谢哈,新手分不多,见谅
7
与中国接轨|  楼主 | 2013-11-1 23:04 | 只看该作者
谢谢大家!问题终于解决了,不是0x38而是0x32也就是说不是8pin而是4pin,程序再稍作修改就对了!本来被打击的自信都快没了,终于捡回来了!谢谢大家帮助!拜谢!!!

使用特权

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

本版积分规则

4

主题

16

帖子

0

粉丝