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

📄 main_lsd.c

📁 用单片机的C语言实现的开机时间显示上次关机时间(存在看门狗里)
💻 C
📖 第 1 页 / 共 4 页
字号:
/*****************************************************/
/* 远程智能数据采集终端单片机C语言的实现   作者:吕书东 */
/*****************************************************/

#include <reg51.h>
#include<absacc.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int
#define wr_addr 0xa2     //i2c write address
#define NOP() _nop_()    //define a null command


//define for LCD
#define RCOMM   XBYTE[0x8000] //right half
#define LCOMM   XBYTE[0x8800] //lift half
#define RWRITE  XBYTE[0x8001] //write right half addr
#define LWRITE  XBYTE[0x8801] //write lift half addr
#define RREAD   XBYTE[0x8003] //read right half addr
#define LREAD   XBYTE[0x8803] //read lift half addr
#define STATE   XBYTE[0x8002] //state busy flag addr

//define for 5045
#define WREN 0x06   //write enable
#define WRDI 0x04   //write lock
#define RDSR 0x05   //read regester
#define WRSR 0x01   //write regester
#define READ0 0x03  //read 0 page address
#define WRITE0 0x02 //write 0 page address

//define for keyboard
#define com8155 XBYTE[0xa100] //8155 command register 
#define pa8155 XBYTE[0xa101]  //8155pa
#define pb8155 XBYTE[0xa102]  //8155pb
#define IndexForCom8155 XBYTE[0xa103]  //8155IndexForCom

sbit SDA=P1^0;      //i2c data
sbit SCL=P1^1;      //i2c clock
bit ACK;            //i2c ack signal

sbit SDO=P1^4;      //data in for 5045
sbit SDI=P1^5;      //data out for 5045
sbit SCK=P1^3;      //clk
sbit CS=P1^7;       
sbit protect=P1^6;  

sbit key_busy=P3^2; //key interrupt

#define IN0 XBYTE[0x9000]    //A/D IN0
sbit ADEOC=P3^5;    //EOC of ADC0809

uchar      year1,year0,year,
           month1,month0,month,
           day1,day0,day,
           date0,date,
           hour1,hour0,hour,
           minute1,minute0,minute,
           second1,second0,second;
uchar      year4,year3,year2, 
           month4,month3,month2,
           date4,date3,date2,
           hour4,hour3,hour2,
           minute4,minute3,minute2,
           second4,second3,second2, 
           day3;

uchar n;
uchar IndexForCom; //index for command array from computer
uint address_ram; //62256地址
uint address_scom; //address for fetch data
bit flag; //send signal?


unsigned char code lib8[170][8]={
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00},
{0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00}, //0 0 

{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00},
{0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00}, //1 1 

{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00},
{0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00}, //2 2 

{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00},
{0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00}, //3 3 

{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00},
{0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00}, //4 4 

{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00},
{0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00}, //5 5 

{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00},
{0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00}, //6 6 

{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00},
{0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00}, //7 7 

{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00},
{0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00}, //8 8 

{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00},
{0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}, //9 9 

{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80},
{0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //一 1 

{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04},
{0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00},
{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10},
{0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00}, //二 2 

{0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84},
{0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00},
{0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20},
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00}, //三 3 

{0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02},
{0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00},
{0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20},
{0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00}, //四 4

{0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82},
{0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00},
{0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20},
{0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00}, //五 5 

{0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E},
{0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00},
{0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00},
{0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00}, //六 6 

{0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22},
{0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00},
{0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04},
{0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00}, //年 7 

{0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11},
{0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00},
{0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01},
{0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00}, //月 8 

{0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42},
{0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10},
{0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00}, //日 0 

{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00},
{0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00}, //: 10 

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //一个字的空格 9 
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

{0x00,0x00,0x40,0x42,0x5C,0x48,0x40,0x40},
{0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00},
{0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22}, //当 10
{0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00},

{0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08},
{0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00},
{0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00}, //前 11
{0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00},

{0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90},
{0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00},
{0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00}, //时 12
{0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00},

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //一个字符的空格 11

{0x00,0x48,0xe8,0x58,0x49,0xce,0xea,0x48},
{0x08,0x00,0xf8,0x00,0x00,0xff,0x00,0x00},
{0x48,0x48,0x24,0x26,0x13,0x09,0x0c,0x76}, //刻 13
{0x23,0x02,0x07,0x40,0x80,0x7f,0x00,0x00},

