|
我用实物已经做出来了,现在尝试一下仿真的效果,之前也不大清楚LM016L是否和LCD1602一样的工作,参考了一下大家以前的帖子,就是说只有检测忙状态是不一样的是吗?但是我把这个改了结果还是一样,如果别的地方都一样的话程序应该没问题,因为实物都做出来了。但不知道结果为什么都是这样。显示都是D
,
(原文件名:G3ZFHW}EYXXTC1%E`4NFF$L.jpg)
希望各位大侠指点指点!
还有附上我的LCD初始化部分
#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;
/*******************************************************************/
void delay1(int ms)
{
unsigned char y ;
while(ms--)
{
for(y = 0 ; y<250 ; y++)
{
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
}
}
delayNOP() ;
}
/******************************************************************/
/*检查LCD忙状态 */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
/******************************************************************/
void lcd_busy()
{
//bit result ;
LCD_RS = 0 ; _nop_() ; //22.1184M 执行一条指令是11.0592的一般时间
LCD_RW = 1 ; _nop_() ;
LCD_EN = 1 ; _nop_() ;
delayNOP() ; _nop_() ;
//result = (bit)(P1&0x80) ; _nop_() ;
LCD_EN = 0 ; _nop_() ;
//return(result) ;
}
/*写指令数据到LCD */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{ delayNOP() ;
lcd_busy() ;
//while(lcd_busy()) ;
LCD_RS = 0 ; _nop_() ;
LCD_RW = 0 ; _nop_() ;
LCD_EN = 0 ; _nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
P1 = cmd ; delayNOP() ;
delayNOP() ; _nop_() ;
LCD_EN = 1 ; _nop_() ;
delayNOP() ; _nop_() ;
LCD_EN = 0 ; _nop_() ;
}
/*******************************************************************/
/*写显示数据到LCD */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
/*******************************************************************/
void lcd_wdat(uchar dat)
{ delayNOP() ;
lcd_busy() ;
//while(lcd_busy()) ; _nop_() ;
LCD_RS = 1 ; _nop_() ;
LCD_RW = 0 ; _nop_() ;
LCD_EN = 0 ; _nop_() ;
P1 = dat ; _nop_() ; _nop_() ; _nop_() ; //晶振不同时,注意这里的延时时间
delayNOP() ; _nop_() ;
LCD_EN = 1 ; _nop_() ;
delayNOP() ; _nop_() ;
LCD_EN = 0 ; _nop_() ;
}
/* LCD初始化设定 */
/*******************************************************************/
void lcd_init()
{
delay1(15) ;
lcd_wcmd(0x01) ; _nop_() ;//清除LCD的显示内容
lcd_wcmd(0x38) ; _nop_() ;//16*2显示,5*7点阵,8位数据
delay1(5) ; _nop_() ;
lcd_wcmd(0x38) ; _nop_() ;
delay1(5) ; _nop_() ;
lcd_wcmd(0x38) ; _nop_() ;
delay1(5) ; _nop_() ;
lcd_wcmd(0x0c) ; _nop_() ;//显示开,关光标
delay1(5) ; _nop_() ;
lcd_wcmd(0x06) ; _nop_() ;//移动光标
delay1(5) ; _nop_() ;
lcd_wcmd(0x01) ; _nop_() ;//清除LCD的显示内容
delay1(5) ; _nop_() ;
}
/* 设定显示位置 */
/*******************************************************************/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80) ; _nop_() ; _nop_() ;//数据指针=80+地址变量
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|