📄 aw60iic+rx8025模拟io.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 + -