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

📄 text2.c

📁 漏气测试12864显示 MCU STC89C51芯片
💻 C
📖 第 1 页 / 共 2 页
字号:
		#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int 
sbit  ACC0=ACC^0;
sbit  ACC7=ACC^7;
/*-----------------------------1302:引角配置--------------------------

--*/
sbit Rst_1302=P2^4;
sbit Io_1302=P2^3;
sbit Clk_1302=P2^2;
sbit RemPin0=P3^2 ;
sbit RemPin =P3^3 ;
uchar receive[3];

unsigned char ci	;

unsigned char XPOS,YPOS;




/*---------------------------12864:引脚配置---------------------------

--*/
#define Lcd_Bus P0  //MCU P1<------> LCM
sbit Cs1_12864=P2^3;  //Master chip enable
sbit Cs2_12864=P2^4;  //Slave chip enable
sbit E_12864=P2^2; //6800 mode Enable single
sbit Rs_12864=P2^0;  //Data or Instrument Select
sbit Rw_12864=P2^1;  //Write or Read
/*--------------------------12864:控制寄存器--------------------------

-*/
#define Disp_On  0x3f
#define Disp_Off 0x3e
#define Col_Add  0x40
#define Page_Add 0xb8
#define Start_Line 0xc0

 unsigned char code ok[12][32]={

0x10,0xF8,0xFF,0xB7,0xFE,0xBE,0xF6,0xF0,0x26,0xBE,0x1E,0xA6,0xA6,0x3E,0x1E,0x00,
0x60,0x3F,0x0F,0x04,0x1F,0x64,0x7F,0x3F,0x02,0x0D,0x0D,0x7F,0x7F,0x0D,0x0D,0x00,/*"解",0*/

0x86,0xC6,0xFE,0xFE,0xC6,0xC6,0x00,0x06,0xF6,0xF6,0x86,0x86,0xFE,0xFE,0x80,0x00,
0x01,0x1F,0x1F,0x0C,0x1F,0x1F,0x00,0x0C,0x0D,0x0D,0x0D,0x2D,0x61,0x7F,0x3F,0x00,/*"码",1*/

0x00,0x00,0xFC,0xFC,0xCC,0xCC,0xCC,0x0C,0xFF,0xFF,0x0C,0xCF,0xCF,0x0C,0x00,0x00,
0x20,0x78,0x1F,0x07,0x08,0x0F,0x6F,0x30,0x19,0x0F,0x1E,0x33,0x61,0x78,0x38,0x00,/*"成",2*/

0x0C,0x0C,0xFC,0xFC,0x0C,0x0C,0x30,0x30,0xFF,0xFF,0x30,0x30,0xF0,0xF0,0x00,0x00,
0x18,0x18,0x1F,0x0F,0x2C,0x6C,0x30,0x1C,0x0F,0x03,0x60,0x60,0x7F,0x3F,0x00,0x00,/*"功",3*/

0x60,0x7C,0x60,0xFF,0xFF,0x6C,0x6C,0x00,0xF6,0x36,0xBE,0xBE,0x36,0xF6,0xF6,0x00,
0x24,0x67,0x60,0x3F,0x1F,0x0C,0x07,0x40,0x67,0x30,0x1F,0x0F,0x10,0x37,0x67,0x00,/*"频",2*/

0x06,0x06,0x9E,0x96,0x26,0xB6,0xFF,0x6F,0xB6,0x96,0x26,0xB6,0x96,0x06,0x00,0x00,
0x0C,0x0D,0x0D,0x0C,0x0D,0x0D,0x7F,0x7F,0x0D,0x0D,0x0D,0x0C,0x0D,0x0D,0x00,0x00,/*"率",3*/


0x30,0x30,0xFE,0xFE,0x30,0xC0,0xF8,0xF8,0x60,0xFE,0xFE,0x30,0xF0,0xF0,0x00,0x00,
0x18,0x18,0x1F,0x0F,0x0C,0x00,0x3F,0x7F,0x60,0x6F,0x6F,0x66,0x67,0x7B,0x38,0x00,/*"地",0*/

0x30,0x30,0xFF,0xFF,0x30,0x00,0x00,0xF0,0xF0,0x00,0xFF,0xFF,0x60,0x60,0x60,0x00,
0x18,0x18,0x0F,0x0F,0x0C,0x30,0x30,0x3F,0x3F,0x30,0x3F,0x3F,0x30,0x30,0x30,0x00,/*"址",1*/


0x18,0x5B,0x7E,0x98,0xFF,0x7F,0x3E,0x5B,0xE0,0xFF,0x1F,0x18,0xF8,0xF8,0x18,0x00,
0x43,0x43,0x6F,0x3F,0x1B,0x1B,0x1F,0x37,0x60,0x33,0x1F,0x1C,0x37,0x61,0x40,0x00,/*"数",0*/

0x18,0x18,0xFF,0xFF,0x98,0xFF,0xFF,0xDB,0xDB,0xDB,0xFB,0xFB,0xDF,0xDF,0xC0,0x00,
0x03,0x63,0x7F,0x3F,0x21,0x3F,0x1F,0x00,0x7E,0x3E,0x33,0x33,0x7E,0x7E,0x00,0x00,/*"据",1*/

0x00,0xB0,0xB8,0x9E,0x9E,0x98,0x98,0xFF,0xFF,0x98,0x98,0x98,0x98,0x80,0x00,0x00,
0x00,0x61,0x61,0x31,0x19,0x0D,0x07,0x03,0x07,0x0D,0x19,0x31,0x31,0x61,0x20,0x00,/*"失",0*/

0x00,0xFE,0xFE,0x06,0xF6,0x06,0xFE,0x80,0xE0,0xFE,0x1E,0x18,0xF8,0xF8,0x18,0x00,
0x20,0x33,0x1B,0x0C,0x07,0x18,0x53,0x41,0x61,0x37,0x1C,0x1E,0x37,0x61,0x60,0x00,/*"败",1*/
};

