急急急!!!protues做LCD1602仿真时为什么没显示

2019-07-18 09:14发布

这是图和原理图:
QQ截图20150507184144.png
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^4;//位定义
sbit rw=P2^5;
sbit e=P2^6;
uchar table1[]=" whh";
uchar table2[]="LCD1602 test ok!";
void  delay_50us(uint t) //延时函数,在12兆赫兹的晶振频率下50us的延时
{
    uchar j;
for(;t>0;t--)
  for(j=19;j>0;j--);
}
void delay_50ms(uint t)
{
   uint j;
   for(;t>0;t--)
    for(j=6245;j>0;j--);
}
   void write_com(uchar com)//写指令
   {
     e=0;
rs=0;
rw=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
   }
   void write_data(uchar dat)//输入数据
   {
     e=0;
rs=1;
rw=0;
P0=dat; //送数据
delay_50us(10);
e=1;
delay_50us(20);
e=0;
   }
   void init(void)
   {
     delay_50us(300); //延时15ms,换算15ms等于300us
     write_com(0x38);
  delay_50us(100);
  write_com(0x38);
  delay_50us(100);//延时5ms
  write_com(0x38);
  write_com(0x38);
  write_com(0x08);   
  write_com(0x01);
  write_com(0x06);
  write_com(0x0c);
   }
   void main()
   {
   uchar j;
   init();
   write_com(0x80);
   for(j=0;j<16;j++)
   {
      write_data(table1[j]);
   delay_50us(10);
   }
    write_com(0x80+0x40);
   for(j=0;j<16;j++)     
   {
      write_data (table2[j]);
   delay_50us(10);
   }
   while(1);
   }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
武力戡乱
1楼-- · 2019-07-19 00:15
 精彩回答 2  元偷偷看……
Joslyn_Clement
2楼-- · 2019-07-19 00:17
1602显示需要数据段加上拉电阻
城市过
3楼-- · 2019-07-19 02:38
从程序可以看出,你的P0是作为IO使用的,所以要加上拉电阻(10k)。如果把LCD1602作为一个扩展的外部RAM使用,可以不加,但你要重新编写程序,确定LCD1602读写的地址。
gel71
4楼-- · 2019-07-19 05:59
不是上拉的事,应该是延时函数不准确,还是读忙吧,写一个函数替换延时函数。
武力戡乱
5楼-- · 2019-07-19 09:43
gel71 发表于 2015-5-8 15:59
不是上拉的事,应该是延时函数不准确,还是读忙吧,写一个函数替换延时函数。

我们打个赌啊!
archai
6楼-- · 2019-07-19 13:20
單純看熱鬧,也有類似問題

一周热门 更多>