您的位置 首页 IC

AVR M16试验之七 DS1302测验

***********************************************************************文件名称:mainc*程序作者:kidcao1987*程序

/**********************************************************************
* 文件名称: main.c
* 程序作者: kidcao1987
* 程序版别: V1.0
* 功用描绘: 装上LCD1602,在其上显现时刻,年月等
* 编译器:WinAVR-20090313
* 芯片:ATmega16,外部11.0592MHZ晶振
* 技术支持:http://bbs.cepark.com
**********************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define SCLK PA1
#define IO PA2
#define RST PA3
#define RS PA4
#define RW PA5
#define EN PA6

uchar DisplayNum[]={“0123456789”};
uint Calendar[]={0x10,0x02,0x4,0x12,0x22,0x40,0x00};//年月周日时分秒
uchar Weeks[7][3]={“Mon”,”Tue”,”Wen”,”Thu”,”Fri”,”Sat”,”Sun”};//字符数组
uchar ConversionResult[]={“20**-**:*-**-**-**-**”};//拓荒空间存储转化成果
uchar i=1;

void LCD1602_Initial(void);
void LCD1602_CommandWrite(uchar com);
void LCD1602_ByteWrite(uchar date);
void LCD1602_Display(uchar adr,uchar date);
void LCD1602_BusyCheck(void);
void PORTx_Initial(void);
void Initial_DS1302(void);
void DS1302_RST(void);
void DS1302_ByteWrite(uchar command,uchar Byte);
uchar DS1302_ByteRead(uchar command);
void DS1302_TimeShow(void);
uchar BCD_Conversion(uchar date);
void Calendar_ReadBack(void);

int main(void)
{
PORTx_Initial();//初始化IO
LCD1602_Initial();//初始化1602
Initial_DS1302();//初始化DS1302
while(1)
{
DS1302_TimeShow();//显现时刻
}
}
/*LCD1602初始化*/
void LCD1602_Initial(void)
{
LCD1602_CommandWrite(0x38);
_delay_ms(15);
LCD1602_CommandWrite(0x38);
_delay_ms(5);
LCD1602_CommandWrite(0x38);
_delay_ms(5);
LCD1602_CommandWrite(0x01);
_delay_ms(1);
LCD1602_CommandWrite(0x38);
_delay_ms(1);
LCD1602_CommandWrite(0x0c);
_delay_ms(1);
LCD1602_CommandWrite(0x06);
}
/*端口初始化函数*/
void PORTx_Initial(void)
{
PORTA&=~((1<PORTA&=~((1<<4)|(1<<5)|(1<<6));
DDRA|=(1<DDRB=0xff; //B口初始化为输出方向输出低电平
}
/*DS1302初始化函数*/
void Initial_DS1302(void)
{
DS1302_RST();
DS1302_ByteWrite(0x90,0xa9);//使能充电,双二极管,2K电阻
DS1302_RST();
DS1302_ByteWrite(0x8e,0x00);//封闭写保护
DS1302_RST();
DS1302_ByteWrite(0x8c,Calendar[0]);//10年
DS1302_RST();
DS1302_ByteWrite(0x88,Calendar[1]);//2月
DS1302_RST();
DS1302_ByteWrite(0x8a,Calendar[2]);//周三
DS1302_RST();
DS1302_ByteWrite(0x86,Calendar[3]);//10日
DS1302_RST();
DS1302_ByteWrite(0x84,Calendar[4]);//00时
DS1302_RST();
DS1302_ByteWrite(0x82,Calendar[5]);//00分
DS1302_RST();
DS1302_ByteWrite(0x80,0x00);//00秒
DS1302_RST();
}
/*DS1302复位函数*/
void DS1302_RST(void)
{
PORTA&=~(1<_delay_us(1);
PORTA|=(1<_delay_us(1);
}
/*DS1302字节写入函数*/
void DS1302_ByteWrite(uchar command,uchar Byte)
{
uchar n=0;
for(n=0;n<8;n++)
{
if(command&0x01)
PORTA|=(1<else
PORTA&=~(1<PORTA|=(1<_delay_us(1);
PORTA&=~(1<_delay_us(1);
command>>=1;
}
for(n=0;n<8;n++)
{
if(Byte&0x01)
PORTA|=(1<else
PORTA&=~(1<PORTA|=(1<_delay_us(1);
PORTA&=~(1<_delay_us(1);
Byte>>=1;
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/258838.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部