ImageVerifierCode 换一换
格式:DOCX , 页数:102 ,大小:29.58KB ,
资源ID:6841978      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6841978.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ATmega16DS1302.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ATmega16DS1302.docx

1、ATmega16DS1302/* * DS1302.c * * Created: 2015/2/18 13:30:42 * Author: Administrator */ /*/* 常用头文件及宏定义 */*/#include #include /延时文件#include /睡眠文件#include /中断文件#include /eeprom#define BIT(x) (1=0;i-) bl=ai; if (bl&1) SID_H; else SID_L; CLK; a=shuju&0xf0; for (i=7;i=0;i-) bl=ai; if (bl&1) SID_H; else SI

2、D_L; CLK; a=shuju=0;i-) bl=ai; if (bl&1) SID_H; else SID_L; CLK; CS_L;void lcd_write_string(char *str) /写字符串函数 while(*str!=0) lcd_write_char(*str); str+; void lcd_write_zhiling(uchar zhiling) /写指令 _delay_ms(1); uchar bl,a; int i; CS_H; a=0xf8; for (i=7;i=0;i-) bl=ai; if (bl&1) SID_H; else SID_L; CLK

3、; a=zhiling&0xf0; for (i=7;i=0;i-) bl=ai; if (bl&1) SID_H; else SID_L; CLK; a=zhiling=0;i-) bl=ai; if (bl&1) SID_H; else SID_L; CLK; CS_L;/ 指令集宏定义 /#define ZHILINGJI_JIBEN lcd_write_zhiling(0x30) /基本指令集#define QINGPING_WENZI lcd_write_zhiling(0x01) /文字清屏void chushihua_12864() PORT_KZ|=BIT(4); DDR_KZ

4、=0xff; RESET; ZHILINGJI_JIBEN; /基本指令集 lcd_write_zhiling(0x08); /显示关 lcd_write_zhiling(0x01); /清显示 lcd_write_zhiling(0x02); /地址归位 lcd_write_zhiling(0x10); /设置游标 lcd_write_zhiling(0x0c); /开显示/*/* 矩阵键盘积木块 */*/* 引脚说明 */* 键盘PD0PD3行 */* 键盘PD4PD7列 */* 键盘宏定义 */#define DDR_JIANPAN DDRD#define PORT_JIANPAN PO

5、RTD#define PIN_JIANPAN PINDvoid chushihua_jianpan() /键盘初始化函数 DDR_JIANPAN=0; /输入态 PORT_JIANPAN=0xff; /启用上拉电阻int jiance() /检测函数/行扫描 DDR_JIANPAN=0xf0; /行扫描/03输入态/47输出态 PORT_JIANPAN=0x0f; /03启用上拉电阻/47输出低电平 _delay_ms(1); if (PIN_JIANPAN|0xf0)=0xff)/屏蔽高四位/读取低四位状态 return 0; else return 1; int shibie_hang()

6、 /行识别状态(与检测函数扫描一致,不用切换状态) switch(PIN_JIANPAN|0xf0) case 0xfe:return 1;break; case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; default:return 0; int shibie_lie() /列识别状态,需要切换扫描状态 DDR_JIANPAN=0x0f; /行扫描/03输出态/47输入态 PORT_JIANPAN=0xf0; /03输出低电平/47启用上拉电阻 _delay_ms(1); switch(P

7、IN_JIANPAN|0x0f) /屏蔽低四位/读取高四位状态 case 0xef:return 1;break; case 0xdf:return 2;break; case 0xbf:return 3;break; case 0x7f:return 4;break; default:return 0; int yima(int hang,int lie) /计算按键标号函数 int jianma=0; jianma=(hang-1)*4+lie; /计算按键标号 return jianma;uchar anjian() uchar hang=0,lie=0,jianma=0;/行列值变量

