ATmega16DS1302.docx

上传人:b****5 文档编号:6841978 上传时间:2023-01-11 格式:DOCX 页数:102 大小:29.58KB
下载 相关 举报
ATmega16DS1302.docx_第1页
第1页 / 共102页
ATmega16DS1302.docx_第2页
第2页 / 共102页
ATmega16DS1302.docx_第3页
第3页 / 共102页
ATmega16DS1302.docx_第4页
第4页 / 共102页
ATmega16DS1302.docx_第5页
第5页 / 共102页
点击查看更多>>
下载资源
资源描述

ATmega16DS1302.docx

《ATmega16DS1302.docx》由会员分享,可在线阅读,更多相关《ATmega16DS1302.docx(102页珍藏版)》请在冰豆网上搜索。

ATmega16DS1302.docx

ATmega16DS1302

/*

*DS1302.c

*

*Created:

2015/2/1813:

30:

42

*Author:

Administrator

*/

/************************************************************************/

/*常用头文件及宏定义*/

/************************************************************************/

#include

#include//延时文件

#include//睡眠文件

#include//中断文件

#include//eeprom

#defineBIT(x)(1<<(x))

#defineucharunsignedchar

#defineuintunsignedint

uinttop_t=95,t=0;

ucharMODE=1,a[6]={0},ding_0=0,ding_1=0,ding_2=0;

ucharding0[8]={0},ding1[8]={0},ding2[8]={0},kaiguan=1,l=1;

/************************************************************************/

/*12864*/

/************************************************************************/

/*串行模式*/

/*引脚说明*/

/*PC0CSPC1SIDPC2CLKPC3背光PC4RST*/

/*宏定义*/

#defineDDR_KZDDRC

#definePORT_KZPORTC

#definePIN_KZPINC

#defineCS_HPORT_KZ|=BIT(0)

#defineCS_LPORT_KZ&=~(BIT(0))

#defineSID_HPORT_KZ|=BIT

(1)

#defineSID_LPORT_KZ&=~(BIT

(1))

#defineCLKPORT_KZ|=BIT

(2),PORT_KZ&=~(BIT

(2))

#defineBEIGUABG_HPORT_KZ|=BIT(3)

#defineBEIGUABG_LPORT_KZ&=~(BIT(3))

#defineRESETPORT_KZ&=~(BIT(4)),PORT_KZ|=BIT(4)

voidlcd_write_char(ucharshuju)//写字符函数

{

_delay_ms

(1);

ucharbl,a;

inti;

CS_H;

a=0xfa;

for(i=7;i>=0;i--)

{

bl=a>>i;

if(bl&1)

{

SID_H;

}

else

{

SID_L;

}

CLK;

}

a=shuju&0xf0;

for(i=7;i>=0;i--)

{

bl=a>>i;

if(bl&1)

{

SID_H;

}

else

{

SID_L;

}

CLK;

}

a=shuju<<4;

for(i=7;i>=0;i--)

{

bl=a>>i;

if(bl&1)

{

SID_H;

}

else

{

SID_L;

}

CLK;

}

CS_L;

}

voidlcd_write_string(char*str)//写字符串函数

{

while(*str!

='\0')

{

lcd_write_char(*str);

str++;

}

}

voidlcd_write_zhiling(ucharzhiling)//写指令

{

_delay_ms

(1);

ucharbl,a;

inti;

CS_H;

a=0xf8;

for(i=7;i>=0;i--)

{

bl=a>>i;

if(bl&1)

{

SID_H;

}

else

{

SID_L;

}

CLK;

}

a=zhiling&0xf0;

for(i=7;i>=0;i--)

{

bl=a>>i;

if(bl&1)

{

SID_H;

}

else

{

SID_L;

}

CLK;

}

a=zhiling<<4;

for(i=7;i>=0;i--)

{

bl=a>>i;

if(bl&1)

{

SID_H;

}

else

{

SID_L;

}

CLK;

}

CS_L;

}

