⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gj3.c

📁 用AT89C52并口连接LM128645液晶块的有用的汽车ABS故障检测仪程序,LM128645总共20管脚.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<reg51.h>
#include<absacc.h>
#include "b.h"
#include <stdio.h>
#define FOSC              12   //11.0592 MHz
#define BAUD_RATE    9.6    //kpbs
unsigned char zu_temp1;
unsigned char zu_temp2;
unsigned char zu_temp3;
unsigned char zu_temp4,zu_temp5,zu_temp6,zu_temp7,zu_temp8,max_wei;
unsigned char dis_mod1,dis_mod2,dis_mod3,dis_mod4,dis_mod5,dis_mod6;
unsigned char deng_t1;
//
unsigned char key1;
unsigned char key2;
unsigned char key_last2;
unsigned char have_key;
unsigned char menu_page;
//
unsigned char cursor_hang;
//
unsigned char rcvdata[3];    //from chuankou data
unsigned char rcvcount;
bit EvRcv;                // tngxn symbol
 struct errstore
{
    unsigned char err_num;
    unsigned char err_wei;
  //  unsigned char err2;
};
struct errstore err[24];     //yi-wei 8 column datagroup
//unsigned char err_wei[8];
unsigned char datacomm1;   //发送数据区
unsigned char datacomm2[3];  //接收数据区
unsigned char *datacomm2_p;        //接收数据指针
//
sbit P10=P1^0;      //复位
sbit P11=P1^1;      //背光
sbit P12=P1^2;      //串口指示灯
sbit P13=P1^3;      //测试
//
bit  P12_save;
bit  P13_save;
//
bit  need_renew_lcd;
bit  need_move_cursor;
bit  need_chang_kaiguan;
bit  back_lamp;

unsigned char * p_renew;
//
void t_tx(unsigned char send_temp);
void tx_ljcs();
void tx_download();
void initial(void);
read_err_to_struct(unsigned char rx_data);
dis_err1(unsigned char tmp_mod);
dis_err2(unsigned char tmp_mod);
dis_err3(unsigned char tmp_mod);
dis_err4(unsigned char tmp_mod);
dis_err5(unsigned char tmp_mod);
dis_err6(unsigned char tmp_mod);
ansi1();
err_num(unsigned char num_tmp); //write num for hang1
renew_led(unsigned char * p_rom);
move_cursor(unsigned char hang1);
back_lamp_contrl(bit ifon);
renew_hang(unsigned char hang1,unsigned char * p_rom);
show_picture(unsigned char * p_picture);
void key_excu();
set_lcd_page();
/************************************************************* */
void rcv_INT(void)interrupt 4
   { int i,j,lamp_sum=0;
    // unsigned char rcv_tmp;
     P12=1;
    if(RI)
       {
        rcvdata[rcvcount]=SBUF;
       // datacomm2[rcvcount]=rcvdata[rcvcount];
        rcvcount++;
        EvRcv=1;
        if (rcvcount>2) ES=0;
    /*    for (i=0;i<2500;i++)
           {lamp_sum++;
            if (lamp_sum>500)
              {
               lamp_sum=0;
               P12_save=~P12_save;
               P12=P12_save;
              }
           }  */
        RI=0;
       }
  }