8、if (jiance() /是否有按键按下 _delay_ms(10); /消除抖动干扰 if (jiance() hang=shibie_hang(); /获取行值 lie=shibie_lie(); /获取列值 jianma=yima(hang,lie);/获取键码 while(jiance(); /等待按键放开 return jianma; return 0;/*/* DS1302程序 */*/* 引脚说明 */* PC 5 RESRT PC 6 I/O PC7 SCLK */* 宏定义 */#define DDR_1302 DDRC#define PORT_1302 PORTC#def

9、ine PIN_1302 PINC#define RESET_H PORT_1302|=BIT(5)#define RESET_L PORT_1302&=BIT(5)#define IO_H PORT_1302|=BIT(6)#define IO_L PORT_1302&=BIT(6)#define SCLK_H PORT_1302|=BIT(7)#define SCLK_L PORT_1302&=BIT(7)#define MIAO_READ 0x81#define MIN_READ 0x83void ds1302_read() uchar i; for (i=0;i6;i+) ai=0;

10、RESET_H; _delay_us(10); for (i=0;i8;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;i4;i+) _delay_us(10); if (PIN_1302&BIT(6) a1|=BIT(i); SCLK_H; SCLK_L; for (i=0;i4;i+) _delay_us(10); if (PIN_1302&BIT(6) a0|=BIT(i); SCLK_H; SCLK_L; RESET_L; DDR_130

11、2|=BIT(6); PORT_1302&=BIT(6); RESET_H; _delay_us(10); for (i=0;i8;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;i4;i+) _delay_us(10); if (PIN_1302&BIT(6) a3|=BIT(i); SCLK_H; SCLK_L; for (i=0;i4;i+) _delay_us(10); if (PIN_1302&BIT(6) a2|=BIT(i); SC

12、LK_H; SCLK_L; RESET_L; DDR_1302|=BIT(6); PORT_1302&=BIT(6); RESET_H; _delay_us(10); for (i=0;i8;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;i4;i+) _delay_us(10); if (PIN_1302&BIT(6) a5|=BIT(i); SCLK_H; SCLK_L; for (i=0;i4;i+) _delay_us(10); if (

13、PIN_1302&BIT(6) a4|=BIT(i); SCLK_H; SCLK_L; RESET_L; DDR_1302|=BIT(6); PORT_1302&=BIT(6); if (a4&BIT(0) a5+=10; if (a4&BIT(1) a5+=12; void ds1302_write(uchar b) uchar i,shi=0; RESET_H; _delay_us(10); for (i=0;i8;i+)/保护寄存器 if (0x8e&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; IO_L; for (i=0;i8;i+)/去保护 SCL

14、K_H; SCLK_L; RESET_L; / RESET_H; _delay_us(10); for (i=0;i12) shi-=12; shi%=10; for (i=0;i12) shi-=12; if (shi9) shi=0x0b; else shi=0x0a; else if (shi9) shi=0x09; else shi=0x08; for (i=0;i4;i+) if (shi&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; RESET_L; / RESET_H; _delay_us(10); for (i=0;i8;i+) if (0x8

15、2&BIT(i)/分钟寄存器 IO_H; else IO_L; SCLK_H; SCLK_L; for (i=0;i4;i+) if (b3&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; for (i=0;i4;i+) if (b2&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; RESET_L; / RESET_H; _delay_us(10); for (i=0;i8;i+) if (0x80&BIT(i)/秒钟寄存器 IO_H; else IO_L; SCLK_H; SCLK_L; for (i=0;i4;i+) if (

16、b5&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; for (i=0;i4;i+) if (b4&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; RESET_L; / RESET_H; _delay_us(10); for (i=0;i8;i+)/保护寄存器 if (0x8e&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; for (i=0;i8;i+)/加保护 if (0x80&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; RESET_L;void qidong

17、_1302() uchar i,c; ds1302_read(); RESET_H; _delay_us(10); for (i=0;i8;i+)/保护寄存器 if (0x8e&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; IO_L; for (i=0;i8;i+)/去保护 SCLK_H; SCLK_L; RESET_L; RESET_H; _delay_us(10); for (i=0;i8;i+) if (0x80&BIT(i)/秒钟寄存器 IO_H; else IO_L; SCLK_H; SCLK_L; for (i=0;i4;i+) if (a1&BI

18、T(i) IO_H; else IO_L; SCLK_H; SCLK_L; c=a0&(BIT(3); for (i=0;i4;i+) if (c&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; RESET_L; RESET_H; _delay_us(10); for (i=0;i8;i+)/保护寄存器 if (0x8e&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; for (i=0;i8;i+)/加保护 if (0x80&BIT(i) IO_H; else IO_L; SCLK_H; SCLK_L; RESET_L;void chushih

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

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