在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 3117|回复: 7

请教几个问题,问题在文件最后!

[复制链接]
发表于 2004-2-20 17:48:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
#include <reg51.h>
#include <absacc.h>
#define LCDINST XBYTE[0x7fff]  //HD44780的命令寄存器地址
#define LCDDATA XBYTE[0xffff]  //HD44780的数据寄存器地址
sbit P1_0=P1^0;
sbit L1232=P3^0;
sbit P1_3=P1^3;
unsigned int i,j,k;
timer0() interrupt 1 using 1
{
L1232=!L1232;//喂狗指令
P1_0=!P1_0;
TH0=-50000/256;
TL0=-50000%256;
}
timer1() interrupt 3 using 3
{
L1232=!L1232;
P1_3=!P1_3;
}
main()
{
L1232=!L1232;
P1_3=0;
P1_0=1;
TMOD=0x61;
TH0=-50000/256;
TL0=-50000%256;
TH1=-5;
TL1=-5;
IP=0x08;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
for(;;){
/*L1232=!L1232;
P2=0x0f;
for(i=0;i<40000;i++)
{
  j=i;  
}
L1232=!L1232;
P2=0xf0;
for(i=0;i<40000;i++)
  {
  j=i;  
  }*/
LCDINST=0x30;
for(i=0;i<10000;i++)
LCDINST=0x30;
for(i=0;i<10000;i++)
LCDINST=0x30;
for(i=0;i<10000;i++)
LCDINST=0x30;
for(i=0;i<1000;i++)
LCDINST=0x38;
for(i=0;i<1000;i++)
LCDINST=0x01;
for(i=0;i<100;i++)
LCDINST=0x06;
for(i=0;i<100;i++)
LCDINST=0x0c;
for(i=0;i<100;i++)
while(LCDINST & 0x80)
LCDINST=0x01;
while(LCDINST & 0x80)
LCDDATA='B';
for(;;)
{
;
}
}
}
//如何跟踪程序执行timer0()100MS后,进入timer1()计数5次后,又执行下面的程序后,然后再一次重复执行?
//本人这个程序执行时,在液晶上不能看到“B”这个字符?可能是寄存器地址不对。HD44780液晶显示器
//的命令寄存器地址,数据寄存器地址是如何确定的?我将它的RS接在P2.7上,E接在P3.6上,R/W接在P3.5上
//D0-D7接在P0-P7上
//应该在什么到时候或地方加入喂狗指令?
发表于 2004-2-21 11:11:03 | 显示全部楼层

请教几个问题,问题在文件最后!

不要再中断里喂狗
hd44780是最常见最简单的一个驱动芯片了,各种单片机的书上都能找到。
另外你的程序液晶驱动那地方这么写不知是啥意思
发表于 2004-2-22 13:47:43 | 显示全部楼层

请教几个问题,问题在文件最后!

对,你先按 laobai  班主的说法去看一下。不行再来讨论。
 楼主| 发表于 2004-2-24 10:21:08 | 显示全部楼层

请教几个问题,问题在文件最后!

多谢版主!
LCDINST=0x30;
for(i=0;i<10000;i++)
LCDINST=0x30;
for(i=0;i<10000;i++)
LCDINST=0x30;
for(i=0;i<10000;i++)
LCDINST=0x30;        //以上皆是对HD44780的初始化
for(i=0;i<1000;i++)
LCDINST=0x38;       //两行,8位,  5X7点指令
for(i=0;i<1000;i++)
LCDINST=0x01;       //清屏指令,下面的指令我回去查查书,我现在记不清了
for(i=0;i<100;i++)
LCDINST=0x06;
for(i=0;i<100;i++)
LCDINST=0x0c;
for(i=0;i<100;i++)
while(LCDINST & 0x80)
LCDINST=0x01;
while(LCDINST & 0x80)
LCDDATA='B';
for(;
{
;
}
}
我想请问:按照我上面所述,HD44780的命令寄存器的地址和数据寄存器的地址应为什么?单片机书中的接法跟我接的不一样我认为HD44780的那两个地址应该跟接法有关
发表于 2004-2-24 13:50:24 | 显示全部楼层

请教几个问题,问题在文件最后!

////液晶显示器软件复位
void lcmrst()
{
   delay(20);         ////延时20ms
   LCM_CTRL_WR=0x30;
   delay(10);
   LCM_CTRL_WR=0x30;
   delay(1);
   LCM_CTRL_WR=0x30;
   lcmwait();
   LCM_CTRL_WR=0x3c;  ////8位数据接口,2或4行,5*10点阵
   lcmwait();
   LCM_CTRL_WR=0x08;  ////显示,光标,闪烁关
   lcmwait();
   LCM_CTRL_WR=0x01;  ////清屏
   lcmwait();
   LCM_CTRL_WR=0x3c;
   lcmwait();
   LCM_CTRL_WR=0x0f;  ////显示光标开,闪烁关,以前是0e,现在闪烁开了
   lcmwait();
   LCM_CTRL_WR=0x06;  ////画面不动,地址自增
   lcmwait();
}
发表于 2004-2-24 13:51:40 | 显示全部楼层

请教几个问题,问题在文件最后!

你的语法错误:
LCDINST=0x30;
for(i=0;i<10000;i++){}
LCDINST=0x30;
for(i=0;i<10000;i++){}
发表于 2004-2-26 09:53:01 | 显示全部楼层

请教几个问题,问题在文件最后!

谢谢!
我当前最想知道的是,如何确定HD44780的命令寄存器地址和数据寄存器地址。肯请指教!!!!!
发表于 2004-2-26 11:24:09 | 显示全部楼层

请教几个问题,问题在文件最后!

rs   r/w   可分别为0,1排列组合共4种情况,对应4个地址,而且这4个地址不应该和其他的器件地址冲突,书上有阿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-5 14:34 , Processed in 0.030581 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表