0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

求助12864程序出错了

刚刚接触mcu,遇到12864的问题,编写程序显示汉字,前三行正常显示,第四行不显示程序如下
#include
#define uchar unsigned char
#define uint  unsigned int
sbit lcdrs =P2^0;
sbit lcdrw =P2^1;
sbit lcden =P2^2;
sbit lcdpsb=P2^3;
uchar temp1[]="12864 基础显示";
uchar temp2[]="2012年02月05日";
uchar temp3[]="我爱MCU";
uchar temp4[]="123456";
void delay (uint z)   //延时函数
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
write_com(uchar com)
{
uchar temp=0;
lcdrs=0;
lcdrw=1;
/*do//读是否忙碌
{
  lcden=1;
  delay(5);
  temp=P0;
  lcden=0;
}
while(temp&0x80);*/
lcdrw=0;
P0=com;
lcden=1;
delay(5);
lcden=0;
}
void lcdinit()
{
lcdrs=1;
write_com(0x30);
delay(5);
write_com(0x02);
delay(5);
write_com(0x0c);
delay(5);
write_com(0x01);
delay(5);
write_com(0x06);
}
write_date(uchar date)
{
uchar temp=0;
lcdrs=0;
lcdrw=1;
do
{
  lcden=1;
  delay(5);
  temp=P0;
  lcden=0;
}
while(temp&0x80);
lcdrs=1;
lcdrw=0;
P0=date;
lcden=1;
delay(5);
lcden=0;
}

void main()
{
  int i=0;
  lcdpsb=1;
  lcdinit();
  write_com(0x80);//第一行地址
  for(i=0;i<14;i++)
   write_date(temp1);
    write_com(0x90);//第二行地址
  for(i=0;i<16;i++)
   write_date(temp2);
  write_com(0x88);//第三行地址
  for(i=0;i<7;i++)
   write_date(temp3);
  write_com(0x98);//第四行地址
  for(i=0;i<6;i++);
   write_date(temp4);
while(1);
}
有知道的帮帮小弟吧,感激不尽
提问者:wtefewrws 地点:- 浏览次数:1245 提问时间:04-21 08:36
我有更好的答案
提 交
7条回答
asd006 04-24 19:50
心细如丝丫,佩服佩服。谢谢你
Abby0127 05-01 05:26
LS真细心!
这个,你这个函数真能显示啊?不应该是这样么:
for(i=0;i<14;i++)
   write_date(temp1[i]);
写函数参数为uchar类型,你传个地址,这也行?
wyerywsfsf 04-29 18:32


最好写成一个函数形式的比较好看:
for(i=0;i<6;i++)  
{
        write_data(temp4);   
}
把这四行用一个display函数写在一起主函数写个display就好了。。
jsjfsjfe 04-25 08:44
上面写错了为啥个、还改不了跟4楼一样是:
for(i=0;i<6;i++)
  {
         write_data(temp4[i]);
  }
cnm5 04-27 14:51
建议LZ增加一个子函数,字符串显示函数,如:
LCD_dsp_str(unsigned char *str, unsigned char len);
LCD显示的地址也可作为形参,这样主程序会显得更简洁。
wyerywsfsf 04-26 21:43
我回帖的时候看到帖子分别在3、4楼,怎么过一会来看就变成4、7楼,多出好几帖,回帖有个审核过程???
尼克wo 04-30 00:39
这个真能显示。谢谢你宝贵的建议,我一定会修改这个程序的
撰写答案
提 交
1 / 3
1 / 3