6337|16

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

1602显示问题 [复制链接]

原代码如下,读写我是按着1602的时序写的,IO口也是看着图写的,不知道为什么就是没的显示
我看我同学在写write_com和Write_data时分别用的是XBYTE[8000]=X和XBYTE[8000]=x,这样能显示,
请各位高手指点下。

#include
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0;
sbit rw=P2^1;
sbit E=P2^2;


void delay(uchar n)
{uint j;
while(n--)
{
for(j=0;j<124;j++);
}
}

void write_com(uchar com)
{
RS=0;
rw=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}

void write_data(uchar date)
{
RS=1;
rw=0;
P0=date;
delay(5);
E=1;
delay(5);
E=0;
}

void init()
{
write_com(0x38);
write_com(0x0F);
write_com(0x06);
write_com(0x01);

}


void main()
{
uchar xy[]="I LOVE CHINA";
uchar m;
init();
write_com(0x80+0x00);
for(m=0;m<11;m++)
{
write_data(xy[m]);
delay(3);
}
while(1);
}

最新回复

下面的不错   详情 回复 发表于 2009-9-13 07:32
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
XBYTE[8000]是口地址,XBYTE[8000]=X是写内容到口,至于是命令还是数据看RS,RS=0表示是Command;
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我不知道我的程序哪里出了问题,改来改去感觉都没的什么问题了,可是还是没的显示。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
仔细阅读1602器件手册,那个里面有答案
1602内带字符发生器,显示字符很是方便
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
加上检查忙标志的,还有你在仿真的时候用示波器看一下时序就知道啦,你那个程序表面上应该没有什么错误。我这里有程序,要的话请联系306146412@qq.com
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 

  1. //贴一个,今天刚复习的
  2. #include
  3. #include
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. uchar code    welcom[16]={"    Welcome!    "};
  7. uchar idata lcdtimer[16]={"    00:00:00    "};
  8. sbit RS=P1^0;
  9. sbit RW=P1^1;
  10. sbit EN=P1^2;

  11. void delay(uint time)
  12. {
  13.     uint x,y;
  14.     for(x=time;x>0;x--)
  15.       for(y=112;y>0;y--);
  16. }

  17. bit LcdBusy(void)
  18. {
  19.     bit result;
  20.     EN = 0;
  21.     RS = 0;
  22.     RW = 1;
  23.     EN = 1;
  24.     _nop_();
  25.     _nop_();
  26.     _nop_();
  27.     _nop_();
  28.     result=(bit)(P2&0x80);
  29.     _nop_();
  30.     EN=0;
  31.     return result;
  32. }

  33. void WriteData(uchar Data)
  34. {
  35.     while(LcdBusy());
  36.     RS = 1;
  37.     RW = 0;
  38.     EN = 0;;
  39.     P2 = Data;
  40.     _nop_();
  41.     EN = 1;
  42.     _nop_();
  43.     EN = 0;
  44. }

  45. void WriteCom(uchar Com,bit test)
  46. {
  47.     if(test)
  48.       while(LcdBusy());
  49.     RS = 0;
  50.     RW = 0;
  51.     EN = 0;
  52.     P2 = Com;
  53.     _nop_();
  54.     EN = 1;
  55.     _nop_();
  56.     EN = 0;
  57. }

  58. void IntiLcd(void)
  59. {
  60.     delay(15);
  61.     WriteCom(0x38,0);
  62.     delay(5);
  63.     WriteCom(0x38,0);
  64.     delay(5);
  65.     WriteCom(0x38,0);
  66.     WriteCom(0x38,1);
  67.     WriteCom(0x08,1);
  68.   /*WriteCom(0x01,1);*/
  69.     WriteCom(0x06,1);
  70.     WriteCom(0x0c,1);
  71. }

  72. void LcdXY(uchar y,uchar x)
  73. {
  74.     uchar addr;
  75.     addr=(y-1)*0x40+(x-1);
  76.     WriteCom(addr|0x80,1);
  77. }

  78. void DisString(uchar *Matric)
  79. {
  80.     uchar i;
  81.     for(i=0;i<16;i++)
  82.       WriteData(Matric[i]);
  83. }

  84. int main()
  85. {
  86.     IntiLcd();
  87.     LcdXY(1,1);
  88.     DisString(welcom);
  89.     while(1);
  90.     return 0;
  91. }
