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

📄 aw60iic+rx8025模拟io.txt

📁 刚完成的飞思卡尔AW60单片机用IIC总线读取RX8025,并在大点阵液晶屏幕上显示的驱动程序
💻 TXT
字号:
#include "Cpu.h"
#include "mealue.h"
#include "LCD.h" 


typedef unsigned int uint;
typedef unsigned char uchar;
#define W_8025_ADDR 0X64
#define R_8025_ADDR 0X65 




#ifndef SDA
#define SDA PTCD_PTCD1
#endif
#ifndef SCL
#define SCL PTCD_PTCD0
#endif
byte date1,date2,date3,date4,date5,date6,date7;


/****************************准确延时*****************************/
/* void Delay_iic(){
 
   _asm NOP; _asm NOP;_asm NOP;_asm NOP;
 } */
void Delay_iic()////////     //根据晶振频率制定延时时间
{
    
    _asm NOP; _asm NOP;_asm NOP;_asm NOP;                                         
    _asm NOP; _asm NOP;_asm NOP;_asm NOP;_asm NOP;
    _asm NOP; _asm NOP;_asm NOP;_asm NOP;_asm NOP;
    _asm NOP; _asm NOP;_asm NOP;_asm NOP;_asm NOP;
    _asm NOP; _asm NOP;_asm NOP;_asm NOP;_asm NOP;
    _asm NOP; _asm NOP;_asm NOP;_asm NOP;
}         
   
/*******************************长延时函数*****************************/
void delay_l(unsigned int x){

    unsigned int i,j;
    
    for(i=0;i<x;i++) {  
        __RESET_WATCHDOG();
        for(j=0;j<250;j++) 
        {;}
    }
}

/*******************************短延时函数******************************/
void delay_s(unsigned int x){

    unsigned int i;
    
    for(i=0;i<x;i++) {  

        ;
    }
}


/*****************************初始化IO****************************/
/*
void IO_INIT()
{
    PTADD_PTADD0=1; //IIC时钟线SCL
    PTADD_PTADD2=1; //IIC数据线SDA        
      
}
*/
/******************************I2C开始****************************/
void Start()
{    
     PTCDD_PTCDD1=1;
     
     SDA=1;
     ;
     SCL=1;
     Delay_iic();
     SDA=0;
     Delay_iic();
     SCL=0;
     ;
     
     PTCDD_PTCDD1=0;
}
/****************************I2C结束******************************/
void Stop()
{
    PTCDD_PTCDD1=1;
     
    SDA=0;
    ;
    //SCL=0;
    //Delay_iic();
    SCL=1;
    Delay_iic();
    SDA=1;
    Delay_iic();
    delay_s(100);
    PTCDD_PTCDD1=0;
     
}
/*******************************输出ACK=0**************************/
void WriteACK()
{   
    PTCDD_PTCDD1=1;
     
    SDA=0;
    Delay_iic();
    SCL=1;
    Delay_iic();
    SCL=0;
    ;
    PTCDD_PTCDD1=0;
     
}
/*********************************输出ACK=1*************************/
void WriteNoAck()
{
    PTCDD_PTCDD1=1; 
    SDA=1;
    Delay_iic();
    SCL=1;
    Delay_iic();
    SCL=0;
    ;
    PTCDD_PTCDD1=0;
     
}
/*********************************等待ACK****************************/
void WaitACK()
{   
    //byte errtime=20;
    PTCDD_PTCDD1=0;
    SDA=1;
    Delay_iic();               /*读ACK*/
    SCL=1;
    
    Delay_iic();
    //while(SDA);
    
    SCL=0;
    Delay_iic();
    
    PTCDD_PTCDD1=1;
}
/********************************写数据******************************/
void RX8025_WriteByte(byte wdata)
{
    byte i; 
    
    PTCDD_PTCDD1=1;
     
    for(i=0;i<8;i++)
    {
        if(wdata&0x80) 
            SDA=1;
        else 
            SDA=0;
        
            wdata<<=1;
            
            SCL=1;
            Delay_iic();
            Delay_iic();
            SCL=0;
    }
    
    WaitACK();
    
    PTCDD_PTCDD1=0;
     
}
/*******************************读数据***********************************/
byte RX8025_ReadByte()
{
    byte i,bytedata=0;
    PTCDD_PTCDD1=0;
    
    SDA=1;
    
    for(i=0;i<8;i++)
    {
        bytedata<<=1;
       
        if(SDA&0x01)
            bytedata=bytedata|0x01;
        else  
            bytedata=bytedata&0xfe;
        
        SCL=1;
        Delay_iic();
        Delay_iic();
        SCL=0;
        Delay_iic();
    }
    
    PTCDD_PTCDD1=1;
    return(bytedata);
}
/****************************写RX8025*********************************/
void WriteRX8025(byte address,byte mdata)
{
    Start();
    RX8025_WriteByte(0x64); 
//RX8025_WriteByte(0x00);         /*写命令*/
    RX8025_WriteByte(address);       /*写地址*/
    RX8025_WriteByte(mdata);         /*写数据*/
    Stop();
}
/******************************* 读RX8025 ******************************/
byte ReadRX8025(byte address)               /*单字节*/
{ 
    byte date;
    Start();                     /*发开始*/
    RX8025_WriteByte(0x64);
    //RX8025_WriteByte(0x04);              /*写命令*/
    RX8025_WriteByte(address);          /*写地址*/
    Start();                     /*发开始*/
    RX8025_WriteByte(0x65);             /*读命令*/
    date=RX8025_ReadByte();            /*发开始*/
    WriteNoAck();
    Stop();
    return(date);
}