/************************************************************* */
void main()
{   unsigned char i1;
    unsigned char i2,i3;
   // unsigned char *datacomm2_p;
     datacomm2_p=&datacomm2[0];
     restar_lcd();     //send write directive to lcd
     initial();        //initial AT89C51 Register
     init_ram();        // set lcd power_on initial_state
     init_lcd();        //set lcd power_on initial_state
     while(1)
     {
       /************************************************************* */
          if(need_renew_lcd)        //执行显示功能
          {
              need_renew_lcd=0;
              set_lcd_page();
              if(menu_page==120)
              {
                   set_lcd_kuocong();
                   ansi();
                   PBYTE[0X00]=0x80;   //先设绘图垂直地址
                   ansi();
                   PBYTE[0X00]=0x80;   //设绘图水平地址
                   zu_temp1=0x80;            // zu_temp1作为垂直位址
                   for(i1=0;i1<32;i1++)     //共两行32个垂直位址
                   {
                       for(i2=0;i2<16;i2++)   //一行8字16字节
                       {
                           ansi();
                           PBYTE[0X01]=0x00;   //显示背景
                           ansi();
                           PBYTE[0X01]=0x00;
                       }
                       zu_temp1=zu_temp1+1;
                       ansi();
                       PBYTE[0X00]=zu_temp1;  //设绘图垂直地址0x81
                       ansi();
                       PBYTE[0X00]=0x80;      //设绘图水平地址
                   } 
                   show_picture(&picuter1[0]);  //显示图形
                   set_lcd_jiben();
                   p_renew=&welcome[0];   //p_renew is display_pointer
                   renew_led(p_renew);    //显示字体
                   ansi();
              }
              if(menu_page==0)
              {
              PBYTE[0X00]=0x01;   //清屏
                   for(zu_temp1=0;zu_temp1<250;zu_temp1++)//1ms
                     {
                      for(zu_temp2=0;zu_temp2<100;zu_temp2++);//400us
                     }
                   p_renew=&first_page[0];    //main menu page  ( 与ABS联机测试....)
                   need_chang_kaiguan=1;   //enable change_lamp symbol
                   renew_led(p_renew);      //display main menu 1 page
              }
              if(menu_page==1)
              {
                   p_renew=&second_page[0];
                   renew_led(p_renew);      //display main menu 2 page
              }

          }//if(need_renew_lcd)
     /************************************************************* */
          if(need_move_cursor)        //开启光标移动功能
          {
              need_move_cursor=0;    //disable change_cursor symbol
              move_cursor(cursor_hang);  //display tuobiao at cursor_hang
          }
          /************************************************************* */
          if(need_chang_kaiguan)           //背光开关转换功能
          {
               need_chang_kaiguan=0;      //disable change_lamp symbol
               back_lamp_contrl(back_lamp);
          }
          /************************************************************* */
        //  key_excu();
          //{
          if(key_last2==0x0e)      //1=no_key
           {
               need_chang_kaiguan=0;
               key_last2=0;
                 switch (menu_page)
                  {
                  case no_menu1:
                     {
                      cursor_hang=0x10;
                      need_move_cursor=1;
                      need_renew_lcd=1;

                      break;
                     }
                  case no_menu2:
                     {
                      cursor_hang=0x14;
                      need_move_cursor=1;
                      need_renew_lcd=1;

                      break;
                     }
                   case no_menu3:
                     {
                      cursor_hang=0x20;
                      need_move_cursor=1;
                      need_renew_lcd=1;

                      break;
                     }
                   case no_menu4:
                     {
                      cursor_hang=0x24;
                      need_move_cursor=1;
                      need_renew_lcd=1;
                      break;
                     }
                   /* case no_menu5:
                     {
                      cursor_hang=0x10;
                      need_move_cursor=1;
                      need_renew_lcd=1;
                      break;
                     }  */
                  /*  case no_menu6:
                     {
                      cursor_hang=0;
                      need_move_cursor=1;
                      need_renew_lcd=1;
                      break;
                     }
                     case no_menu7:
                     {
                      cursor_hang=0;
                      need_move_cursor=1;
                      need_renew_lcd=1;
                      break;
                     }  */
                   default:
                     {
                      cursor_hang=1;
                      need_move_cursor=1;
                      need_renew_lcd=1;

                      break;
                     }

                  }//switch (menu_page)


           }

           if(key_last2==0x0d)      //2=up_key
           {
              key_last2=0;
              cursor_up_proc();
           }//if(key_last2==0x0d)      //2
           if(key_last2==0x0b)       //3=down_key
           {
              key_last2=0;
                cursor_down_proc();
           }//if(key_last2==0x0b)       //3
           if(key_last2==0x07)       //4=yes_key
           {
              key_last2=0;
              switch(cursor_hang)
              {
                  case 1:                //下载故障
                       cursor_hang= 0x64;    //(0x33)正在下载故障 请稍等...
                       need_renew_lcd=1;
                       set_lcd_page();
                       tx_download();
                       break;

                  case 3:                              //背光开关
                       back_lamp=~back_lamp;
                       need_chang_kaiguan=1;
                       break;
                  case 2:                 //显示故障
                     /* datacomm2[0]=0x77;
                      datacomm2[1]=0xff;
                      datacomm2[2]=0x03; */
                     /* t_tx(datacomm2[0]);
                      t_tx(datacomm2[1]);
                      t_tx(datacomm2[2]);   */
                       if (datacomm2[0]==0&&datacomm2[1]==0&&datacomm2[2]==0
                      )
                        { cursor_hang= 0x74;       //(0x36)无故障显示
                          menu_page=no_menu4;
                          need_renew_lcd=1;
                        }
                       else
                       cursor_hang=0x10;
                             need_move_cursor=1;
                             need_renew_lcd=1;
                       break;
                }
              }//if(key_last2==0x07)
        }//while(1)
}//main()


/************************************************************* */
void t() interrupt 1 //1MS中断

