LCD初始化

2019-07-15 20:20发布

各位大神,帮我看看LCD1602的初始化对不?好郁闷~~弄看好久。加了查忙程序就显示一行黑块,不加就显示2行黑块~~帮帮忙啦!!到底怎么回事啊!!求~~
#define lcd P0
sbit rs=P2^0;sbit rw=P2^1;sbit e=P2^2;
uchar code lcd_addr[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,
0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
};
void delay(uint j)
{
uchar i=120;
for(;j>0;j--)while(i--);
}
void check_busy(void)
{
uchar dt;
do{
rs=0;rw=1;e=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
dt=lcd;
delay(1);
e=0;
}
while(dt&0x80);
}
void write_command(uchar com)
{
check_busy();
rs=0;rw=0,e=0;
_nop_();_nop_();
lcd=com;
_nop_();_nop_();_nop_();_nop_();_nop_();
e=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
e=0;
delay(1);
}
void write_data(uchar dat)
{
check_busy();
rs=1;rw=0;e=0;lcd=dat;
_nop_();_nop_();_nop_();_nop_();_nop_();
e=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
e=0;
delay(1);
}
void LCD_initial()
{
e=0;
rw=0;
write_command(0x38);
//write_command(0x38);
write_command(0x0C);
write_command(0x01);
write_command(0x06);
}
void lcd_disp(uchar addr,uchar *p,uchar len)
{
uchar i;
//uchar a=strlen(p);
for(i=0;i<len;i++)

write_command(lcd_addr[addr+i])
write_data(dispplay[i]);
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
依然落叶飘零
2019-07-16 08:21
你程序都没给全,最后一个函数有问题,display数组都没有。最紧要是居然没有main主函数.再多说一句,编程注意点格式啊。符程序;
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. #define lcd P0
  6. uchar display[] = {"    ZhanXiang   "};
  7. sbit rs=P2^6;sbit rw=P2^5;sbit e=P2^7;
  8. uchar code lcd_addr[]={
  9. 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
  10. 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
  11. 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,
  12. 0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
  13. };

  14. void delay(uint j)
  15. {
  16.         uchar i=120;
  17.         for(;j>0;j--)while(i--);
  18. }

  19. void check_busy(void)
  20. {
  21.         uchar dt;
  22.         do
  23.         {
  24.                 rs=0;rw=1;e=1;
  25.                 _nop_();_nop_();_nop_();_nop_();_nop_();
  26.                 dt=lcd;
  27.                 delay(1);
  28.                 e=0;
  29.         }
  30.         while(dt&0x80);
  31. }
  32. void write_command(uchar com)
  33. {
  34.         check_busy();
  35.         rs=0;rw=0,e=0;
  36.         _nop_();_nop_();
  37.         lcd=com;
  38.         _nop_();_nop_();_nop_();_nop_();_nop_();
  39.         e=1;
  40.         _nop_();_nop_();_nop_();_nop_();_nop_();
  41.         e=0;
  42.         delay(1);
  43. }
  44. void write_data(uchar dat)
  45. {
  46.         check_busy();
  47.         rs=1;rw=0;e=0;lcd=dat;
  48.         _nop_();_nop_();_nop_();_nop_();_nop_();
  49.         e=1;
  50.         _nop_();_nop_();_nop_();_nop_();_nop_();
  51.         e=0;
  52.         delay(1);
  53. }
  54. void LCD_initial()
  55. {
  56.         write_command(0x38);
  57.         //write_command(0x38);
  58.         write_command(0x0C);
  59.         write_command(0x01);
  60.         write_command(0x06);
  61. }
  62. void lcd_disp(uchar addr,uchar len)
  63. {
  64.         uchar i;
  65.         //uchar a=strlen(p);
  66.         for(i=0;i<len;i++)
  67.         {
  68.                 write_command(lcd_addr[addr+i]);
  69.                 write_data(display[i]);
  70.         }
  71. }
  72. void main()
  73. {
  74.         LCD_initial();
  75.        
  76.         while(1)
  77.         {
  78.                 lcd_disp(0,16);       
  79.         }
  80. }
复制代码

一周热门 更多>