这是我写的程序,不知道为什么就是不显示,想请教一下大神帮忙改正一下

2019-07-15 10:59发布

这是个汽车自动报站系统的程序,程序如下:
#include <reg51.h>
#include <intrins.h>   
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char BYTE;
typedef bit BOOL;   
     
sbit LCD_RS = P2^5;              
sbit LCD_RW = P2^6;
sbit LCD_EP = P2^4;   
sbit key1=P2^0; //键盘IO
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit BEEP=P3^1;
unsigned char code dis1[]=("3 LINE      ROM ONE TO FOUR STAtiON       6AM-9PM");
unsigned char code dis2[]=("  ONE STATION   ");
unsigned char code dis3[]=("  TWO STATION   ");
unsigned char code dis4[]=("  THREE STATION   ");
unsigned char code dis5[]=("  FOUR STATION   ");
void delay(int ms)  
{                           // 延时子程序
      
    while(ms--)
   {
       int A;
       for(A = 0; A< 250; A++)
      {
         _nop_();
         _nop_();
         _nop_();
         _nop_();
       }
    }
}   
BOOL lcd_busy()  
{                          // 测试LCD忙碌状态
    BOOL result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EP = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();  
    result = (BOOL)(P0 & 0x80);
    LCD_EP = 0;
    return (result);  
}   
void lcd_wcmd(BYTE cmd)  
{                          // 写入指令数据到LCD
    while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EP = 0;
    _nop_();
    _nop_();  
    P0 = cmd;
    _nop_();
    _nop_();
    _nop_();
    _nop_();  
    LCD_EP = 1;
    _nop_();
    _nop_();
    _nop_();
   _nop_();  
   LCD_EP = 0;   
}   
lcd_pos(BYTE pos)  
{                          //设定显示位置
   lcd_wcmd(pos | 0x80);
}
  
void lcd_wdat(BYTE dat)   
{                          //写入字符显示数据到LCD
   while(lcd_busy());
   LCD_RS = 1;
   LCD_RW = 0;
   LCD_EP = 0;
   P0 = dat;
   _nop_();
   _nop_();
   _nop_();
   _nop_();  
   LCD_EP = 1;
   _nop_();
   _nop_();
   _nop_();
   _nop_();  
   LCD_EP = 0;  
}
void lcd_init()  
{                        //LCD初始化设定
   key1=1;//按键初始化
   key2=1;//按键初始化
   key3=1;//按键初始化
   key4=1;//按键初始化  
   lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据
   delay(1);  
   lcd_wcmd(0x0c);          //显示开,关光标
   delay(1);  
   lcd_wcmd(0x06);          //移动光标
   delay(1);  
   lcd_wcmd(0x01);          //清除LCD的显示内容
   delay(1);
}
void delay0(int x)
{
  unsigned char j ;
  while(x--)
  {
  for(j=0;j<13;j++)
  {;}
  }
}

void  beep()
{
  unsigned char I;
      for (I=0;I<100;I++)
   {
   delay0(4);
   BEEP=!BEEP;
   }
   BEEP=1;
   delay(250);  
}
//闪动子程序   
void flash()
{      //控制停留时间     
delay(600);
lcd_wcmd(0x08);//关显示   
delay(200);
lcd_wcmd(0x0c); //开显示   
delay(200);
lcd_wcmd(0x08);
delay(200);
lcd_wcmd(0x0c);
delay(200);
}
void   main()
{
     BYTE i,j;        
     lcd_init();               // 初始化LCD
  delay(200);   
     //汽车运行                                                                                                      
     lcd_pos(0x10);               //设置显示位置为第一行第17列            
       i = 0;
    while(dis1!='')
    {
    lcd_wdat(dis1);
    i++;
    }     //显示车号         
    for(j=0;j<16;j++)  //向左移动16格     
    {
      lcd_wcmd(0x18);   //字符同时左移一格     
   delay(200);    //控制移动时间      
     }
         
    while(1)
   {
                                                                                                                                          
      
   
  //站1
   if(key1==0)
    {
       delay(10);
    if(key1==0)
    {   
         while(!key1);
      beep(); //打开蜂鸣器
            delay(100);  //延时
      beep(); //关闭蜂鸣器
      lcd_wcmd(0x01);            //清除LCD的显示内容      
               delay(1);        
      lcd_wcmd(0x06);            //向右移动光标      
               lcd_pos(0);                //设置显示位置为第一行的第1个字符      
               i = 0;
      while(dis2!='')
      {
      lcd_wdat(dis2);
      i++;
      }
      flash();//闪动两次           
            
             delay(800);                //控制停留时间     
             lcd_wcmd(0x01);            //清除LCD的显示内容      
             delay(200);                //控制两屏转换时间                             
           }  
       }
    //站2
       if(key2==0)
    {
       delay(10);
    if(key2==0)
    {   
         while(!key2);
      beep();  //打开蜂鸣器
            delay(100);  //延时
      beep(); //关闭蜂鸣器
      lcd_wcmd(0x01);            //清除LCD的显示内容      
               delay(1);        
               lcd_wcmd(0x06);            //向右移动光标
               lcd_pos(0);                //设置显示位置为第一行的第1个字符      
               i = 0;
      while(dis3!='')
      {
      lcd_wdat(dis3);
      i++;
      }
      flash();//闪动两次           
            
             delay(800);                //控制停留时间     
             lcd_wcmd(0x01);            //清除LCD的显示内容      
             delay(200);                //控制两屏转换时间                          
            }
        }
  //站3
        if(key3==0)
    {
       delay(10);
    if(key3==0)
    {   
         while(!key3);
      beep(); //打开蜂鸣器
            delay(100);  //延时
      beep(); //关闭蜂鸣器
      lcd_wcmd(0x01);            //清除LCD的显示内容      
               delay(1);        
      lcd_wcmd(0x06);            //向右移动光标
               lcd_pos(0);                //设置显示位置为第一行的第1个字符      
               i = 0;
      while(dis4!='')
      {
      lcd_wdat(dis4);
      i++;
      }
      flash();//闪动两次            
                 
              lcd_wcmd(0x01);            //清除LCD的显示内容      
              delay(200);                //控制两屏转换时间                           }  
          }
       }
    //站4
       if(key4==0)
    {
       delay(10);
    if(key4==0)
    {   
         while(!key4)
       beep(); //打开蜂鸣器      
            delay(100);  //延时        
      beep(); //关闭蜂鸣器      
      lcd_wcmd(0x01);            //清除LCD的显示内容      
               delay(1);        
      lcd_wcmd(0x06);            //向右移动光标      
               lcd_pos(0);                //设置显示位置为第一行的第1个字符      
               i = 0;
      while(dis5!='')
      {
      lcd_wdat(dis5);
      i++;
      }
      flash();//闪动两次           
                 
              lcd_wcmd(0x01);            //清除LCD的显示内容      
              delay(200);      //控制两屏转换时间   
    }
  }
}
}
0条回答

一周热门 更多>