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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机考试论文Word文档下载推荐.docx

1、控制字节最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钏娄据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。DS1302的复位引脚:通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供了终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置RST为低电平,则会终止此次数据

2、传送,并且I/O引脚变为高阴态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的数据输入与输出:在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0至高位7,数据读写时序如下图:DS1302寄存器:DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器

3、等。2.2 LCD1602接口信号说明:基本操作时序:读状态:输入:RS=L,RW=H,E=H 输出:D0D7=状态字写指令:RS=L,RW=L,D0D7=指令码,E=高脉冲 输出:无读数据:输入:RS=H,RW=H,E=H 输出:D0D7=数据写数据:RS=H,RW=L,D0D7=数据,E=高脉冲 输出:读操作时序:写操作时序:2.3 AT89C52功能特性概述:AT89C52提供以下标准功能:8k字节Flash闪速 存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C52可降至0Hz的静

4、态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但通话RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。引脚功能说明:Vcc:电源电压 GND:地P0口:P0口是一组8位漏极开中型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。P1口、P2口、P3口:是一组带内部上拉电阻的8位双向I/O口,其输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口

5、拉到高电平, 此时可作输入口。作输入口使用时,因为内部存在上拉电阻某个引脚被外部信号拉低时会输出一个电流。2.4 设计方案以AT89C52为主控芯片,串行时钟芯片DS1302为核心计时芯片,LCD1602为主要显示器件,组成数字时钟电路。将AT89C52的P0口分别与LCD1602的D0D7相连,P2.0接DS1302的SCKL引脚,P2.1接DS1302的RST引脚,P2.2接DS1302的I/O引脚,P2.4接LCD1602的使能端E,P2.5接LCD1602的RS引脚,P2.6接LCD1602的RW引脚。此方案中,由于仿真看不出效果,未在DS1302的备用电源VCC2端接入备用电源。3.

6、 电路4. 程序#includesbit mode = P10; /功能键sbit add = P11; /加键sbit sub = P12; /减键sbit SCLK = P20; sbit DAT = P22;sbit RST = P21;sbit lcden = P24;sbit rs = P25;sbit rw = P26;#define ds1302_second_write 0x80 #define ds1302_second_read 0x81#define ds1302_minute_write 0x82#define ds1302_minute_read 0x83#defin

7、e ds1302_hour_write 0x84#define ds1302_hour_read 0x85#define ds1302_date_write 0x86#define ds1302_date_read 0x87#define ds1302_month_write 0x88#define ds1302_month_read 0x89#define ds1302_week_write 0x8a#define ds1302_week_read 0x8b#define ds1302_year_write 0x8c#define ds1302_year_read 0x8d#define l

8、cd1602_year 3#define lcd1602_month 6#define lcd1602_date 9#define lcd1602_week 12#define lcd1602_hour 0x40+4#define lcd1602_minute 0x40+7#define lcd1602_second 0x40+10unsigned int nian;unsigned char tt,nummode,flag=0;char hour,minute,second,year,month,date,week; unsigned char code table1= 20 - - ;un

9、signed char code table2= :unsigned char code table_week3=MON,TUEWEDTHUFRISATSUN;unsigned char days=31,29,31,30,31,30,31,31,30,31,30,31; /每月天数void ds1302_init(); /函数声明void delayus(unsigned char temp);void delayms(unsigned char temp);void ds1302_write_byte(unsigned char dat);unsigned char ds1302_read_

10、byte( );void ds1302_write(unsigned char address,unsigned char dat);unsigned char ds1302_read(unsigned char address);unsigned char ds1302_read_data(unsigned char address);void lcd1602_write_data(unsigned char date);void lcd1602_write_com(unsigned char com);void lcd1602_init();void lcd1602_write(unsig

11、ned char address,char date);void lcd1602_display();void init();void keyscan();void runnian();void main() /主函数 init(); while(1) runnian(); keyscan(); void init() /整体初始化 TMOD=0x01; TL0=(65536-20000)%256; TH0=(65536-20000)/256; EA=1; ET0=1; TR0=1; ds1302_init(); lcd1602_init();void ds1302_init() /初始化DS