{ /*   unsigned char datacomm,l;
     datacomm=0x11;
     l=8  ;   */
    int n;
    TL0=0X17;
    TH0=0XFC;      //1ms
    //
    deng_t1++;

    if(deng_t1>250)
    {
         deng_t1=0;
         P12_save=~P12_save;
         P12=P12_save;

    }
    //
    scan_key();                     //1ms  scan  key
}
/************************************************************* */
void initial(void)
{
  IE=0X82;                           //允许T0中断
 //TMOD &= 0XF0;                    // clear Timer 0
 TMOD  = 0X21;                   //T1 is 方式2 ,T0工作于方式1
 PCON=0;
 SCON=0X50;                   //串口工作方式1,固定波特率
// TCON=0X02;
 TL0 = 0X0;                   // value set by user
 TH0 = 0X0;                  // value set by user
 TL1=0x100-(unsigned long)(FOSC*1000/(12*32*BAUD_RATE/2));
 TH1=TL1;

 TR0 = 1;
 TR1=1;
 PCON=0X80;
 IP=0X10;                       //串口中断为高优先级
// ES=1;                       //允许串口中断
 EA=1;
 }


/************************************************************* */
restar_lcd()                                  //send write directive to lcd
{
     P10=0;
     for(zu_temp1=0;zu_temp1<250;zu_temp1++)//1ms
     {
         for(zu_temp2=0;zu_temp2<100;zu_temp2++);//400us
     }
     P10=1;
}
/************************************************************* */
init_ram()
{
    need_renew_lcd=1;
    //p_renew=&welcome[0];
    cursor_hang=120;        //display huitu page
    need_move_cursor=0;
    back_lamp=1;
    P11=0;     //背光灯亮
    need_chang_kaiguan=0;
    //menu_page=120;
    for(zu_temp1=0;zu_temp1<8;zu_temp1++)
       datacomm2[0]=0;     //清零故障标识变量
       datacomm2[1]=0;
       datacomm2[2]=0;
       zu_temp4=0;
       zu_temp5=0;
       zu_temp6=0;
       zu_temp7=0;
       zu_temp8=0;
    //  zu_temp9=0;
}
/************************************************************* */
init_lcd()
{
    ansi();
    PBYTE[0X00]=0x30;   //8位输入
    ansi();
    PBYTE[0X00]=0x30;   //8位输入
    ansi();
    PBYTE[0X00]=0x0c;   //打开显示
    ansi();
    PBYTE[0X00]=0x01;   //清屏
    for(zu_temp1=0;zu_temp1<250;zu_temp1++)//1ms
    {
         for(zu_temp2=0;zu_temp2<100;zu_temp2++);//400us
    }
}
/************************************************************* */
set_lcd_jiben()
{
    ansi();
    PBYTE[0X00]=0x30;   //8位输入
    ansi();
    PBYTE[0X00]=0x30;   //8位输入
}
/************************************************************* */
set_lcd_kuocong()
{
    ansi();
    PBYTE[0X00]=0x34;   //8位输入
    ansi();
    PBYTE[0X00]=0x36;   //8位输入
}
/************************************************************* */
renew_led(unsigned char * p_rom)  //write display_code(* p_rom) to lcd
{                                 //as page write  display_code(* p_rom)
    ansi();
    PBYTE[0X00]=0X80;
    for(zu_temp1=0;zu_temp1<16;zu_temp1++)
    {
       ansi();
       PBYTE[0X01]=* p_rom;
       p_rom++;
    }
    //
    ansi();
    PBYTE[0X00]=0X90;
    for(zu_temp1=0;zu_temp1<16;zu_temp1++)
    {
       ansi();
       PBYTE[0X01]=* p_rom;
       p_rom++;
    }
    //
    ansi();
    PBYTE[0X00]=0X88;
    for(zu_temp1=0;zu_temp1<16;zu_temp1++)
    {
       ansi();
       PBYTE[0X01]=* p_rom;
       p_rom++;
    }
    //
    ansi();
    PBYTE[0X00]=0X98;
    for(zu_temp1=0;zu_temp1<16;zu_temp1++)
    {
       ansi();
       PBYTE[0X01]=* p_rom;
       p_rom++;
    }
}
/************************************************************* */
ansi()
{
    unsigned char yan1;
    for(yan1=0;yan1<200;yan1++);
}
ansi1()
{
    unsigned char yan1;
    for(yan1=0;yan1<70;yan1++);
}
 /************************************************************* */
scan_key()   //采样键盘口数据识别并判别按键号
{
     unsigned char aaa;
     aaa=P2;            //read P2 port
     aaa=aaa& 0x0f;     //clear p24--p27
     if(aaa<0x0f)
     {
         key1=aaa;       //第一次采样P2数据
         if(key1==key2)
         {
             //key_last=key1;
             if(have_key == 0)      //确定是否曾识别出按键
             {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -