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

📄 main.c

📁 ARM7 示例程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
//定义串口模式设置的数据结构
typedef struct UartMode
{
uint8 datab;                               //字长度 ;5/6/7/8
uint8 stopb;                               //停止位 ;1/2
uint8 parity;                              //奇偶校验
}UARTMODE;
////////////////////////////////////////////////////////////////////////////////////////////////////
/**********************************************************************************************************
函数名称:UART0_Init()
函数功能:初始化串口--设置工作模式和波特率
入口参数:baud 波特率
出口参数:返回1表示成功 返回零表示参数出错
***********************************************************************************************************/
uint8 UART0_Init(uint32 baud,UARTMODE set)
{
uint32 bak;
//参数过滤
if((0==baud)||(baud>115200))      return(0);
if((set.datab<5)||(set.datab>8))  return(0);
if((0==set.stopb)||(set.stopb>2)) return(0);
if(set.parity>4);                 return(0);
//设置串口波特率
U0LCR=0x80;                       //DLAB=1;
bak=(Fpclk>>4)/baud;              //
U0DLM=bak>>8;                     
U0DLL=bak&0xff;                   
//设置串口模式
bak=set.datab-5;
if(2==set.stopb)     bak|=0x04;
  if(0!=set.parity)
  {
    set.parity=set.parity-1;
    bak|=0x08;
  }
  bak|=set.parity<<4;
  U0LCR=bak;
  return(0);
}
/*****************************************************************************************************
函数名称()
函数功能()
入口参数:data  要发送的数据
出口参数:无
*****************************************************************************************************/
void SendByte(uint8 data)
{
U0THR=data;
while((U0LSR&0x20)==0);         //等待数据发送
}
/*****************************************************************************************************
函数名称()  PC_DispChar()
函数功能()  向PC机发送字符()
入口参数()  no 显示位置
出口参数()  无
*****************************************************************************************************/
void PC_DispChar(uint8 no,uint8 chr)
{
SendByte(0xff);
SendByte(0x81);
SendByte(no);
SendByte(chr);
SendByte(0x00);
}
uint8 const SHOWTABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/***************************************************************************************************
函数名称 SendTimeRtc()
函数功能 读取RTC的时间值,并将读取的时分秒通过串口送到上位机
入口参数: 无
出口参数: 无
*****************************************************************************************************/
void SendTimeRtc()
{
uint32 datas;
uint32 times;
uint32 bak;
/* 读取完整的时钟寄存器*/ 
times=CTIME0;
datas=CTIME1;
bak=(datas>>16)&0xff;               //获取年
PC_DispChar(0,SHOWTABLE[bak/1000]);
bak=bak%1000;
PC_DispChar(1,SHOWTABLE[bak/100]);
bak=bak%1100;
PC_DispChar(2,SHOWTABLE[bak/10]);  
PC_DispChar(3,SHOWTABLE[bak&10]);
 
bak=(datas>>8)&0xff;               //获取月        
PC_DispChar(4,SHOWTABLE[bak/10]);
PC_DispChar(5,SHOWTABLE[bak&10]);

bak=datas&0x1f;                    //获取日
PC_DispChar(6,SHOWTABLE[bak/10]);
PC_DispChar(7,SHOWTABLE[bak%10]); 

bak=(times>>24)&0x07;              //获取星期
PC_DispChar(8,SHOWTABLE[bak]);

bak=(times>>16)&0x1f;              //获取<小>时
PC_DispChar(9,SHOWTABLE[bak/10]);
PC_DispChar(10,SHOWTABLE[bak%10]);

bak=(times>>8)&0x3f;               //获取分钟
PC_DispChar(11,SHOWTABLE[bak/10]);
PC_DispChar(12,SHOWTABLE[bak%10]); 

bak=times&0x3f;                    //获取秒钟
PC_DispChar(13,SHOWTABLE[bak/10]);
PC_DispChar(14,SHOWTABLE[bak%10]);
}
/*****************************************************************************************************
函数名称: RTCInit()
函数功能: 初始化实时时钟
入口参数: 
出口参数
*******************************************************************************************************/
void RTCInit(void)
{
PREINT=Fpclk/32768-1;              //设置预分频器
PREFRAC=Fpclk-(Fpclk/32768)*32768;   

CCR=0x00;                          //禁止时间计数器

YEAR=2005;                         
MONTH=01;
DOM=10;
DOW=4;
HOUR=8;
MIN=30;
SEC=59;

CIIR=0x01;
CCR=0x01;
}
/*********************************************************************************************************/
        int main (void)
{
UARTMODE uart0_set;
PINSEL0=0x00000005;                //连接IO到UART0
PINSEL1=0x00000000;   

uart0_set.datab=8;
uart0_set.stopb=1;                 //
uart0_set.parity=0;
UART0_Init(115200,uart0_set);
U0LCR=0x01;                        // FIFO使能

RTCInit();
while(1)
{
while(0==(ILR&0x01));              //等待RTC增量中断
ILR=0x01;                          //消除中断标志
SendTimeRtc();          
}


    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/











⌨️ 快捷键说明

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