unsigned char code time_cha[2][32]={
/*--  文字:  时  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
/*--  文字:  间  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00};

unsigned char code dian[]={
/*--  文字: ":" --*/
/*--  宋体12;  此字体下对应的点阵为:行x列=16x8   --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00
};

unsigned char code ok1[2][16]={

0xF8,0xE0,0x00,0x00,0x00,0xE0,0xF8,0x00,0x3F,0x00,0x0F,0x30,0x0F,0x00,0x3F,0x00,/*"M",0*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,/*".",1*/

};
unsigned char code time_let[11][16]={
/*--  文字:  0  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

/*--  文字:  1  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/*--  文字:  2  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

/*--  文字:  3  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

/*--  文字:  4  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

/*--  文字:  5  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

/*--  文字:  6  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

/*--  文字:  7  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

/*--  文字:  8  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

/*--  文字:  9  --*/
/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,

0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x3F,0x01,0x01,0x01,0x01,0x01,0x00,0x00,/*"F",0*/

};

 
void Delay(uint t)
{uint i,j;
 for (i=0;i<100;i++)
 for (j=0;j<t;j++);
} 


/*--------------------------------------------------------------------

*/
/*                  DS1302                                            

*/
/*                                                                     

*/
/*--------------------------------------------------------------------

-*/
void write_dat_1302(unsigned char temp)     //DS1302:写入操作
{
   unsigned char i;
   ACC=temp;
   for(i=8;i>0;i--)
   { 
      Io_1302=ACC0;
   Clk_1302=0;     
      Clk_1302=1;
      ACC=ACC>>1;
   }
}

