uart.c
字号:
/***************************************************
*模块说明 :
*模块功能:查询当前时间函数
*备注:
*由navigator团队创作
***************************************************/
#include <stdio.h>
#include <alt_types.h>
#include <io.h>
#include <system.h>
#include <string.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
unsigned char function_key;
unsigned short int year;
unsigned char month,day,hour,minute,sec,minute1;
int month_confirm,hour_confirm;
int DigitLedCount;
unsigned char seg1,seg2,seg3,seg4;
int setup_flag;
/*********************************************
函数名:rclkint_irq
功 能:PCF8563中断请求处理函数
输 入:context:相关内容指针,中断号
返 回:
备 注:
**********************************************/
void rclkint_irq(void *context,alt_u32 interrupt)
{
int iRet;
unsigned int data;
unsigned char seg1,seg2,seg3,seg4;
data=IORD(RCLKINT_BASE,0x03);
IOWR(RCLKINT_BASE,0x03,0x00);
}
int timereport()
{
unsigned char data; ///* 读取边沿捕获寄存器值 */
FILE *fp_lcd;
fp_lcd=fopen(LCD_16702_0_NAME,"w");
//读取键盘字符
int iRet,i;
unsigned char uc;
month_confirm=hour_confirm=0;
DigitLedCount=0;
setup_flag=0;
// 清除边沿捕获寄存器
IOWR(BUTTON_PIO_BASE,0x03,0x00);
IOWR(RCLKOUT_BASE,0x03,0x00);
IOWR(RCLKINT_BASE,0x03,0x00);
// 初始化I2C设备
iRet=init_i2c(FREEDEV_I2C_0_BASE);
// 初始化PCF8563控制寄存器0 STOP
iRet=I2C_write_byte(0xA2,0x00,0x20);
if(iRet <0 )
{
printf("I2C_write_byte[0x00] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563控制寄存器1
iRet=I2C_write_byte(0xA2,0x01,0x00);
if(iRet <0 )
{
printf("I2C_write_byte[0x01] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563 CLKOUT频率寄存器 0X83
iRet=I2C_write_byte(0xA2,0x0D,0x83);
if(iRet <0 )
{
printf("I2C_write_byte[0x0D] error iRet=%d\n",iRet);
return 0;
}
// 初始化秒寄存器
iRet=I2C_write_byte(0xA2,0x02,0x80);
if(iRet <0 )
{
printf("I2C_write_byte[0x02] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563控制寄存器0 START
iRet=I2C_write_byte(0xA2,0x00,0x00);
if(iRet <0 )
{
printf("I2C_write_byte[0x00] error iRet=%d\n",iRet);
return 0;
}
/* 开放中断屏蔽 */
IOWR(BUTTON_PIO_BASE,0x02,0x0f);
IOWR(RCLKOUT_BASE,0x02,0x01);
IOWR(RCLKINT_BASE,0x02,0x01);
// unsigned char data;
/* 读取边沿捕获寄存器值 */
data=IORD(RCLKOUT_BASE,0x03);
iRet=I2C_read_byte(0xa3,0x07,&data);
if( (data & 0x80) ){
seg1=1;
seg2=9;
}else{
seg1=2;
seg2=0;
}
iRet=I2C_read_byte(0xA3,0x08,&data);
seg3=(data & 0xf0)>>4;
seg4=(data & 0x0f);
year=seg1*1000+seg2*100+seg3*10+seg4;
iRet=I2C_read_byte(0xA3,0x07,&data);
seg1=(data & 0x10)>>4;
seg2=(data & 0x0f);
month=seg1*10+seg2;
iRet=I2C_read_byte(0xA3,0x05,&data);
seg3=(data & 0x30)>>4;
seg4=(data & 0x0f);
day=seg3*10+seg4;
iRet=I2C_read_byte(0xA3,0x04,&data);
seg1=(data & 0x30)>>4;
seg2=(data & 0x0f);
hour=seg1*10+seg2;
iRet=I2C_read_byte(0xA3,0x03,&data);
seg3=(data & 0x70)>>4;
seg4=(data & 0x0f);
minute=seg3*10+seg4;
iRet=I2C_read_byte(0xA3,0x06,&data);
seg3=(data & 0x30)>>4;
seg4=(data & 0x0f);
minute1=seg3*10+seg4;
printf("%d年%d月%d日%d时%d分\n",year,month,day,hour,minute);
fprintf(fp_lcd," Y: M: D: H: M:\n");
/* if(day == 19)
aic23_play();
if(hour)*/
/// aic23_play(3022);aic23_play(3024);aic23_play(3027);
fprintf(fp_lcd," %d.%d.%d %d:%d\n",year,month,day,hour,minute);
return 0;
}
/******************************************************
* 函数名称:minutereport
* 功能:一共一些函数作为中断处理
*输 入:context:相关内容指针,中断号
*返 回: 分钟值
*备 注:由navigator团队创作
**********************************************/
int minutereport()
{
unsigned char data; ///* 读取边沿捕获寄存器值 */
int iRet,i;
unsigned char uc;
month_confirm=hour_confirm=0;
DigitLedCount=0;
setup_flag=0;
// 清除边沿捕获寄存器
IOWR(BUTTON_PIO_BASE,0x03,0x00);
IOWR(RCLKOUT_BASE,0x03,0x00);
IOWR(RCLKINT_BASE,0x03,0x00);
// 初始化I2C设备
iRet=init_i2c(FREEDEV_I2C_0_BASE);
// 初始化PCF8563控制寄存器0 STOP
iRet=I2C_write_byte(0xA2,0x00,0x20);
if(iRet <0 )
{
printf("I2C_write_byte[0x00] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563控制寄存器1
iRet=I2C_write_byte(0xA2,0x01,0x00);
if(iRet <0 )
{
printf("I2C_write_byte[0x01] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563 CLKOUT频率寄存器 0X83
iRet=I2C_write_byte(0xA2,0x0D,0x83);
if(iRet <0 )
{
printf("I2C_write_byte[0x0D] error iRet=%d\n",iRet);
return 0;
}
// 初始化秒寄存器
iRet=I2C_write_byte(0xA2,0x02,0x80);
if(iRet <0 )
{
printf("I2C_write_byte[0x02] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563控制寄存器0 START
iRet=I2C_write_byte(0xA2,0x00,0x00);
if(iRet <0 )
{
printf("I2C_write_byte[0x00] error iRet=%d\n",iRet);
return 0;
}
/* 开放中断屏蔽 */
IOWR(RCLKOUT_BASE,0x02,0x01);
IOWR(RCLKINT_BASE,0x02,0x01);
// unsigned char data;
/* 读取边沿捕获寄存器值 */
data=IORD(RCLKOUT_BASE,0x03);
iRet=I2C_read_byte(0xa3,0x07,&data);
if( (data & 0x80) ){
seg1=1;
seg2=9;
}else{
seg1=2;
seg2=0;
}
iRet=I2C_read_byte(0xA3,0x03,&data);
seg3=(data & 0x70)>>4;
seg4=(data & 0x0f);
minute=seg3*10+seg4;
printf("%d分\n",minute);
return minute;
}
int secreport()
{
unsigned char data; ///* 读取边沿捕获寄存器值 */
int iRet,i;
unsigned char uc;
month_confirm=hour_confirm=0;
DigitLedCount=0;
setup_flag=0;
// 清除边沿捕获寄存器
IOWR(BUTTON_PIO_BASE,0x03,0x00);
IOWR(RCLKOUT_BASE,0x03,0x00);
IOWR(RCLKINT_BASE,0x03,0x00);
// 初始化I2C设备
iRet=init_i2c(FREEDEV_I2C_0_BASE);
// 初始化PCF8563控制寄存器0 STOP
iRet=I2C_write_byte(0xA2,0x00,0x20);
if(iRet <0 )
{
printf("I2C_write_byte[0x00] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563控制寄存器1
iRet=I2C_write_byte(0xA2,0x01,0x00);
if(iRet <0 )
{
printf("I2C_write_byte[0x01] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563 CLKOUT频率寄存器 0X83
iRet=I2C_write_byte(0xA2,0x0D,0x83);
if(iRet <0 )
{
printf("I2C_write_byte[0x0D] error iRet=%d\n",iRet);
return 0;
}
// 初始化秒寄存器
iRet=I2C_write_byte(0xA2,0x02,0x80);
if(iRet <0 )
{
printf("I2C_write_byte[0x02] error iRet=%d\n",iRet);
return 0;
}
// 初始化PCF8563控制寄存器0 START
iRet=I2C_write_byte(0xA2,0x00,0x00);
if(iRet <0 )
{
printf("I2C_write_byte[0x00] error iRet=%d\n",iRet);
return 0;
}
/* 开放中断屏蔽 */
IOWR(RCLKOUT_BASE,0x02,0x01);
IOWR(RCLKINT_BASE,0x02,0x01);
int m;
// unsigned char data;
/* 读取边沿捕获寄存器值 */
while(1)
{
data=IORD(RCLKOUT_BASE,0x03);
seg1=0;
seg2=0;
iRet=I2C_read_byte(0xA3,0x02,&data);
seg3=(data & 0x70)>>4;
seg4=(data & 0x0f);
sec=seg3*10+seg4;
// printf("sec=%d",sec);
/// m=sec/59;
// printf("%d",m);
switch(sec)
{
case 1 :
printf("1"); break;
case 2 : printf("2"); break;
}
}
return sec;
}
int main ()
{
int a;
// printf("the sec=");
int secreport();
secreport();
/// a= minutereport();
// printf("sec=%d",a);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -