OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4872|回复: 3

一天了,看的头疼了就是没发现问题啊,来求助大侠们

[复制链接]

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-4-7
在线时间
0 小时
发表于 2013-4-9 19:59:03 | 显示全部楼层 |阅读模式
原子哥,最近没玩STM32,项目需要整个16位单片机,我将51lcd1602整进去了,可是就是不显示,调试的时候,在数据写入函数,执行遇忙函数就无法出来了,一直遇忙,不知道咋回事
部分代码:
#define RS_CLR  RS = 0 
#define RS_SET  RS = 1

#define RW_CLR  RW = 0 
#define RW_SET  RW = 1 

#define EN_CLR  EN = 0
#define EN_SET  EN = 1
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
DelayUs2x(245);
 }
}
/*------------------------------------------------
              判忙函数  读状态 输入RS=L;RW=H;E=H;
------------------------------------------------*/
 bit LCD_Check_Busy(void) 
 { 
 
 RS_CLR; 
 RW_SET; 
  
 _nop_(); 
 EN_SET;
 return (bit)(DataPort & 0x80);
 EN_CLR; 
 }
/*------------------------------------------------
              写入命令函数
------------------------------------------------*/
 void LCD_Write_Com(unsigned char com) 
 {  
 while(LCD_Check_Busy()); //忙则等待
    RS_CLR; 
    RW_CLR; 
    EN_CLR;
_nop_(); 
    EN_SET; 
    DataPort= com; 
    _nop_(); 
    EN_CLR;
 }
/*------------------------------------------------
              写入数据函数
------------------------------------------------*/
 void LCD_Write_Data(unsigned char Data) 
 { 
 while(LCD_Check_Busy()); //忙则等待
 RS_SET; 
 RW_CLR; 
 EN_CLR;
_nop_(); 
 EN_SET; 
 DataPort= Data; 
 _nop_();
 EN_CLR;
 }

/*------------------------------------------------
                清屏函数
------------------------------------------------*/
 void LCD_Clear(void) 
 { 
 LCD_Write_Com(0x01); 
 DelayMs(5);
 }
/*------------------------------------------------
              写入字符串函数
------------------------------------------------*/
 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
 {     
 if (y == 0) 
  {     
LCD_Write_Com(0x80 + x);     //表示第一行
  }
 else 
  {      
  LCD_Write_Com(0xC0 + x);      //表示第二行
  }        
 while (*s) 
  {     
 LCD_Write_Data( *s);     
 s ++;     
  }
 }
/*------------------------------------------------
              写入字符函数
------------------------------------------------*/
 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 
 {     
 if (y == 0) 
  {     
  LCD_Write_Com(0x80 + x);     
  }    
 else 
  {     
  LCD_Write_Com(0xC0 + x);     
  }        
 LCD_Write_Data( Data);  
 }
/*------------------------------------------------
              初始化函数
------------------------------------------------*/
 void LCD_Init(void) 
 {
   LCD_Write_Com(0x38);    /*显示模式设置*/ 
   DelayMs(5); 
   LCD_Write_Com(0x38); 
   DelayMs(5); 
   LCD_Write_Com(0x38); 
   DelayMs(5); 
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*显示关闭*/ 
   LCD_Write_Com(0x01);    /*显示清屏*/ 
   LCD_Write_Com(0x06);    /*显示光标移动设置*/ 
   DelayMs(5); 
   LCD_Write_Com(0x0C);    /*显示开及光标设置*/
   }
   






/*------------------------------------------------
                    主函数
------------------------------------------------*/ 

// USER CODE END

void main(void)
{
  // USER CODE BEGIN (Main,2)

  // USER CODE END

  MAIN_vInit();


  // USER CODE BEGIN (Main,4)
 LCD_Init(); 
 LCD_Clear();//清屏
 while (1) 
 {  
//  LCD_Write_Char(7,0,'o');
//  LCD_Write_Char(8,0,'k');
  LCD_Write_String(1,1,"www.hlmcu.com");
  while(1);
 }

  // USER CODE END
大家帮我看看吧,在线等
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
发表于 2013-4-9 20:44:23 | 显示全部楼层
好久没弄了,我以前有次也弄这个1602弄了好久。。我那次是没有判busy函数。。不过你这里有,,一下子没看出问题来。。
你的MAIN_vInit();函数是没有贴出来吧,
表示路过,,呵呵
有进步就好!
回复 支持 反对

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-4-7
在线时间
0 小时
 楼主| 发表于 2013-4-9 21:43:10 | 显示全部楼层
回复【2楼】caoyicheng626:
----------------------------嘿嘿,刚搞定了啊,就是个延时的问题,按照时序图,RS,RW,EN之间的变换是要时间的,而且这个时间不能太小了,要不就不显示。
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-8-22
在线时间
0 小时
发表于 2013-8-22 13:46:20 | 显示全部楼层
1602 判忙函数 没太大的必要
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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