{0x00,0x10,0x10,0x10,0x11,0x1e,0x14,0xf0},
{0x10,0x18,0x17,0x12,0x18,0x10,0x00,0x00},
{0x01,0x81,0x41,0x21,0x11,0x09,0x05,0x03}, //关 14
{0x05,0x09,0x31,0x61,0xc1,0x41,0x00,0x00},

{0x08,0x08,0xc8,0xff,0x48,0x88,0x08,0x00},
{0xfe,0x02,0x02,0x02,0xfe,0x00,0x00,0x00}, //机 15
{0x04,0x03,0x00,0xff,0x00,0x40,0x30,0x0c},
{0x03,0x00,0x00,0x00,0x3f,0x40,0x78,0x00},

{0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9F},
{0x81,0x81,0x81,0x9F,0xA0,0x20,0x20,0x00},
{0x00,0x00,0x00,0x7F,0xA0,0x90,0x40,0x43},
{0x2C,0x10,0x28,0x26,0x41,0xC0,0x40,0x00}, //设 16

{0x00,0x10,0x17,0xD5,0x55,0x57,0x55,0x7D},
{0x55,0x57,0x55,0xD5,0x17,0x10,0x00,0x00},
{0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55},
{0x55,0x55,0x55,0x7F,0x40,0x60,0x40,0x00}, //置 17

{0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE},
{0x92,0x9A,0xD2,0x82,0xFF,0x02,0x00,0x00},
{0x40,0x20,0x1F,0x00,0x00,0x7E,0x22,0x22},
{0x22,0x3F,0x42,0x80,0x7F,0x00,0x00,0x00}, //周 18

{0x00,0x80,0x40,0x20,0x98,0x86,0x80,0x80},
{0x83,0x8C,0x90,0x20,0xC0,0x80,0x80,0x00},
{0x01,0x00,0x80,0x40,0x20,0x1F,0x00,0x40},
{0x80,0x40,0x3F,0x00,0x00,0x01,0x00,0x00}, //分 19

{0x20,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x80},
{0x70,0x00,0xFF,0x00,0x10,0x20,0x60,0x00},
{0x10,0x08,0x06,0x01,0xFF,0x00,0x81,0x80},
{0x40,0x20,0x17,0x08,0x04,0x03,0x00,0x00}, //秒 20

{0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE}, //正 21
{0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00},
{0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F},
{0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00},

{0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08}, //在 22
{0x08,0xE8,0x08,0x88,0x08,0x0C,0x08,0x00},
{0x08,0x04,0x02,0xFF,0x00,0x40,0x41,0x41},
{0x41,0x7F,0x41,0x41,0x41,0x60,0x40,0x00},

{0x00,0x04,0x04,0x14,0x24,0x04,0x04,0xD4}, //采 23
{0x24,0x02,0x22,0x12,0x1B,0x82,0x00,0x00},
{0x01,0x21,0x21,0x11,0x09,0x05,0x03,0xFF},
{0x03,0x05,0x09,0x09,0x11,0x31,0x11,0x00},

{0x20,0x10,0x08,0xFC,0x57,0x54,0x54,0xFD}, //集 24
{0x56,0x54,0x54,0x56,0x04,0x00,0x00,0x00},
{0x04,0x44,0x44,0x27,0x15,0x0D,0x05,0xFF},
{0x05,0x0D,0x15,0x25,0x65,0x24,0x04,0x00},

{0x00,0x00,0xc0,0x38,0xe0,0x00,0x00,0x00}, //A 0A
{0x20,0x3c,0x23,0x02,0x02,0x27,0x38,0x20},

{0x08,0xf8,0x88,0x88,0x88,0x70,0x00,0x00}, //B 0B
{0x20,0x3f,0x20,0x20,0x20,0x11,0x0e,0x00},

{0xc0,0x30,0x08,0x08,0x08,0x08,0x38,0x00}, //C 0C
{0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},

{0x08,0xf8,0x08,0x08,0x08,0x10,0xe0,0x00}, //D 0D
{0x20,0x3f,0x20,0x20,0x20,0x20,0x0f,0x00},

{0x08,0xf8,0x88,0x88,0xe8,0x08,0x10,0x00}, //E 0E
{0x20,0x3f,0x20,0x20,0x23,0x20,0x18,0x00},