复制代码
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
如果您需要用单片机实现液晶显示的话,您可以跟我索取资料。您得分配一个232串口,具体开发资料您可以跟我索取。dwin99@live.cn
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 
12864好用些
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
楼主你的程序应该有遗漏,好像没这么短啊,我有成功的程序你要不?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

10
 
前两天 拿320 240 做了一个简易示波器。
那屏才难得调
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
这个好强啊,要学习!真是做学问的!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

12
 
楼主的程序有点问题。初始化不完整。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
厉害
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

14
 

  1. //贴一个,今天刚复习的
  2. #include
  3. #include
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. uchar code    welcom[16]={"    Welcome!    "};
  7. uchar idata lcdtimer[16]={"    00:00:00    "};
  8. sbit RS=P1^0;
  9. sbit RW=P1^1;
  10. sbit EN=P1^2;

  11. void delay(uint time)
  12. {
  13.     uint x,y;
  14.     for(x=time;x>0;x--)
  15.       for(y=112;y>0;y--);
  16. }

  17. bit LcdBusy(void)
  18. {
  19.     bit result;
  20.     P2 = 0xff; //拉高
  21.     EN = 0;
  22.     RS = 0;
  23.     RW = 1;
  24.     EN = 1;
  25.     _nop_();
  26.     _nop_();
  27.     _nop_();
  28.     _nop_();
  29.     result=(bit)(P2&0x80);
  30.     _nop_();
  31.     EN=0;
  32.     return result;
  33. }

  34. void WriteData(uchar Data)
  35. {
  36.     while(LcdBusy());
  37.     RS = 1;
  38.     RW = 0;
  39.     EN = 0;;
  40.     P2 = Data;
  41.     _nop_();
  42.     EN = 1;
  43.     _nop_();
  44.     EN = 0;
  45. }

  46. void WriteCom(uchar Com,bit test)
  47. {
  48.     if(test)
  49.       while(LcdBusy());
  50.     RS = 0;
  51.     RW = 0;
  52.     EN = 0;
  53.     P2 = Com;
  54.     _nop_();
  55.     EN = 1;
  56.     _nop_();
  57.     EN = 0;
  58. }

  59. void IntiLcd(void)
  60. {
  61.     delay(15);
  62.     WriteCom(0x38,0);
  63.     delay(5);
  64.     WriteCom(0x38,0);
  65.     delay(5);
  66.     WriteCom(0x38,0);
  67.     WriteCom(0x38,1);
  68.     WriteCom(0x08,1);
  69.     WriteCom(0x01,1);
  70.     WriteCom(0x06,1);
  71.     WriteCom(0x0c,1);
  72. }

  73. void LcdXY(uchar y,uchar x)
  74. {
  75.     uchar addr;
  76.     addr=(y-1)*0x40+(x-1);
  77.     WriteCom(addr|0x80,1);
  78. }

  79. void DisString(uchar *Matric)
  80. {
  81.     uchar i;
  82.     for(i=0;i<16;i++)
  83.       WriteData(Matric[i]);
  84. }

  85. int main()
  86. {
  87.     IntiLcd();
  88.     LcdXY(1,1);
  89.     DisString(welcom);
  90.     while(1);
  91.     return 0;
  92. }

复制代码
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

15
 
/************************************************************************/
/******************      广州信先行电子科技有限公司     ****************/
/******************          WWW.XXXMCU.COM             ****************/
/******************                    ****************/
/******************           MCU:STC89C52RC            ****************/
/***********************************************************************/


#include "AT89X51.h"
#include "intrins.h"

#define  LCDPORT P2  //LCD数据线
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;

sbit KEY=P2^3;

//*************LCD1602驱动程序***************************/

void lcd_delay(unsigned char delaytime)
{
        while(delaytime)
                delaytime--;
}

/********1ms延时子程序***********/
void delay_nms(unsigned int n)
{
        unsigned int i;
        unsigned char j;
       
        for(i=0;i                 for(j=0;j<120;j++)
                        ;     //空操作
}



void write_lcd_command(unsigned char write_command)
{
        lcd_delay(40);
        RS=0;
        RW=0;
        LCDPORT=write_command;
        //hc164(write_command);
        EN=1;
        EN=0;
}
void write_lcd_data(unsigned char write_data)
{
        lcd_delay(40);
        RS=1;
        RW=0;
        LCDPORT=write_data;
        EN=1;
        EN=0;
}

void LCD_write_char( unsigned x,unsigned char y,unsigned char dat) //x表示行,y表示该行的位置(也就是列)
{
        //LCD_set_xy( x, y );
        switch(x)
        {
        case 0:
                write_lcd_command(0x80+y);
                break;
           case 1:
                   write_lcd_command(0xc0+y);
                   break;
        }
        write_lcd_data(dat|0x30);   //dat或上0x30,就时把数字0123456789转换成ASIIC码
}

void lcd_displaystr(unsigned char x,unsigned char y,unsigned char code *str)
{  
        //x表示行,y表示该行的位置(也就是列)
       
        if(x)
                write_lcd_command(0xc0+y);
        else
                write_lcd_command(0x80+y);
       
        while (*str)
        {
                write_lcd_data(*str);
                str++;
        }
}

void initial_lcd1602(void) //初始化LCD1602
{
        unsigned char i;
        EN=0;
        for(i=200;i>0;i--)
                lcd_delay(248);
       
        write_lcd_command(0x38);//设置lcd1602为每个字符5×7显示
        for(i=4;i>0;i--)
                lcd_delay(248);
       
        write_lcd_command(0x38);
        for(i=4;i>0;i--)
                lcd_delay(248);
       
        write_lcd_command(0x0f); //开显示,光标显示并闪烁
        for(i=4;i>0;i--)
                lcd_delay(248);
       
        write_lcd_command(0x06);//光标移动设置,每写一个数,光标自动加一
        for(i=4;i>0;i--)
                lcd_delay(248);
       
        write_lcd_command(0x01); //清屏
        for(i=4;i>0;i--)
                lcd_delay(248);
       
}
//********************lcd1602驱动程序到此完********************//



void main(void)
{
        unsigned char mode, i;
        initial_lcd1602();
       
        //输出显示
        lcd_displaystr(0,0x00," Welcome To here");
        lcd_displaystr(1,0x00," www.xxxmcu.com ");
        mode=0;
        while(1)
        {
                //按键扫描
                KEY=1;
                if(KEY==0)
                {
                        delay_nms(6);
                        if(KEY==0)
                        {
                                mode++;
                                if(mode>=4)
                                        mode=0;
                                // write_lcd_command(0x01); //清屏
                        }
                        while(KEY==0);
                       
                        switch(mode)
                        {
                        case 0x00:
                                lcd_displaystr(0,0x00," Study by MCS51 ");
                                lcd_displaystr(1,0x00," Come On Baby!  ");  
                                break;
                        case 0x01:
                                lcd_displaystr(0,0x00,"Welcome To Visit ");
                                lcd_displaystr(1,0x00," www.xxxmcu.com ");  
                                break;
                        case 0x02:
                                lcd_displaystr(0,0x00,"Your Vest Regard");
                                lcd_displaystr(1,0x00," XXX Technology ");
                                break;
                               
                        }  
                }
        }
       
}
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

16
 
不知道你的时许是否满足要求,建议你的E初始化一下

你的
void write_com(uchar com)
{
RS=0;
rw=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}

void write_data(uchar date)
{
RS=1;
rw=0;
P0=date;
delay(5);
E=1;
delay(5);
E=0;
}


我的(_nop_()是#include里面的):
void WriteCommand(unsigned char c)
{
DelayMs(5);//short delay before operation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5);   //short delay before operation
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

17
 
下面的不错
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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