打印

请高手帮忙解答一下lcd程序的问题

[复制链接]
1583|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
枫恋00|  楼主 | 2012-4-9 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code lcd[]="abcaa";
uchar code lcd1[]="aaaaa";
sbit   lcd_rs=P3^2;
sbit   lcd_rw=P3^1;
sbit   lcd_en=P3^0;
sbit   lcd_busy=P1^7;
uchar num;
void delay(uint z)  //延时程序
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void lcd_tbusy(void)   //检测lcd是否在忙
{
    P1 = 0xff;  //设备读状态
    lcd_rs= 0;
    lcd_rw = 1;
    lcd_en = 1;
    while(lcd_busy);  //等待LCd不忙
    lcd_en = 0;    //
}
void write_com(uchar com)//lcd写指令控制命令
{
    lcd_tbusy();
lcd_rs=0;
    lcd_rw=0;
P1=com;
lcd_en=1;
delay(1);
lcd_en=0;
    delay(1);
}
void write_data(uchar date)//lcd写数据命令
{
    lcd_tbusy();
lcd_rs=1;
    lcd_rw=0;
P1=date;
delay(1);
lcd_en=1;
delay(1);
lcd_en=0;
}
void init()
{
lcd_en=0;
    delay(15);
write_com(0x38);//设置lcd显示模式
    delay(5);
write_com(0x38);
    delay(5);
write_com(0x38);
write_com(0x0f);//设置光标的显示/闪烁
write_com(0x05);//设置显示后指针加1,并且光标移一位
write_com(0x01);//清屏设置
write_com(0x80);//设置字符从地址为10的位置开始显示
}
void main()
{
init();
// write_data('1');
for(num=0;num<5;num++)
{
  write_data(lcd[num]);
  delay(20);
}
write_com(0x80+0x40);
for(num=0;num<5;num++)
{
  write_data(lcd1[num]);
  delay(20);
}
// write_com(0x01);
//   for(num=0;num<16;num++)
//    {
//  write_com(0x18);//整屛左移
//  delay(200);
// }
while(1);
}
这是我自己写的一个lcd显示的程序,出了一些问题,问了同学也找不出来,
(1)光标无法设置,程序下载后,看不到光标,
(2)下载后lcd第一行显示“abcdaa”第二行显示'aaaaaabcdaa"正常的显示是第一行是“abcaa”第二行是“aaaaa”
请教高手帮忙解答

相关帖子

沙发
dbykqsy| | 2012-4-10 00:28 | 只看该作者
看起来情况有那么一点复杂

使用特权

评论回复
板凳
枫恋00|  楼主 | 2012-4-10 12:31 | 只看该作者
2# dbykqsy 会复杂吗?不过下另外一个程序的时候就不会出错,然后再回来下这个程序,又有错了

使用特权

评论回复
地板
chenbb8_1| | 2012-4-10 12:37 | 只看该作者
1602吗,将测试是否忙的程序直接改成用 延时代替好了

使用特权

评论回复
5
枫恋00|  楼主 | 2012-4-10 21:38 | 只看该作者
4# chenbb8_1 问题已经解决了,谢谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

60

帖子

0

粉丝