/****************************** P8563的初始化 *****************************/
void RX8025_INIT()
{
    WriteRX8025(0xe0,0x20);   
    
    WriteRX8025(0x00,0x20);
    WriteRX8025(0x10,0x12);
    
    WriteRX8025(0x20,0x13);         //写秒
    WriteRX8025(0x30,0x06);         //写分                      
    WriteRX8025(0x40,0x09);         //写小时                     
    WriteRX8025(0x50,0x05);         //写日
    WriteRX8025(0x60,0x09);          //写星期
    

    
    WriteRX8025(0x70,0x00);          //写月
    WriteRX8025(0x80,0x00);         //写年
    WriteRX8025(0x90,0x00);                               
    WriteRX8025(0xa0,0x00);                              
    WriteRX8025(0xb0,0x00);
    WriteRX8025(0xc0,0x00);
    WriteRX8025(0xd0,0x00);                               
                                  
    WriteRX8025(0xf0,0x00);
                             
}






void displaysfm(uchar line,uchar date)
{
	uchar high,low;
	high=date&0xf0;
	high=high>>4;
	low=date&0x0f;
  disASC(0x08+line,0x0a+line,0x8a,0x9a,high);
  disASC(0x0a+line,0x0c+line,0x8a,0x9a,low);   
}




void displaytime()
{

PTCDD_PTCDD0=1; 
           
    RX8025_INIT();
    while(1){  
    date1=ReadRX8025(0x00);
    date2=ReadRX8025(0x10);
   date3=ReadRX8025(0x20);
   date4=ReadRX8025(0x30);
   date5=ReadRX8025(0x40);
   date6=ReadRX8025(0x50);
   date7=ReadRX8025(0x60);

         
    
    disASC(0x04,0x06,0x8a,0x9a,0x02);
    disASC(0x06,0x08,0x8a,0x9a,0x00);
    displaysfm(0,date7);//显示年

    disASC(0x0c,0x0f,0x8a,0x9a,0x1b);
    displaysfm(6,date6);//显示月

    disASC(0x12,0x14,0x8a,0x9a,0x1b);
    displaysfm(0x0c,date5);//显示日

   
    disChinese(0x1d,0x21,0x8a,0x9a,0x5c);    //显示星期 
    disChinese(0x21,0x26,0x8a,0x9a,0x5d);
     disChinese(0x26,0x2a,0x8a,0x9a,(0x55+date4));
   // displaysfm(0x14,date4);

    displaysfm(0x27,date3);//显示时

    
     disASC(0x33,0x35,0x8a,0x9a,0x1a);

    displaysfm(0x2d,date2);//显示分
  
    
     disASC(0x3a,0x3c,0x8a,0x9a,0x1a); 
  
    displaysfm(0x34,date1);//显示秒
  
     }
 }

⌨️ 快捷键说明

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