{0x08,0xf8,0x88,0x88,0xe8,0x08,0x10,0x00}, //F 0F
{0x20,0x3f,0x20,0x00,0x03,0x00,0x00,0x00},

{0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00}, //. 18
{0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00},

{0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52}, 
{0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00},
{0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02},
{0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00}, //数 25

{0x08,0x08,0x08,0xFF,0x88,0x40,0xFE,0x92}, 
{0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00},
{0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0xFC},
{0x44,0x44,0x47,0x44,0x44,0xFC,0x00,0x00}, //据 26

{0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF}, 
{0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00},
{0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF},
{0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00}, //中 27

{0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0xE6},
{0x24,0x24,0x34,0x24,0x04,0x14,0x0C,0x00},
{0x80,0x40,0x20,0x1F,0x20,0x40,0x40,0x7F},
{0x42,0x42,0x43,0x42,0x40,0x60,0x20,0x00}, //定 28

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},
{0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00},
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F},
{0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00}, //上 29

{0x80,0x40,0x20,0xF8,0x47,0x48,0x48,0x48},
{0xC8,0x7F,0x48,0x48,0x4C,0x68,0x40,0x00},
{0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x0B},
{0x12,0x62,0xD2,0x0A,0x06,0x02,0x00,0x00}, //传 30

{0x10,0x10,0x10,0xFF,0x90,0x50,0x00,0xFC},
{0x92,0x80,0xFF,0x80,0x92,0xFF,0x02,0x00},
{0x02,0x42,0x81,0x7F,0x00,0x00,0x82,0x82},
{0x46,0x2A,0x13,0x2A,0x46,0xC2,0x40,0x00}, //搜 31

{0x40,0x30,0x14,0x14,0x94,0xD4,0xB4,0x9F},
{0x94,0x94,0x54,0x16,0x14,0x50,0x30,0x00},
{0x00,0x00,0x44,0x24,0x14,0x44,0x86,0x7D},
{0x04,0x04,0x14,0x26,0x6C,0x00,0x00,0x00} //索 32

};

/******* The module of delay function  ****************/
void delay( uchar y )
{
   uint i;
   while(y-->0)
   {
   	for(i=0;i<2000;i++)
   	{;}
   }   
}
/************************************************************/

/**********************  busy flag for LCD  ****************/                                       
void busy( )
 {
   uchar i;
   i=STATE;
   while((i&0x80)!=0) //check the MSB(1 for write and read)  
    {i=STATE;}
    return;
}
/************************************************************/