unsigned char read_dat_1302(void)        //DS1302:读取操作   
{
   unsigned char i;
   for(i=0;i<8;i++)
   {
      ACC=ACC>>1;
   Clk_1302 = 1;
   Clk_1302 = 0;
      ACC7 = Io_1302;
   }
   return(ACC);

}

void write_1302(unsigned char addr,unsigned char temp) //DS1302:写入数
{
   Rst_1302=0;    //停止工作
   Clk_1302=0;                                 
   Rst_1302=1;   //重新工作
   write_dat_1302(addr);    //写入地址
   
   write_dat_1302(temp);
   Rst_1302=0;
   Clk_1302=1;
}

unsigned char read_1302(unsigned char addr)   //DS1302:读取数据(先送地
{
   unsigned char temp;
   Rst_1302=0;                        //停止工作
   Clk_1302=0;  
   Rst_1302=1;                         //重新工作
   write_dat_1302(addr);   //写入地址
   temp=read_dat_1302();
   Rst_1302=0;
   Clk_1302=1;     //停止工作
   return(temp);
}

 

/*--------------------------------------------------------------------

*/
/*               12864                                           */
/*                                                                     

*/
/*--------------------------------------------------------------------

-*/
/*------------------------------12864:写命令-------------------------*/
void write_cmd_12864(unsigned char temp)
{
   Lcd_Bus=temp;
   Rs_12864=0;              //   E状态         执行动作          结果
   Rw_12864=0;              //  低/低-->高     无动作            
   E_12864=1;               //  高             数据缓冲        配合R进
   E_12864=0;               //  高-->低                        配合/W进
}


/*------------------------------12864:写资料--------------------------

--*/
void write_dat_12864(unsigned char temp)
{ 
   Lcd_Bus=temp;
   Rs_12864=1;
   Rw_12864=0;
   E_12864=0;
   E_12864=1;
   E_12864=0;
}

/*------------------------------12864:初使化-------------------------

*/
void ini_12864(void)
{
   Cs1_12864=1;  Cs2_12864=1;
   write_cmd_12864(Disp_Off);
   write_cmd_12864(Page_Add);
   write_cmd_12864(Col_Add);
   write_cmd_12864(Start_Line);
   write_cmd_12864(Disp_On);
}


/*------------------------------12864:清零---------------------------*/
void clr_12864(void)
{
   unsigned char i=0,j=0;
   Cs1_12864=1; Cs2_12864=1;
   write_cmd_12864(Page_Add);
   write_cmd_12864(Col_Add);

   for(i=0;i<8;i++)
   {
      write_cmd_12864(Page_Add+i);
      for(j=0;j<64;j++)
        write_dat_12864(0x00);
   }
   
}

/*--------------------------------12864:显示字符  行x列:16x16点     --

------------------*/
void show_cha_12864(unsigned char page, unsigned char col,unsigned char 

*poi)
{
   unsigned char i=0,j=0;
   for(i=0;i<2;i++)
   {
      write_cmd_12864(Page_Add+page+i);
   write_cmd_12864(Col_Add+col);
   for(j=0;j<16;j++)
      write_dat_12864( poi[16*i+j] );
   }
}


/*--------------------------------12864:显示字符  8x16点    ----------

----------*/
void show_let_12864(unsigned char page, unsigned char col,unsigned char 

*poi)
{
   unsigned char i=0,j=0;
   for(i=0;i<2;i++)
   {
      write_cmd_12864(Page_Add+page+i);    //2行  16个点
   write_cmd_12864(Col_Add+col);
   for(j=0;j<8;j++)             // 1列  8个点              
      write_dat_12864( poi[8*i+j] );
  }
}


/*----------------------------------12864:显示------------------------

-----------*/
void show_12864(unsigned char *poi)
{
   unsigned char i;
   clr_12864();

   Cs1_12864=0;  Cs2_12864=1;
   i=*poi/16;
   show_let_12864(0,24,time_let[i]);    // 显示sec 十位
   i=*poi%16;
   show_let_12864(0,32,time_let[i]);      // 显示sec 个位
   poi+=1;

   show_let_12864(0,16,dian);              //显示 ":"

   i=*poi/16;
   show_let_12864(0,0,time_let[i]);    // 显示min 十位   
   i=*poi%16;
   show_let_12864(0,8,time_let[i]);      // 显示min 个位
   poi+=1;

   Cs1_12864=1;  Cs2_12864=0;
   show_let_12864(0,56,dian);              //显示 ":"  
   i=*poi/16;
   show_let_12864(0,40,time_let[i]);    // 显示hour 十位
   i=*poi%16;
   show_let_12864(0,48,time_let[i]);      // 显示hour 个位
   
   
   show_cha_12864(0,0,time_cha[0]);   // "时"
   show_cha_12864(0,16,time_cha[1]);  //  "间"
}




void RemIn0(void) interrupt 0  using 0
{
    unsigned char i,j,date	,x1,x2;
	bit date1,date2;
    unsigned int temp;

EX0=0;  //打开INT0中断请求

 TH0=0;
   TL0=0; 
   
      while (!RemPin0); //等待高电平
    TR0=1;
    while (RemPin0)  //等待低电平
        if (TF0==1)  goto end0; //超时就退出;
    TR0=0;
    temp=TH0;
    temp=(temp<<8)+TL0;

    if (temp>18000 || temp<4000)   //判断同步码的宽度
    {
      
  goto end0;
    }
//同步码检测成功
  
   if (temp<18000 && temp>13000) 

   {
   x1=4;
   x2=7;
    for (i=0; i<3; i++) //解 3*8=24 位码 
    for (j=0; j<8; j++)
    {
        while (!RemPin0);  //等待高电平
        TH0=0;
    TL0=0; 
  TR0=1;
        while (RemPin0)  //等待低电平
            if (TF0==1) goto end0; //超时就退出
  TR0=0;
        temp=TH0;
        temp=((temp<<8)+TL0);
       if (temp>1200 && temp<1800)
        { 
            receive[i]=receive[i]<<1;
            receive[i]=receive[i]+1; //保存 1
        }
        else if (temp>300 && temp<702)
            {
                receive[i]=receive[i]<<1;   //保存0
            }
            else goto end0;
    }

   }



	   if (temp<13000 && temp>8000) 
	  
   {x1=3;
   x2=3;
    for (i=0; i<3; i++) //解 3*8=24 位码 
    for (j=0; j<8; j++)
    {
        while (!RemPin0);  //等待高电平
        TH0=0;
    TL0=0; 
  TR0=1;
        while (RemPin0)  //等待低电平
            if (TF0==1) goto end0; //超时就退出
  TR0=0;
        temp=TH0;
        temp=((temp<<8)+TL0);


  //      /*
        if (temp>800 && temp<1200)
        { 
            receive[i]=receive[i]<<1;
            receive[i]=receive[i]+1; //保存 1
        }
        else if (temp>200 && temp<600)
            {
                receive[i]=receive[i]<<1;   //保存0
            }
            else goto end0;
    }

   }


      if (temp<8000 && temp>4000) 

   {  x1=1;
      x2=5;
    for (i=0; i<3; i++) //解 3*8=24 位码 
    for (j=0; j<8; j++)
    {
        while (!RemPin0);  //等待高电平
        TH0=0;
    TL0=0; 
  TR0=1;
        while (RemPin0)  //等待低电平
            if (TF0==1) goto end0; //超时就退出
  TR0=0;
        temp=TH0;
        temp=((temp<<8)+TL0);


  //      /*
        if (temp>300 && temp<900)
        { 
            receive[i]=receive[i]<<1;
            receive[i]=receive[i]+1; //保存 1
        }
        else if (temp>20&& temp<300)
            {
                receive[i]=receive[i]<<1;   //保存0
            }

⌨️ 快捷键说明

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