//指令集宏定义//

#defineZHILINGJI_JIBENlcd_write_zhiling(0x30)//基本指令集

#defineQINGPING_WENZIlcd_write_zhiling(0x01)//文字清屏

voidchushihua_12864()

{

PORT_KZ|=BIT(4);

DDR_KZ=0xff;

RESET;

ZHILINGJI_JIBEN;//基本指令集

lcd_write_zhiling(0x08);//显示关

lcd_write_zhiling(0x01);//清显示

lcd_write_zhiling(0x02);//地址归位

lcd_write_zhiling(0x10);//设置游标

lcd_write_zhiling(0x0c);//开显示

}

/************************************************************************/

/*矩阵键盘积木块*/

/************************************************************************/

/*引脚说明*/

/*键盘PD0~PD3行*/

/*键盘PD4~PD7列*/

/*键盘宏定义*/

#defineDDR_JIANPANDDRD

#definePORT_JIANPANPORTD

#definePIN_JIANPANPIND

voidchushihua_jianpan()//键盘初始化函数

{

DDR_JIANPAN=0;//输入态

PORT_JIANPAN=0xff;//启用上拉电阻

}

intjiance()//检测函数//行扫描

{

DDR_JIANPAN=0xf0;//行扫描//0~3输入态//4~7输出态

PORT_JIANPAN=0x0f;//0~3启用上拉电阻//4~7输出低电平

_delay_ms

(1);

if((PIN_JIANPAN|0xf0)==0xff)//屏蔽高四位//读取低四位状态

{

return0;

}

else

{

return1;

}

}

intshibie_hang()//行识别状态(与检测函数扫描一致,不用切换状态)

{

switch(PIN_JIANPAN|0xf0)

{

case0xfe:

return1;break;

case0xfd:

return2;break;

case0xfb:

return3;break;

case0xf7:

return4;break;

default:

return0;

}

}

intshibie_lie()//列识别状态,需要切换扫描状态

{

DDR_JIANPAN=0x0f;//行扫描//0~3输出态//4~7输入态

PORT_JIANPAN=0xf0;//0~3输出低电平//4~7启用上拉电阻

_delay_ms

(1);

switch(PIN_JIANPAN|0x0f)//屏蔽低四位//读取高四位状态

{

case0xef:

return1;break;

case0xdf:

return2;break;

case0xbf:

return3;break;

case0x7f:

return4;break;

default:

return0;

}

}

intyima(inthang,intlie)//计算按键标号函数

{

intjianma=0;

jianma=(hang-1)*4+lie;//计算按键标号

returnjianma;

}

ucharanjian()

{

ucharhang=0,lie=0,jianma=0;//行列值变量

if(jiance())//是否有按键按下

{

_delay_ms(10);//消除抖动干扰

if(jiance())

{

hang=shibie_hang();//获取行值

lie=shibie_lie();//获取列值

jianma=yima(hang,lie);//获取键码

while(jiance());//等待按键放开

returnjianma;

}

}

return0;

}

/************************************************************************/

/*DS1302程序*/

/************************************************************************/

/*引脚说明*/

/*PC5RESRTPC6I/OPC7SCLK*/

/*宏定义*/

#defineDDR_1302DDRC

#definePORT_1302PORTC

#definePIN_1302PINC

#defineRESET_HPORT_1302|=BIT(5)

#defineRESET_LPORT_1302&=~BIT(5)

#defineIO_HPORT_1302|=BIT(6)

#defineIO_LPORT_1302&=~BIT(6)

#defineSCLK_HPORT_1302|=BIT(7)

#defineSCLK_LPORT_1302&=~BIT(7)

#defineMIAO_READ0x81

#defineMIN_READ0x83

voidds1302_read()

{

uchari;

for(i=0;i<6;i++)

{

a[i]=0;

}

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)

