youjingya 发表于 2011-2-22 23:38:29

LCD1602显示不正常(有程序)

用51单片机控制1602显示,51单片机计数,在1602上显示出来,不知道怎么回事:比如从00 到09显示正常,到显示10时,1就显示不出来了,计数到20是,十位就显示出来,个位就时有时无了,计数是正常的,在proteus上仿真也如此
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define P00 P0
#define P01 P1
#define P02 P2
#define P03 P3

sbit naiyapass=P0^0;
sbitzhishideng=P3^7;

uchar flag1,flag2,ID, num,m=0;
uint t=0;
//////////////////////////////////////
uchar code table[]="zong ji shu";               
uchar code table1[]="count:";
unsigned char nu;                                        
   

sbit lcden=P3^3;               //shinengxinhao
sbit lcdrw=P3^4;                  //duxiexuanzeduan(H/L)       bixu di dianping 筿キ钡!!!!!!!!!!!
sbit lcdrs=P3^5;               //shuju/mingling xuanzeduan(H/L)
/////////////////////////////////////
uchar number={0x30,0x13,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void delay1ms(uint count)
{
   uint i,a;
   for(i=0;i<count;i++)
       for(a=0;a<120;a++);
}

void write_com(uchar com)                   //xie ming ling
{
        lcdrs=0;
       
        P1=com;
        delay1ms(10);
        lcden=1;
        delay1ms(10);
        lcden=0;
}

void write_data(uchar date)                   //xie shu ju
{
        lcdrs=1;
       delay1ms(50);
        P1=date;
        delay1ms(50);
        lcden=1;
        delay1ms(50);
        lcden=0;
}
void init()                                                        //chushihua
{
        //dula=0;
        //wela=0;
        lcdrw=0;                                  
         lcden=0;                                   //Τ礚
        write_com(0x38);
        write_com(0x0c);                   //砞竚秨陪ボぃ陪ボ夹
        write_com(0x06);                  //糶才皐
        write_com(0x01);                  //陪ボ睲0计沮皐睲0
        }
void lcdxianshi()
{

    nu=(t/1000)%10;       //HIGH             
    nu=(t/100)%10;                                            
    nu=(t/10)%10;                                           
    nu=(t/1)%10;                   //LOW
      
        write_com(0x80+0x46);
                  
          for(num=0;num<4;num++)                                   //xianshi 5 wei
              {
                  write_data(number]);                  
              }
}
///////////////////////////

void main()
{
P00=0xff;
P01=0xff;
P02=0xff;
P03=0xff;

flag1=0;
flag2=0;
cy=1;
ID=0;

t=0;
init();
write_com(0x80);
for(num=0;num<11;num++)                                  
        {
                write_data(table);
                delay1ms(20);
        }
write_com(0x80+0x40);

for(num=0;num<6;num++)                               
        {
                write_data(table1);
                delay1ms(20);
        }
   /////////////////////////////////////////////

          lcdxianshi();                                                                        
while(1)
        {
          
           if(naiyapass==0)
             {
             
             ++t;
                   delay1ms(50);
                  
                   lcdxianshi();                                     
             delay1ms(50);
                  
             if(t==20)
                 {
                     zhishideng=0;
                 }

             if(t>=25)
                 {
                     zhishideng=1;
                 }
                     if(t==35)
                 {
                   t=0;
                     do
                         {
                        ;
                         }while(naiyapass==0);
                                delay1ms(50);
                 }
                  
   }        //if(naiyapass)                 
             
   }//while
}//main

X_BIKE 发表于 2011-2-23 00:28:52

应该是LCD驱动问题,每次写显示的数据时先写入DDRAM地址,保证地址跟屏的位置对应上!
你这样的程序很难帮你查
页: [1]
查看完整版本: LCD1602显示不正常(有程序)