12、1302 ds1302_write(0x8e,0x00); /关闭写保护 ds1302_write(ds1302_second_write,0x00); /初始化时间 ds1302_write(ds1302_minute_write,0x23); ds1302_write(ds1302_hour_write,0x21); ds1302_write(ds1302_date_write,0x04); ds1302_write(ds1302_month_write,0x06); ds1302_write(ds1302_week_write,0x01); ds1302_write(ds1302_yea

13、r_write,0x12);void lcd1602_init() /初始化lcd1602 unsigned char n=0; lcden=0; lcd1602_write_com(0x38); lcd1602_write_com(0x0c); lcd1602_write_com(0x06); lcd1602_write_com(0x01); /清屏 lcd1602_write_com(0x80); delayms(10); for(n=0;n0;temp-);void delayms(unsigned char temp) /延时毫秒 unsigned char i,j; for(i=0;

14、itemp;i+) for(j=0;j=1; unsigned char ds1302_read_byte( ) /从ds1302读一个字节 unsigned char n,dat=0; SCLK=1; /从低位开始 /产生下降沿 if(DAT=1)dat|=0x80; return dat;void ds1302_write(unsigned char address,unsigned char dat) /向ds1302指定地址寄存器写入数据 RST=0; SCLK=0; RST=1; ds1302_write_byte(address); ds1302_write_byte(dat);u

15、nsigned char ds1302_read(unsigned char address) /从ds1302指定地址寄存器读出数据 unsigned char dat; dat=ds1302_read_byte( );unsigned char ds1302_read_data(unsigned char address) /将二进制BCD码转成十进制 unsigned char dat,x; dat=ds1302_read(address); x=(dat&0xf0)4)*10+(dat&0x0f); return x;void lcd1602_write_data(unsigned c

16、har date) /向lcd1602写数据 rs=1; rw=0; P0=date; lcden=1; delayus(5);void lcd1602_write_com(unsigned char com) /向lcd1602写指令 rs=0; P0=com;void lcd1602_write(unsigned char address,char date) /在lcd1602指定位置写数据 char shiwei,gewei; lcd1602_write_com(0x80+address); shiwei=date/10; gewei=date%10; lcd1602_write_da

17、ta(0x30+shiwei); lcd1602_write_data(0x30+gewei);void lcd1602_write_week(char week) /lcd1602显示星期 lcd1602_write_com(0x80+lcd1602_week);3;n+) lcd1602_write_data(table_weekweek-1n);void lcd1602_display() /lcd1602刷新数据 hour=ds1302_read_data(ds1302_hour_read); minute=ds1302_read_data(ds1302_minute_read); s

18、econd=ds1302_read_data(ds1302_second_read); week=ds1302_read_data(ds1302_week_read); year=ds1302_read_data(ds1302_year_read); date=ds1302_read_data(ds1302_date_read); month=ds1302_read_data(ds1302_month_read); lcd1602_write(lcd1602_year,year); lcd1602_write(lcd1602_month,month); lcd1602_write(lcd160

19、2_date,date); lcd1602_write_week(week); lcd1602_write(lcd1602_hour,hour); lcd1602_write(lcd1602_minute,minute); lcd1602_write(lcd1602_second,second);void runnian() /处理闰年二月天数 nian=2000+year;if(nian%4=0)&(nian%100!=0)|(nian%100=0)&(nian/100%4=0)days1=29;else days1=28;void timer0() interrupt 1 /定时器0中断函

20、数 if(nummode=0) lcd1602_display();void keyscan() /按键扫描 if(mode=0) delayms(10); /消抖 if(mode=0) while(mode=0); /等待按键松开 nummode+; if(nummode=8) ds1302_write(ds1302_second_write,(second/10)4)|(second%10); /取消DS1302暂停,进入正常工作 nummode=0; switch(nummode) case 0: break; /不显示光标 case 1: ds1302_write(ds1302_sec

21、ond_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80+lcd1602_year-2); /定位到年 lcd1602_write_com(0x0f); case 2: lcd1602_write_com(0x80+lcd1602_month); /定位到月 case 3: lcd1602_write_com(0x80+lcd1602_date); /定位到日 case 4: lcd1602_write_com(0x80+lcd1602_week); /定位到星期 case 5: lcd1602_write_com(0x80+lcd1602_hour); /定位到时 case 6: lcd1602_write_com(0x80+lcd1602_minute); /定位到分 case 7: lcd1602_write_com(0x80+lcd1602_second); /定位到秒 if(nummode&add=0) if(add=0) while(add=0); switch(nummode) case 1:year+; if(year=99)year=0; lcd1602_write(lcd1602_year,year); ds1302_write(ds1302_year_write,(year/10)

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

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