{

if(0x81&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

DDR_1302&=~BIT(6);

PORT_1302|=BIT(6);

for(i=0;i<4;i++)

{

_delay_us(10);

if(PIN_1302&BIT(6))

{

a[1]|=BIT(i);

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

_delay_us(10);

if(PIN_1302&BIT(6))

{

a[0]|=BIT(i);

}

SCLK_H;

SCLK_L;

}

RESET_L;

DDR_1302|=BIT(6);

PORT_1302&=~BIT(6);

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)

{

if(0x83&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

DDR_1302&=~BIT(6);

PORT_1302|=BIT(6);

for(i=0;i<4;i++)

{

_delay_us(10);

if(PIN_1302&BIT(6))

{

a[3]|=BIT(i);

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

_delay_us(10);

if(PIN_1302&BIT(6))

{

a[2]|=BIT(i);

}

SCLK_H;

SCLK_L;

}

RESET_L;

DDR_1302|=BIT(6);

PORT_1302&=~BIT(6);

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)

{

if(0x85&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

DDR_1302&=~BIT(6);

PORT_1302|=BIT(6);

for(i=0;i<4;i++)

{

_delay_us(10);

if(PIN_1302&BIT(6))

{

a[5]|=BIT(i);

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

_delay_us(10);

if(PIN_1302&BIT(6))

{

a[4]|=BIT(i);

}

SCLK_H;

SCLK_L;

}

RESET_L;

DDR_1302|=BIT(6);

PORT_1302&=~BIT(6);

if(a[4]&BIT(0))

{

a[5]+=10;

}

if(a[4]&BIT

(1))

{

a[5]+=12;

}

}

voidds1302_write(ucharb[])

{

uchari,shi=0;

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)//保护寄存器

{

if(0x8e&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

IO_L;

for(i=0;i<8;i++)//去保护

{

SCLK_H;

SCLK_L;

}

RESET_L;

//////////////////////////////////////////////////////////////////////////

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)

{

if(0x84&BIT(i))//小时寄存器

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

shi=b[0]*10+b[1];

if(shi>12)

{

shi-=12;

shi%=10;

}

for(i=0;i<4;i++)

{

if(shi&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

shi=b[0]*10+b[1];

if(shi>12)

{

shi-=12;

if(shi>9)

{

shi=0x0b;

}

else

{

shi=0x0a;

}

}

else

{

if(shi>9)

{

shi=0x09;

}

else

{

shi=0x08;

}

}

for(i=0;i<4;i++)

{

if(shi&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

RESET_L;

//////////////////////////////////////////////////////////////////////////

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)

{

if(0x82&BIT(i))//分钟寄存器

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

if(b[3]&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

if(b[2]&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

RESET_L;

//////////////////////////////////////////////////////////////////////////

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)

{

if(0x80&BIT(i))//秒钟寄存器

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

if(b[5]&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

if(b[4]&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

RESET_L;

//////////////////////////////////////////////////////////////////////////

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)//保护寄存器

{

if(0x8e&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

for(i=0;i<8;i++)//加保护

{

if(0x80&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

RESET_L;

}

voidqidong_1302()

{

uchari,c;

ds1302_read();

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)//保护寄存器

{

if(0x8e&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

IO_L;

for(i=0;i<8;i++)//去保护

{

SCLK_H;

SCLK_L;

}

RESET_L;

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)

{

if(0x80&BIT(i))//秒钟寄存器

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

for(i=0;i<4;i++)

{

if(a[1]&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

c=a[0]&(~BIT(3));

for(i=0;i<4;i++)

{

if(c&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

RESET_L;

RESET_H;

_delay_us(10);

for(i=0;i<8;i++)//保护寄存器

{

if(0x8e&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

for(i=0;i<8;i++)//加保护

{

if(0x80&BIT(i))

{

IO_H;

}

else

{

IO_L;

}

SCLK_H;

SCLK_L;

}

RESET_L;

}

voidchushih

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1