/*********** The module of LCD display function ********/
void display(uchar Data,uchar length,uchar xpage,uchar y,bit side)
 {
   uchar addr,i,dd,j;
   if(side==0)
    {
     LCOMM=xpage;
     busy();
     LCOMM=y;
    }
   else
    {
     RCOMM=xpage;
     busy();
     RCOMM=y;
    }
   if(length==0x10)
    { switch(Data)
     {
      case 0x00: addr=0x34;goto BB; //日
      case 0x01: addr=0x14;goto BB; //一
      case 0x02: addr=0x18;goto BB; //二
      case 0x03: addr=0x1c;goto BB; //三
      case 0x04: addr=0x20;goto BB; //四
      case 0x05: addr=0x24;goto BB; //五
      case 0x06: addr=0x28;goto BB; //六
      case 0x07: addr=0x2c;goto BB; //年
      case 0x08: addr=0x30;goto BB; //月
      case 0x09: addr=0x3a;goto BB; //空格
      case 0x10: addr=0x3e;goto BB; //当
      case 0x11: addr=0x42;goto BB; //前
      case 0x12: addr=0x46;goto BB; //时
      case 0x13: addr=0x4c;goto BB; //刻
      case 0x14: addr=0x50;goto BB; //关
      case 0x15: addr=0x54;goto BB; //机
      case 0x16: addr=0x58;goto BB; //设
      case 0x17: addr=0x5c;goto BB; //置
      case 0x18: addr=0x60;goto BB; //周
      case 0x19: addr=0x64;goto BB; //分
      case 0x20: addr=0x68;goto BB; //秒
      case 0x21: addr=0x6c;goto BB; //正
      case 0x22: addr=0x70;goto BB; //在
      case 0x23: addr=0x74;goto BB; //采
      case 0x24: addr=0x78;goto BB; //集
      case 0x25: addr=0x8A;goto BB; //数
      case 0x26: addr=0x8E;goto BB; //据
      case 0x27: addr=0x92;goto BB; //中
      case 0x28: addr=0x96;goto BB; //定
      case 0x29: addr=0x9A;goto BB; //上
      case 0x30: addr=0x9E;goto BB; //传
      case 0x31: addr=0xA2;goto BB; //搜
      case 0x32: addr=0xA6;goto BB; //索
      default:              break;
     }
  BB: for(i=0;i<2;i++)
      {
      	for(j=0;j<8;j++)
      	{ dd=lib8[addr+i][j];
      	  if (side==0)     LWRITE=dd;
      	  else             RWRITE=dd;
      	  busy();
  	     }
      }
      xpage=xpage+1;
      
      if(side==0)
       {
        LCOMM=xpage;
        busy();
        LCOMM=y;
       }
      else
      {
       RCOMM=xpage;
       busy();
       RCOMM=y;
      }
     for(i=0;i<2;i++)
      {
      	for(j=0;j<8;j++)
      	 { dd=lib8[addr+i+2][j];
      	   if (side==0)     LWRITE=dd;
      	   else             RWRITE=dd;
  	       busy();
         }
      }
     }
   else
    {switch(Data)
     {
       case 0x00: addr=0x00;goto AA; //0
       case 0x01: addr=0x02;goto AA; //1
       case 0x02: addr=0x04;goto AA; //2
       case 0x03: addr=0x06;goto AA; //3
       case 0x04: addr=0x08;goto AA; //4
       case 0x05: addr=0x0a;goto AA; //5
       case 0x06: addr=0x0c;goto AA; //6
       case 0x07: addr=0x0e;goto AA; //7
       case 0x08: addr=0x10;goto AA; //8
       case 0x09: addr=0x12;goto AA; //9
       case 0x10: addr=0x38;goto AA; //:
       case 0x11: addr=0x4a;goto AA; //空格
       case 0x0A: addr=0x7c;goto AA; //A
       case 0x0B: addr=0x7e;goto AA; //B
       case 0x0C: addr=0x80;goto AA; //C
       case 0x0D: addr=0x82;goto AA; //D
       case 0x0E: addr=0x84;goto AA; //E
       case 0x0F: addr=0x86;goto AA; //F
       case 0x18: addr=0x88;goto AA; //.
       default:              break;
      }
  AA:    for(i=0;i<2;i++)
      {
      	for(j=0;j<8;j++)
      	{ dd=lib8[addr+i][j];
      	  if (side==0)     LWRITE=dd;
      	  else             RWRITE=dd;
  	    }
  	    xpage=xpage+1;
  	    if(side==0)
  	    {
         LCOMM=xpage;
         busy();
         LCOMM=y;
        }
        else
        {
         RCOMM=xpage;
         busy();
         RCOMM=y;
        }      
     } 
}
}
/*************************************************/


/*************************************************/
/*        the sub functions of I2c               */
/*************************************************/

/*******  Start i2c device bus    ************/
void Start_i2c()
 { 
  SDA=1;   
  NOP();
  SCL=1;
  NOP();
  NOP();
  NOP();
  NOP();
  NOP();
  SDA=0;
  NOP();
  NOP();
  NOP();
  NOP();
  NOP();
  SCL=0;
  NOP();
  NOP();
 }
/*************************************************/
/******   Stop i2c device bus     **************/
void Stop_i2c()   
 {
  SDA=0;
  NOP();
  SCL=1;
  NOP();
  NOP();
  NOP();
  NOP();
  NOP();
  SDA=1;
  NOP();
  NOP();
  NOP();
  NOP();
 }
/*************************************************/

/********  Set ACK signal function  ************/       
void MACK(bit a)  
 {
  if(a==0) SDA=0;
  else     SDA=1;
  NOP();
  NOP();
  NOP();
  SCL=1;
  NOP();
  NOP();
  NOP();
  NOP();
  NOP();
  SCL=0;
  NOP();
  NOP();
 }
/*************************************************/

/*****  flag byte to the i2c device  *********/
 void WrByte(uchar c)     
  {
   uchar count;
   for(count=0;count<8;count++)

⌨️ 快捷键说明

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