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

📄 x1228.c

📁 C51 DOS/WINDOWS下的MCS51系列实时时钟(X1228)的C驱动程序
💻 C
字号:
/***********************************************************/
/*   VFD12864D.C程序  汉字、西文(数字)分别调用不同的函数 */
/*   未将汉字拆成2个8×16的字体                            */
/*   程序rec_ack()中将if(SDA==1)改为while(SDA==1)          */
/***********************************************************/
#include <reg52.h>
#include <absacc.h>
#include <math.h>
//#include <string.h>
#define VFDWRITE 0x8000/*VFD写入口地址*/
#define VFDCONTROL 0x8800/*VFD状态选择控制地址*/
sbit SCL=P1^6;
sbit SDA=P1^7;
sbit AD_SCLK=P1^2;
sbit AD_DOUT=P1^0;
sbit AD_DIN=P1^1;
sbit AD_CS=P1^3;
unsigned char idata year,month,week,day,hour,minute,second;/*时间寄存器*/
unsigned int idata seri_num=1234,age=28,area=225;/*序号,龄期,截面积*/
unsigned int idata adbuffer,advalue;/*AD采样寄存器*/
unsigned int idata pressure,max_press,accl;/*即时压力,破型力值,加载速度*/
unsigned char idata codes=1234;/*原始设定密码*/
//unsigned char passwords[4];/*用户输入四位密码*/
unsigned char picture;/*选择画面标志*/
//unsigned char idata engbuf[64];/*将屏幕分成64个单元(8×16点阵)*/
unsigned char idata chnbuf[32];/*将屏幕分成32个单元(16×16点阵),汉字缓冲区*/
unsigned char idata numbuf[21];/*显示画面2中,将屏幕上最上一行分成 21个(6×8)单元*/
unsigned char code_1;/*指向数组的第几行*/
unsigned char xxx;/*同一编号的试样一般测试三块 xxx表示第几块 */
unsigned char keyval;/*键值*/
unsigned char count;/*标定点计数*/
unsigned long  caiyang=16777215;
unsigned char yyy;
unsigned long zzz;


/**************************************/
/*            延时函数                */
/**************************************/                                  
delay(int num)     
 {
  int i;
  for(i=0;i<num;i++)
  {;}
 }

/***********************************************************/
/*       X1228芯片读写子程序                               */ 
/***********************************************************/
void start()
     {
     	SDA=1;
     	SCL=1;
     	SDA=0;
     	SCL=0;
     }
void stop()
     {
     	SDA=0;
     	SCL=1;
     	SDA=1;
     	SCL=0;
     }
void write_byte(unsigned char byte)/*写一个字节*/
     {
        char count;
        for(count=0;count<=7;count++)
          {     
               	SCL=0;
          	if((byte & 0x80)==0)
          	  SDA=0;
          	else
          	  SDA=1;          	
          	byte=byte<<1;
          	SCL=1;          
          }
        SCL=0;       
     }
void rec_ack()/*接收确认信号*/
     {
        SDA=1;
        for(;;) 
        {
         SCL=1;
//         while(SDA==1){delay(10);}
         delay(50);
     	 break;
     	}
     	SCL=0;
     }
void write(char slave,char high,char low,char dat)/*CCR或ARRAY,地址高位,地址低位,数据*/
     {
     	write_byte(slave);
     	rec_ack();
     	write_byte(high);
     	rec_ack();
     	write_byte(low);
     	rec_ack();
     	write_byte(dat);
     	rec_ack();
     }     
char rec_dat()/*接收X1228一个字节的数据*/
     {  
        unsigned char number=0x00;
        unsigned char count;
        write_byte(0xdf);/*读数据*/
        rec_ack();/*接收应答信号*/
        SCL=0;
        for(count=0;count<=7;count++)
         {
           number=number<<1;
           SCL=1;
           SDA=1;/*P1.4口置位*/
           if(SDA==1)
             {
              number=number+1;
             }           
           SCL=0;
         }
        return(number); 
     }     
void read(char slave,char high,char low)/*从EEPROM或CCR任意地址中读一个字节数据*/
     {
     	write_byte(slave);
     	rec_ack();
     	write_byte(high);
     	rec_ack();
     	write_byte(low);
     	rec_ack();
     }
/******************************************************/ 
/*  读X1228芯片,将年月日时分秒赋值给相应的全局变量   */
/*       year month day hour minute second            */
/******************************************************/ 
void read_time()
   {  start();
      read(0xde,0x00,0x35);/*假写,指定要读内容的地址,读地址0x0035的内容,年*/ 	
      start();     	
      year=rec_dat();
      stop();
      start(); 
      read(0xde,0x00,0x34);/*假写,指定要读内容的地址,读地址0x0034的内容,月*/ 	
      start();     	
      month=rec_dat();
      stop();
      start(); 
      read(0xde,0x00,0x33);/*假写,指定要读内容的地址,读地址0x0033的内容,日*/ 	
      start();     	
      day=rec_dat();      
      stop();
      start(); 
      read(0xde,0x00,0x32);/*假写,指定要读内容的地址,读地址0x0032的内容,时*/ 	
      start();     	
      hour=rec_dat()-0x80; /*最高位为1,表示时间是24小时制的,读取时间应减去这一位*/
      stop();
      start(); 
      read(0xde,0x00,0x31);/*假写,指定要读内容的地址,读地址0x0031的内容,分*/ 	
      start();     	
      minute=rec_dat();
      stop();
      start();
      read(0xde,0x00,0x30);/*假写,指定要读内容的地址,读地址0x0030的内容,秒*/ 	
      start();     	
      second=rec_dat();
      stop();
   }



/**************************************************/
/*    通过按键,修改X1228芯片数据,设置时间        */
/*    改变全局变量year month day hour minute      */
/*                seri_num age area等             */
/*    并将修改值发送到X1228芯片                   */
/**************************************************/
void set_time()
 {
   ;
 }

void set_zhi()
 {
   ;
 }


/**************************************************************************************/
/*                                                                                    */
/*                          主程序                                                    */
/*                                                                                    */
/**************************************************************************************/
void main ()
{   
  unsigned char a,b,c,d;
  unsigned char n;
}

⌨️ 快捷键说明

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